使手册页变窄并在终端中居中

krv*_*kir 4 less man

我有一个宽显示器,终端以全屏打开。我希望手册页缩小到 100 个字符宽,并在屏幕上居中,就像在 emacs olivetti 模式中一样: https: //github.com/rnkn/olivetti

我怎样才能做到这一点?

krv*_*kir 5

man按以下方式工作:

  1. 它用于groff将手册页源文件从 nroff 标记语言转换为可打印文本;
  2. 然后它将输出groff传递给寻呼机,寻呼机将其显示给用户。默认寻呼机是less.

groffman将页面格式设置为要使用的宽度。默认情况下man使用控制台的完整宽度,但我们可以使用MANWIDTH环境变量覆盖它:

export MANWIDTH=100
Run Code Online (Sandbox Code Playgroud)

我找不到任何方法来指导groff缩进,但幸运的是有一个名为输入预处理器的less工具(了解详细信息)。人们可以提供一个命令来传递输入。所以我写了一个脚本来缩进输入的每一行:man lessless

$ cat $HOME/bin/olivetti
#!/bin/sh
# Define desired width of the text.
WIDTH=100
# Evaluate left indentation based on terminal width.
INDENT=$(( ( $(tput cols) - $WIDTH ) / 2 ))
# Make line of that amount of spaces.
INDENT_LINE=$( printf %${INDENT}s )
# Put it on the beginning of each line of the input file.
sed "s/^/${INDENT_LINE}/" -
Run Code Online (Sandbox Code Playgroud)

less从环境变量中获取输入预处理器的命令$LESSOPEN

export LESSOPEN="|- olivetti %s"
Run Code Online (Sandbox Code Playgroud)

|-是指示less将预处理器用作管道:将标准输入重定向到它并从中读取标准输出。