¿Cómo puedo mantener el contenido que leía del hombre después de dejar de fumar?

24

Por lo tanto, utilizamos man whateverpara obtener el uso y otra información sobre el whatevercomando, cuando se encuentra la sección relevante de información, me gustaría salir del mancomando con la información que queda en la pantalla. Entonces puedo escribir el siguiente comando con el árbitro de arriba. Pero el mancomando sale de toda la pantalla para recuperar la pantalla anterior similar a vim. ¿Hay una manera de lograr esto?

NathaneilCapital
fuente
Todas las sugerencias son buenas, pero también puede abrir una segunda ventana para ver la página del manual. Y probablemente también hay visores de la página de manual de la GUI.
Barmar

Respuestas:

38

Creo que esto no se trata tanto de mansí mismo sino más bien de su localizador de elección ( PAGERvariable de entorno) combinado con el terminal en uso.

Supongo que su localizador es probablemente less(localizador predeterminado típico hoy en día y se ajusta a la descripción).

lesstiene una opción -Xque puede darle un comportamiento similar a lo que está buscando.

   -X or --no-init
          Disables sending the termcap initialization and deinitialization
          strings  to  the  terminal.   This is sometimes desirable if the
          deinitialization string does something unnecessary, like  clear‐
          ing the screen.

Por ejemplo, PAGER="less -X" man manpodría usarse para probarlo, y si considera que este comportamiento es preferible, podría considerar establecer PAGEReste valor de forma permanente.

Håkan Lindqvist
fuente
Desafortunadamente, arruina el historial de desplazamiento.
musiKk
@musiKk me funciona bien en Ubuntu 16.04 con un terminal inteligente Unicode (no la consola Linux) y man 2.7.5
cat
3
@musiKk: si desea poder desplazarse hacia atrás a través de la página de manual después de salir del localizador, debe limitarse a desplazarse hacia adelante en la página de manual (por líneas o páginas), no el acceso aleatorio habitual.
Peter Cordes
1
O podría usarlo LESS=-Xpara evitar tener que cambiar PAGER(no confío al 100% en que funcione en todos los programas con un espacio como ese, aunque funciona en el hombre.)
Random832
11

Si está ejecutando menos como su localizador (que es muy común), no necesita tratar de modificar su localizador, solo realice la redirección de E / S:

man <whatever you want to man> | cat -

Esto imprimirá una copia en el terminal para que pueda desplazarse hacia arriba cuando lo necesite.

Brennen Smith
fuente
1
Un problema con este enfoque es que con páginas manuales largas, puede ser difícil volver a la parte que le interesa y no verá tanto esa parte como la línea de comando actual.
jlliagre
Ninguna de las otras sugerencias supera este problema: es inherente a una sola ventana de consola. Pero dicho esto, siempre puedes escribir tu comando, desplazarte un poco hacia arriba y el desplazamiento hacia abajo hasta tu comando medio escrito.
Brennen Smith
Mi sugerencia definitivamente supera este problema. Dejas el comando man cuando la página del manual que te interesa está en la pantalla y puedes escribir tu comando con esa página aún visible en la misma pantalla.
jlliagre
2
-significa estándar pero catasume que de todos modos
loa_in_
1
Es principalmente para la semántica: siempre me gusta ser explícito con stdin.
Brennen Smith
5

Como no solo lesssino también otras aplicaciones de texto como vimexhiben la misma característica extremadamente molesta, lo que hago es simplemente eliminar la capacidad del terminal de admitir los comandos involucrados de la terminfobase de datos.

Estos comandos son smcupy rmcup, que fueron diseñados para permitir el encendido y de un movimiento donde cupse permitió el comando (posición del cursor).

Aquí hay una función de shell que utilicé para automatizar la tarea, funciona al menos con Solaris y probablemente la mayoría de las distribuciones de Linux:

fixterminfo()
{
  (
    [[ ! -d /tmp/terminfo ]] && { mkdir /tmp/terminfo || return ; }
    cd /tmp/terminfo || return
    TERM=xterm infocmp > xterm.src.org
    sed -e 's/rmcup=[^,]*,//'  -e 's/smcup=[^,]*,//' xterm.src.org > xterm.src
    if diff xterm.src.org xterm.src
    then
      echo xterm terminfo already patched
      return
    fi
    TERMINFO=/tmp/terminfo tic xterm.src
    if [ -f /usr/share/lib/terminfo/x/xterm ] ; then
      XTERM=/usr/share/lib/terminfo/x/xterm
    else
      if [ -f /lib/terminfo/x/xterm ] ; then
        XTERM=/lib/terminfo/x/xterm
      else
        if [ -f /usr/share/terminfo/x/xterm ] ; then
          XTERM=/usr/share/terminfo/x/xterm
        else
          echo xterm terminfo not found ; return
        fi
      fi
    fi
    if [ ! -f ${XTERM}.org ]
    then
      sudo cp ${XTERM} ${XTERM}.org || return
    fi
    cat /tmp/terminfo/x/xterm | sudo dd of=${XTERM}
  )
}

Si su entrada de terminal no tiene respaldo xterm, debe reemplazarla xtermpor el nombre de terminal correcto en el script.

jlliagre
fuente
1
Sí, pero esto rompe otros programas (no necesariamente buscapersonas o maldiciones, sino editores similares a readline, etc.)
gato
1
@cat No es que haya verificado ninguno existente, pero nunca noté ningún problema con otros programas después de usar esta solución. ¿Tiene ejemplos de programas que se comportarían de manera extraña? También sospecho que si fallan, ese es un problema de su parte. Se supone que un emulador de terminal no admite todas las capacidades de terminfo que existen. Simplemente anuncia cuáles es compatible y depende de la aplicación tratarlo.
jlliagre
3

Puede canalizar la salida al catcomando

man man|cat

o úselo en lugar del buscapersonas predeterminado, como en este ejemplo que invoca al hombre sobre sí mismo:

PAGER=cat man man
SimoneLazzaris
fuente
2

Sin modificar el buscapersonas, una solución con tuberías que puede funcionar en la mayoría de los entornos:

Ejemplos para man ls

  • Deje la página de manual completa en la pantallaman ls | cat
  • Lea una salida man paginada , con la posibilidad de dejarla en cualquier momento con q :man ls | more
  • filtrar el contenido del hombre con un patrón y mantener líneas coincidentes en la pantalla:man ls | grep somestring
marcanuy
fuente
-3

es 2016, solo abra una segunda terminal o pestaña o ventana o lea al hombre en línea.

usuario362328
fuente
Y esta es la solución práctica obvia.
Braiam
1
@Braiam No es práctico si el terminal está en la pantalla del teléfono móvil.
NathaneilCapital
@NathaneilCapital Parece que es hora de aprender tmux.
Michael Hampton
-3

Incluso en mis servidores (FreeBSD) instalo X y xfce. Luego asigno un gran búfer (por ejemplo, 10 000 líneas) para los emuladores de terminal para que pueda desplazarme completamente por la página de manual en uno de ellos, y usar una instancia de terminal separada para ensamblar el comando. Funciona de maravilla.

MMacD
fuente