4 votos

Permitir que la aplicación Terminal.app pase las pulsaciones de teclas de comando a los programas de terminal

Quiero permitir a los programas que se ejecutan en el terminal la capacidad de interpretar el atajo de teclado Cmd + S

Ya he reasignado la vinculación por defecto de los Terminales de Cmd + S a Ctrl + S a través de las Preferencias del Sistema del Teclado en OS X Lion, por lo que esto ha hecho que la propia aplicación Terminal deje de interpretar la pulsación de esa tecla, por ejemplo, el diálogo de guardado ya no aparece al pulsar Cmd + S . Sin embargo, algo sigue agarrando la entrada de teclas antes de que cualquier programa de terminal pueda hacerlo.

Por ejemplo, al ejecutar bash escribiendo Cmd + S en el terminal X11.app da como resultado:

$s

que se imprime en la pantalla.

Cuando realizo la misma Cmd + S en el Terminal.app no se imprime nada y el SO reproduce un sonido de error. No estoy muy seguro de por qué la pulsación de teclas no está haciendo a la terminal como se esperaba, ¿cómo puedo permitir Cmd + S para atravesar.

Para más información sobre qué / por qué estoy tratando de hacer esto ver la pregunta Vincular <Cmd-S> en Vim

2voto

mijenix Puntos 8

Tengo deseos similares a los tuyos. Lo resolví usando una revinculación de teclas modificadoras a nivel de sistema.

(Por supuesto, esto es un lío; pero me parece que vale la pena para mantener mi híbrido entrenado en MacVim de los controles de todo el sistema operativo (guardar, nuevo, copiar, pegar) dentro de la línea de comandos vim s.)

Así es como lo hice:

  1. Instalar Mosquetón que es un muy Un programa muy potente (y una parte esencial de la instalación de OS X de cualquier usuario o programador, en mi opinión)

  2. Activar "Comando_L a Control_L (sólo en Terminal)" :

  3. Mapa -controles prefijados que coinciden con los comandos de MacVim a los que está más acostumbrado en la línea de comandos vim . Por ejemplo, para apoyar ⌘S ,

    noremap  <silent> <C-S>    :update<CR>
    vnoremap <silent> <C-S>    <C-C>:update<CR>
    inoremap <silent> <C-S>    <C-O>:update<CR>
  4. Restauración prevista -para la propia Terminal.app, mediante la inclusión de un código especial en las Preferencias del Sistema. Por ejemplo, si quiere ⌘N para seguir controlando las pestañas de la Terminal, en lugar de asignarlas a vim archivos, inténtalo:

    Ahora, cualquier cosa que no añadir en esta lista, se pasarán literalmente a la línea de comandos vim (y, por supuesto, cualquier otro programa de línea de comandos que utilice).


Advertencias

Este enfoque tiene varios más sutiles desventajas, que quiero resaltar para cualquiera que esté considerando tomarla (como yo):

  • ⌘␣ ya no se asignará al Spotlight de todo el sistema. (Tengo un asunto pendiente en Karabiner, y volveré aquí cuando tenga una solución provisional).
  • Por razones que no puedo determinar, incluso con la ⌃W Si se configuran exclusiones en las Preferencias del Sistema, el comportamiento de cierre de pestañas de Terminal.app cambia con esta configuración: ⌘W cerrará las pestañas individuales de una ventana; pero si la pestaña actual es la último ficha, se no cerrar la ventana. En cambio, no tiene ningún efecto. He tenido que volver a entrenarme para usar ⇧⌘W para cerrar la ventana si sólo queda una pestaña.
  • Si te has entrenado para usar ⌃V en MacVim para hacer la selección por bloques, entonces tendrá que volver a entrenarse para usar la alternativa , ⌃Q (o, ahora, ⌘Q ). Además, tendrás que añadir stty -ixon en el inicio de su shell-script, como ⌃Q se consume por defecto para realizar una función arcaica de control del shell (sin uso moderno).

Alternativa ⌘W comportamiento

Además de lo anterior, decidí anular aún más ⌘W como una tecla universal de "cerrar esto", aplicable a múltiples aplicaciones.

En lugar de asignar ⌘W a "Cerrar Pestaña", como en el caso anterior; yo personalmente lo asigno a ⇧⌘W (para mantener la semántica de "cerrar inmediatamente esta pestaña".) Entonces, en cualquier programa, asigno ⌃W a algún tipo de funcionalidad de cerrar-guardar-salir.

Por ejemplo, en mi .vimrc :

noremap  <C-W>    :confirm quit<CR>
vnoremap <C-W>    <C-C>:confirm quit<CR>
inoremap <C-W>    <C-O>:confirm quit<CR>

o mi .zshrc :

function close_tab { exit }
zle -N close_tab_widget close_tab
bindkey           '' close_tab_widget
bindkey -M vicmd  '' close_tab_widget

Con esos dos fragmentos en su lugar, y su Terminal configurado para 'Cerrar si el shell sale limpiamente', una serie de ⌘W s saldrá primero de vim, y luego cerrará el shell por completo.

Además, ahora se puede conservar la funcionalidad adicional de los programas al salir: por ejemplo, vim preguntará antes de salir si los archivos no están guardados (al igual que MacVim); y zsh preguntará antes de renunciar si hay trabajos de fondo.


Posdata: No directamente relacionado con tu pregunta; pero también deberías echar un vistazo a 'Ubiquitous Vim Mode' en Karabiner. Es "un poco demasiado" para mí para usar todos los días, pero es una idea muy cool, y sorprendentemente bien implementado.

0voto

Mark Puntos 6

No estoy seguro de que esto se aplique, pero stty utiliza ctrl-s para detener la terminal hasta que se reinicie con ctrl-q. Yo sería un poco receloso de enviar ctrl-s a una terminal.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X