我有一个宽显示器,终端以全屏打开。我希望手册页缩小到 100 个字符宽,并在屏幕上居中,就像在 emacs olivetti 模式中一样:https://github.com/rnkn/olivetti。
我怎样才能做到这一点?
答案1
man
按以下方式工作:
- 它用于
groff
将手册页源文件从 nroff 标记语言转换为可打印文本; - 然后它将
groff
输出传递给寻呼机,寻呼机将其显示给用户。默认寻呼机是less
.
groff
man
将页面格式设置为要使用的宽度。默认情况下man
使用控制台的完整宽度,但我们可以使用MANWIDTH
环境变量覆盖它:
export MANWIDTH=100
我找不到方法来指导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}/" -
less
$LESSOPEN
从环境变量中获取输入预处理器的命令:
export LESSOPEN="|- olivetti %s"
|-
是指示less
将预处理器用作管道:将标准输入重定向到它并从中读取标准输出。