2010-11-17 12 views

Respuesta

116

se puede determinar la secuencia de caracteres emitida por una clave pulsando Ctrl -. v en la línea de comandos, a continuación, pulsar la tecla que le interesa En mi sistema de F12, consigo ^[[24~. El ^[ representa Esc. Los diferentes tipos de terminales o emuladores de terminal pueden emitir códigos diferentes para la misma clave.

En un indicador de Bash, puede introducir un comando como este para habilitar la macro de la clave para que pueda probarla.

bind '"\e[24~":"foobar"' 

Ahora, al pulsar F12 , obtendrá "foobar" en la línea de comandos listos para su posterior edición. Si quieres un golpe de teclado para introducir un comando de inmediato, se puede añadir una nueva línea:

bind '"\e[24~":"pwd\n"' 

Ahora al pulsar F12 , obtendrá el directorio actual que se muestra sin tener que pulsar Enter . ¿Qué sucede si ya ha escrito algo en la línea y lo usa de manera automática? Podría ser complicado. Sin embargo, se puede borrar la línea como parte de su macro:

bind '"\e[24~":"\C-k \C-upwd\n"' 

El espacio se asegura de que el Ctrl - u tiene algo que eliminar para mantener la campana suene.

Una vez que haya conseguido que la macro funcione como desea, puede hacer que sea persistente al agregarla a su archivo ~/.inputrc.No hay necesidad de que el comando bind o el conjunto exterior de comillas simples:

"\e[24~":"\C-k \C-upwd\n" 

Editar:

También puede crear una clave de unión que se ejecutará algo sin molestar a la línea de comandos actual.

bind -x '"\eW":"who"' 

A continuación, mientras se está escribiendo un comando que requiere un nombre de usuario, por ejemplo, y lo que necesita saber los nombres de usuario que ha iniciado sesión, puede pulsar Alt - Shift - W y se mostrará la salida de who y el aviso se volverá a emitir con su comando parcial intacto y el cursor en la misma posición en la línea.

Desafortunadamente, esto no funciona correctamente para claves como F12 que producen más de dos caracteres. En algunos casos esto se puede solucionar.

El comando (who en este caso) podría ser cualquier ejecutable: un programa, script o función.

+2

¿Qué sucede si quiero agregar un enlace a "ctrl + q"? – kubudi

+5

@kubudi: 'bind '" \ C-q ": menu-complete'' por ejemplo (o en su' ~/.inputrc': '" \ C-q ": menu-complete'). También puede necesitar 'stty -ixon' en su' ~/.bashrc' para deshabilitar el control de flujo y hacer que^S y^Q estén disponibles. –

+0

Usted dice que '^ [' representa 'esc' y luego parece sustituirlo por' \ e' en su ejemplo. ¿Podrías explicar por qué por favor? – Remover

6

Esta solución es específica para entornos x11 y no tiene nada que ver con la fiesta, pero añadiendo lo siguiente a sus .Xmodmaps

% loadkeys 
keycode 88 = F12 
string F12 = "foobar" 
% 

enviará la cadena "foobar" al terminal al chocar contra F12.

+0

Tenga en cuenta que esto no es lo mismo que el shell que ejecuta un comando. Si realmente desea ejecutar un comando, tendrá que presionar enter (o hacer que la cadena enviada lo haga por usted). Probablemente también quiera estar seguro y despejar la línea primero. – Cascabel

+0

Esto sería increíble, pero parece que no funciona a partir de Fedora 20 de todos modos. Incluso intenté usar xev para encontrar primero el código clave apropiado para F12 (en mi caso, 96) y usarlo en lugar de 88. Ninguno de los dos funciona. – BobDoolittle

11

Puede definir enlaces de teclas bash en .inputrc (archivo de configuración para la biblioteca GNU Readline). La sintaxis es

< keysym o tecla del nombre >: Macro

por ejemplo:

Control-o: "> output" 

va a crear una macro que inserta "> salida" cuando se presiona

"\e[11~": "echo foobar" 

se crea una macro que inserta "echo foobar" cuando presionas F1 ... No sé qué teclados para F11 está disponible.

+0

Bien, pero esto solo "se inserta", ¿correcto? –

+3

puede usar "\ n" dentro de una macro, para agregar un carácter de línea nueva: –

+0

Esto funciona mejor para mí, ya que define la asignación de teclas al abrir un terminal. – Heldraug

Cuestiones relacionadas