cambiar teclas de acceso directo bash como Ctrl-C?

21

Estoy usando Kubuntu 10.04. Me gustaría cambiar algunas de las teclas de acceso directo estándar para bash (terminal).

Estos son los atajos que me gustaría configurar:

  • Ctrl- Cpara copiar el texto seleccionado en el terminal al portapapeles.

  • Ctrl- Vpara pegar desde el portapapeles en la terminal.

  • Ctrl- Zpara deshacer la edición en la línea actual en el terminal.

  • Ctrl- Shift- C(o incluso mejor, Super- C) para terminar el comando.

  • Ctrl- Shift- Z(o Super- Z) para ser el comando de fondo.

  • Ctrl- Shift- V(o Super- V) para ser el comando de inserción literal (o lo que sea Ctrl- zlo hizo antes).

¿Cómo hago estos cambios?

Por cierto, me gusta la forma en que funciona el terminal en OS X. El uso de la tecla de comando hace que todos los comandos copiar / pegar sean muy consistentes (a diferencia de muchas otras cosas en OS X).

PD: leí la página de manual de bash y no me ayudó. Me dio ideas, pero necesito ejemplos específicos para las combinaciones anteriores. Gracias.

Pablo
fuente
algunos de estos "accesos directos" no pueden "implementarse" en bash, sino que deben colocarse en el terminal (xterm, gnome-terminal, konsole, etc.), por ejemplo, "texto seleccionado", "portapapeles"
akira

Respuestas:

10

Esas no son características de bash, son características del controlador de terminal. Como tal, están especificados por stty(1).

$ stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
Ignacio Vazquez-Abrams
fuente
55
OKAY. Gracias por la pista Ahora, todavía me gustaría lograr mi objetivo. Y también sé que inputrc puede reasignar Ctrl-C. Pero realmente no me importa cómo lo hago, solo quiero saber cómo reasignar estos accesos directos en una terminal.
Paul
15
Aquí está el "pez": stty intr \ ^ k (donde el comando de terminación, anteriormente Ctrl-C ahora se convierte en Ctrl-K, K puede ser cualquier tecla alfa) Nadie "me dio ese pez". Trabajé duro para encontrarlo por mi cuenta. Entonces, predicar con proverbios te hace ver como un imbécil, en mi opinión.
Paul
¿Cómo puedes reasignarlo a Ctrl + Shift + C?
crypdick
8

Esto está casi completamente resuelto ahora. Parte de la solución me llamó la atención por primera vez MTK358 en http://www.linuxquestions.org/questions/linux-software-2/change-bash-shortcut-keys-such-as-ctrl-c-818170/ . Señaló el hecho (bastante obvio, para mi vergüenza) de que las teclas de acceso directo de copiar y pegar se pueden cambiar fácilmente mediante la configuración del menú de konsole. Una vez que vi esto, me llevó aproximadamente 1 minuto configurar Ctrl-C y Ctrl-V para copiar y pegar con el terminal.

La otra parte de la solución debería haber sido clara desde la página de manual stty, pero no lo fue (para mí). Terminé simplemente experimentando en base a varias pistas, como las publicadas anteriormente.

Decidí qué tecla no numérica quería reemplazar Ctrl-C como comando de terminación. (Solía ​​"k"). Nunca encontré ninguna información sobre cómo transmitir un modificador de cambio a stty, así que me di por vencido. Con eso decidido, todo lo que tenía que hacer era ingresar lo siguiente en la línea de comando:

stty intr \ ^ k

Verifiqué que todo funcionó según lo deseado.

Ahora solo tenía que colocar el comando único arriba (stty intr \ ^ k) en un script de inicio. No estoy seguro de cuál es el "correcto". Me gustaría que este cambio sea de todo el sistema y permanente.

¿Alguna sugerencia sobre en qué script debo colocar el comando?

Y finalmente, en cuanto a las respuestas de la predicación, son innecesarias e inútiles.

Pablo
fuente
¿Alguna vez determinó cuál es el script de inicio "correcto" para usar, o una mejor manera de hacerlo? Estoy luchando con este mismo problema (su pregunta original). Pero aunque puedo hacer que 'stty intr \ ^ k' se una a ctrl-k, no es un ctrl-c no vinculante y ni 'stty intr undef' ni 'stty intr = ^ -' lo hacen, ctrl-c todavía envía una interrupción . Y 'stty -a' nunca muestra ningún cambio que haya hecho.
EricS
4

Algunos de estos pueden configurarse utilizando el mecanismo de atajo de teclado normal de KDE. En el menú "Configuración" de Konsole, haga clic en "Configurar accesos directos", y obtendrá un cuadro de diálogo que puede usar para cambiar las combinaciones de teclas para las funciones que maneja KDE. Eso le permitirá reasignar Ctrl + C para copiar y Ctrl + V para pegar, pero tenga en cuenta que una vez que haga eso, esas secuencias de teclas ya no pasarán al terminal, por lo que no podrá usar Ctrl + C para interrumpir un programa, por ejemplo.

La readlinebiblioteca controla otras funciones , que puede configurar editando el archivo ~/.inputrc. Para hacer que Ctrl + Z revierta cualquier edición realizada en la línea actual, desea agregar

C-z: revert-line

pero esa secuencia de teclas probablemente ya esté atrapada por el terminal, por lo que es posible que deba usar sttypara desvincularla antes de que funcione. Primero busque ^Zen la salida de stty -a(como se muestra en la respuesta de Ignacio) y luego, por ejemplo, si aparece en susp = ^Z, ejecute

stty susp ^-

para desvincular esa asignación de teclas.

Los otros cambios sobre los que está preguntando tendrían que hacerse sttycomo dice Ignacio, ya que esas son funciones de terminal, pero no estoy seguro exactamente cómo. El problema es que no sé si el terminal reconoce Shift, o si lo hace, cómo transmitir esa información stty.

David Z
fuente
3

Bash usa emacso vimode en la línea de comando. No tiene concepto de "selección" o "portapapeles". Utiliza cosas como "kill buffer" y "point", "mark", "word", "line", "kill" y "yank", etc.

Intentar calzar la funcionalidad de estilo GUI será frustrante en el mejor de los casos y no funcionará por completo. Usted tendrá que tratar de combinar las funciones de stty, readliney su terminal (presumiblemente Terminal.apppara usted). Tendrá que volver a asignar funciones tales como intr, susp, lnext, etc, por lo que aún puede utilizar sus características.

Recomiendo encarecidamente contra modificaciones tan radicales Simplemente no fue diseñado para hacer lo que quieres.

Cuando en Roma...

Pausado hasta nuevo aviso.
fuente
Dave, para un sistema que funciona igual que OS X, ¿puedo sugerirte que uses OS X? Como Dennis insinuó, incluso si puede hacer que funcione, se verá bastante cojeado cuando inicie sesión como cualquier cosa menos en su propia máquina.
msw
No puedo responder por los otros comandos, pero copiar y pegar tiene mucho sentido en una ventana de comandos y son muy útiles. Los uso constantemente para copiar y pegar entre otras ventanas y la consola, y lo he hecho durante muchos años. Shift-Ctrl-C y Shift-Ctrl-V funcionan de esta manera para Konsole fuera de la caja. Y aunque he hecho esto todos los días durante años, inevitablemente olvido y presiono Ctrl-c en Konsole. Personalmente, estoy listo para dejar de aplicar el adagio "cuando en Roma" y reasignarlos para que funcionen como prácticamente CADA otra aplicación que exista.
EricS
1

Ejecuté Ubuntu y cambié el acceso directo para Copiar del predeterminado Ctrl+ Shift+ Cal más normal y simple Ctrl+ C. Sin embargo, esto me hizo correr al problema de no ser capaz de enviar el comando de interrupción ^ C .

Gracias a la respuesta de @Paul encontré ejecutar el comando

tty intr \^k

Me permitirá enviar el comando de interrupción usando Ctrl+ K. Sin embargo, este comando necesitaba ejecutarse cada vez que abro el terminal, lo cual es una molestia (tal como se mencionó a sí mismo).

Con un poco de investigación adicional (buscando en Google I) descubrí cómo ejecutar un comando cada vez que se abre el terminal (de todos modos, en Ubuntu) .

Por lo tanto, finalmente ejecutar el siguiente comando (una vez) (en Ubuntu 18.04 y probablemente más) dará el comportamiento esperado cada vez.

echo $'# Make Ctrl+K interrupt command in terminal\nstty intr \^k\n' >> ~/.bashrc

Finalmente, vale la pena mencionar que no debe usar el Kbotón. Puede intercambiar la letra k en todos los comandos anteriores a cualquier tecla de letra de su elección.

Wiggy Lindholm
fuente