man
funciona da seguinte maneira:
- usa
groff
para converter arquivos de origem de páginas de manual da linguagem de marcação nroff para texto imprimível; - então passa
groff
output para um pager que mostra para o usuário. O pager padrão éless
.
groff
formata a página para a largura man
diz para usar. Por padrão, man
usa a largura total do console, mas podemos substituí-lo usando a variável de ambiente MANWIDTH
:
export MANWIDTH=100
Não encontrei nenhuma maneira de instruir groff
sobre um recuo, mas, felizmente, há o less
facility chamado pré-processador de entrada ( man less
para os detalhes). Pode-se fornecer um comando para passar less
input. Então eu escrevi um script que recua cada linha da entrada:
$ 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
recebe o comando do pré-processador de entrada da variável de ambiente $LESSOPEN
:
export LESSOPEN="|- olivetti %s"
|-
é instruir less
para usar o pré-processador como um canal: redirecionar a entrada padrão para ele e ler a saída padrão dele.