Man

使手冊頁變窄並在終端中居中

  • October 27, 2018

我有一個寬顯示器,終端全屏打開。我希望將手冊頁縮小到 100 個字元寬,並以螢幕為中心,就像在 emacs Olivetti 模式中一樣:https ://github.com/rnkn/olivetti 。

我怎樣才能做到這一點?

man工作方式如下:

  1. 它用於groff將手冊頁源文件從 nroff 標記語言轉換為可列印文本;
  2. 然後它將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將預處理器用作管道:將標準輸入重定向到它並從中讀取標準輸出。

引用自:https://unix.stackexchange.com/questions/478099