我有一个宽显示器,终端以全屏打开。我希望手册页缩小到 100 个字符宽,并在屏幕上居中,就像在 emacs olivetti 模式中一样: https: //github.com/rnkn/olivetti。
我怎样才能做到这一点?
man
按以下方式工作:
groff
将手册页源文件从 nroff 标记语言转换为可打印文本;groff
传递给寻呼机,寻呼机将其显示给用户。默认寻呼机是less
.groff
man
将页面格式设置为要使用的宽度。默认情况下man
使用控制台的完整宽度,但我们可以使用MANWIDTH
环境变量覆盖它:
export MANWIDTH=100
Run Code Online (Sandbox Code Playgroud)
我找不到任何方法来指导groff
缩进,但幸运的是有一个名为输入预处理器的less
工具(了解详细信息)。人们可以提供一个命令来传递输入。所以我写了一个脚本来缩进输入的每一行:man less
less
$ 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
将预处理器用作管道:将标准输入重定向到它并从中读取标准输出。