
No estoy seguro de cuándo sucedió ni de qué hice (si es que hice algo), pero mis teclas de flecha ya no funcionan en htop para desplazarme. Aunque solían hacerlo.
Debería poder presionar hacia arriba y hacia abajo para desplazarse hacia arriba y hacia abajo en la lista de procesos, pero no funcionan. Algunas claves tienden a ser el equivalente a "regresar" o algo así. Si estoy en la pantalla de configuración, izquierda, arriba y abajo regresan a la pantalla principal.
htop parece ser el único programa afectado.
- TERM es color xterm
- less no se ve afectado (puede desplazarse hacia arriba y hacia abajo)
- htop vino decerveza casera, que utiliza elhtop-osxrepositorio en github, que no ha cambiado desde mediados de 2009
- TERMINFO está vacío
Mi salida cat -v
% cat -v
^[[A^[[B^[[C^[[D
^[[A^[[B^[[C^[[D
%
- Tanto menos como htop usan el sistema (y por lo tanto lo mismo) nmaldiciones
- Mismo problema para el usuario root
Salida del script sh
Type <Up> <Down> <Right> <Left> <Control-D> <Control-D>
(no output until after the first <Control-D>, please type "blindly")
^[OA^[OB^[OC^[OD
Expected:
^[OA^[OB^[OC^[OD
También intenté usariTermy da los mismos resultados, por lo que no es específicamente Terminal.app
Episodio 6: El regreso del Jedi
Quería vincular contra libncurses, pero ncurses homebrew se compila con modo de caracteres amplios, por lo que todas las bibliotecas que obtienes son libncursesw. Quité las banderas para compilar con caracteres anchos en la cerveza, instalé ncurses homebrew e instalé htop desde ncurses, y ahora funciona.
Respuesta1
Anexo: Aparentemente, ncurses en 10.6.3 no funciona
Una respuesta sobre SOenlaces auna entrada de blogque describe algunas otras investigaciones sobre el problema. Una solución alternativa es copiar la biblioteca ncurses desde 10.6.2, pero esto puede tener efectos secundarios no deseados.
ESC suele ser el primer carácter de la "secuencia de control" enviada por un terminal (o un programa de emulación de terminal comoTerminal) para teclas especiales (como las teclas de flecha, F1, Home, Page Upetc.).
ESCtambién sirve como tecla de "regreso" enarriba(generalmente solo después de un retraso, para que las conexiones lentas tengan tiempo suficiente para enviar una secuencia de control completa que comienza con ESC).
Actualice su pregunta con las respuestas a las siguientes preguntas:
¿Qué es el PLAZO?
¿Quizás su variable de entorno TERM tenga un valor impar? ¿Qué echo $TERM
informa en una ventana dondearriba¿Se comporta como lo has descrito? TERM
probablemente debería ser xterm-color
, o algo similar.
De dónde sacastearriba? ¿MacPorts? ¿Soplón? ¿otro?
Las aplicaciones compiladas con los ncurses proporcionados por el sistema utilizarán entradas de /usr/share/terminfo/
. MacPorts generalmente usa /opt/local/
como prefijo, por lo que las aplicaciones que usan ncurses de MacPorts usarán entradas de /opt/local/share/terminfo/
. Fink normalmente lo usa /sw/
como prefijo, por lo que las aplicaciones que usan ncurses de Fink usarán entradas de /sw/share/terminfo/
.
¿La TERMINFO
variable de entorno tiene un valor? Si es así, ncurses (cualquiera que sea la fuente) buscará en el directorio especificado allí.
Podría ser que tenga una definición de terminfo parcialmente dañada para el terminal especificado en TERM ('parcialmente dañada' porque las secuencias de control de salida deben estar bien o vería anomalías obvias en la visualización).
¿Cuáles son algunos ejemplos de programas que no se ven afectados?
Si tiene programas basados en ncurses que manejan las teclas de flecha OK (tal vez usando una instalación diferente de ncurses), puede intentar usar las otras entradas de terminfo conarribay viceversa (configurando TERMINFO
la ubicación de las entradas de la instalación de otras ncurses).
¿Qué códigos envía realmente tu terminal?
Úselo cat -v
para examinar qué códigos se envían cuando usa las teclas de flecha. Lo siguiente es lo que veo cuando presiono Up, Down, Right, Left, Enter, Control- Ddespués de comenzar cat -v
:
% cat -v
^[[A^[[B^[[D^[[C
^[[A^[[B^[[D^[[C
%
El primer conjunto de códigos es un eco producido por el dispositivo tty. El segundo conjunto es producido porgatoy puede ser diferente del primero enviado, dependiendo de los códigos exactos presentes.
Estos códigos se pueden configurar enTerminal, pero normalmente no es necesario ya que hay modos especiales que cambian los códigos (a veces envía Up ESC [ A
, a veces envía ESC O A
.
En definitiva el problema es quearribano reconoce los códigos que se envían como códigos para las teclas de flecha, por lo que podría ser útil saber que los códigos realmente se están enviando.
Apéndice:arribade cerveza casera;menosestá bien
¿Contra qué maldiciones está?arriba¿vinculado?
Parece que elarriba'fórmula'eracambiado a finales de 2009 para no depender de la versión Homebrew de ncurses. Presumiblemente esto significa que las versiones dearribaque se construyeron a partir de esta nueva fórmula utilizarán el sistema ncurses. Entonces, ¿cuál maldición es tuarriba¿Uso binario?
ls -l "$(which htop)"
otool -L "$(which htop)"
Si tuarribaes anterior a 2009-12-18 o está vinculado a sus ncurses de Homebrew (probablemente /usr/local/lib/libncurses.5.dylib
), entonces podría considerar reconstruir elarribafórmula ( brew remove htop; brew install htop
?). Alternativamente, si su existentearribabinario está usando una versión Homebrew de ncurses (o la versión reconstruida también todavía usa ncurses Homebrew), entonces puede intentar reconstruir la fórmula de ncurses.
Mencionas esomenosFunciona bien. Parece que no existe una fórmula casera paramenos, por lo que probablemente esté utilizando el sistema proporcionadomenos. Vale la pena señalar cuáles son tus maldiciones.menosestá usando para comparar conarriba.
otool -L "$(which less)"
Apéndice:arribaymenosutilizar maldiciones del sistema
Si el problema se debe a algún tipo de configuración por usuario, debería desaparecer si crea unaPara estrenarusuario y pruébalo mientras estás conectado como ellos. Si el problema persiste con el nuevo usuario, sabrá que es un problema de todo el sistema (¡o el problema está en la configuración inicial básica que se les da a todos los usuarios nuevos!). Una vez que haya terminado la prueba, simplemente elimine el usuario para evitar saturar el selector de inicio de sesión, etc.
Terminaly otros terminales y emuladores de terminal estilo VT100 tienen un modo de “Tecla de cursor de aplicación” donde las teclas de cursor envían diferentes secuencias de control a la aplicación. En modo “aplicación”, el terminal envía ^[OA^[OB^[OC^[OD
en lugar de ^[[A^[[B^[[C^[[D
(Para Arriba, Abajo, Derecha, Izquierda, ambos respectivamente). Las secuencias en modo no “aplicación” que envía el terminal son idénticas a los códigos que el terminal esperaría recibir.recibircomo códigos de control del cursor.
Es posible que suTerminalno envía los códigos correctos de las teclas del cursor de la aplicación. Esto parece poco probable ya que dices eso.menosfunciona (también usa el modo “aplicación”). Presumiblemente quiere decir que las teclas de flecha funcionan para navegar enmenos. Debido a la "memoria muscular", casi siempre uso elviTeclas de estilo ( kjlh
) para navegarmenos.
¿Qué son los códigos de “teclas del cursor de la aplicación”?Terminal¿enviando?
Puedes comprobar esoTerminalestá enviando las secuencias esperadas de "tecla del cursor de la aplicación" con algo como esto:
sh -c "$(cat <<\EOF
noecho_appmode() {
stty -echo
printf '\033[?1h'
}
modes="$(stty -g)"
restore_echo_and_appmode() {
stty "$modes"
printf '\033[?1l'
}
printf '\nType <Up> <Down> <Right> <Left> <Control-D> <Control-D>\n'
printf '(no output until after the first <Control-D>, please type "blindly")\n\t'
noecho_appmode ; trap 'restore_echo_and_appmode' 0
cat -v
restore_echo_and_appmode ; trap '' 0
printf '\nExpected:\n\t'
printf 'kcu%c1\n' u d f b | /usr/bin/tput -S | cat -v
printf '\n\n'
EOF
)"
La salida etiquetada "Esperado:" se basa en las entradas de terminfo del sistema para su TERM
, por lo que debería ser lo que los programas basados en ncurses esperan ver.
Si los códigos reales difieren de los códigos esperados, entonces debe investigar la configuración deTerminalpara encontrar dónde se han configurado los códigos incorrectos.
Si esto no indica ningún problema (los códigos deTerminalcoinciden con los códigos esperados), ejecutaría una copia no setuid dearribabajoktrace(¿o tal vez un poco de DTrace?) para ver las E/S in situ. La naturaleza de la E/S podría darle a alguien una pista sobre la causa del problema. La salida completa dekvolcadoserá muy grande debido a que se informan los detalles de la carga de bibliotecas compartidas y archivos de datos de soporte, pero incluso con esas cosas eliminadas, todavía obtengo casi 2000 líneas y 100 kB de salida dekvolcado. Probablemente esto sea demasiado para publicarlo aquí.
Respuesta2
Esto parece haberse solucionado en 10.6.4, que se lanzó el 15 de junio de 2010. Acabo de actualizar mi iMac que ejecutaba 10.6.3 y las teclas de maldiciones (incluidas las teclas de flecha) responden correctamente en mis aplicaciones.
Respuesta3
Gracias por la ayuda para intentar depurar esto. Tengo el mismo problema y obtuve la lista de bibliotecas en una instalación predeterminada de OSX 10.6 también realizada con homebrew como Daniel. Aquí está el volcado de pantalla, me parecen las mismas versiones:
marvin:~ sheldon$ otool -L "$(which htop)"
/usr/local/bin/htop:
/usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.1)
marvin:~ sheldon$ otool -L "$(which less)"
/usr/bin/less:
/usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.1)
Respuesta4
Tengo el pequeño teclado bluetooth de Apple que no tiene teclas Av Pág y Av Pág. Entonces, para que estas funciones funcionen en htop, uso estas teclas:
Re Pág: Tecla Mayús → Tecla de función → Tecla de flecha hacia arriba Av
Pág: Tecla Mayús → Tecla de función → Tecla de flecha hacia abajo
He visto que esto funciona en otras aplicaciones que también tienen el mismo problema.