changer les touches de raccourci bash telles que Ctrl-C?

21

J'utilise Kubuntu 10.04. Je voudrais changer certaines des touches de raccourci standard pour bash (terminal).

Voici les raccourcis que j'aimerais mettre en place:

  • Ctrl- Cpour copier le texte sélectionné dans le terminal dans le presse-papiers.

  • Ctrl- Và coller du presse-papiers dans le terminal.

  • Ctrl- Zpour annuler l'édition sur la ligne courante dans le terminal.

  • Ctrl- Shift- C(ou encore mieux, Super- C) pour terminer la commande.

  • Ctrl- Shift- Z(ou Super- Z) pour être la commande d'arrière-plan.

  • Ctrl- Shift- V(ou Super- V) pour être la commande d'insertion littérale (ou quoi que Ctrl- ait zfait avant).

Comment puis-je effectuer ces modifications?

BTW, j'aime la façon dont le terminal fonctionne sous OS X. L'utilisation de la touche de commande rend toutes les commandes copier / coller très cohérentes (contrairement à beaucoup d'autres choses sous OS X).

PS J'ai lu la page de manuel de bash et cela n'a pas aidé. Cela m'a donné des idées, mais j'ai besoin d'exemples spécifiques pour les combinaisons ci-dessus. Merci.

Paul
la source
certains de ces "raccourcis" ne peuvent pas être "implémentés" dans bash, mais doivent être placés sur le terminal lui-même (xterm, gnome-terminal, konsole etc) .. par exemple "texte sélectionné", "presse-papiers"
akira

Réponses:

10

Ce ne sont pas des fonctionnalités de bash, ce sont des fonctionnalités du pilote de terminal. En tant que tels, ils sont spécifiés par 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
la source
5
D'ACCORD. Merci pour l'indice. Maintenant, je voudrais encore atteindre mon objectif. Et je sais aussi que inputrc peut remapper Ctrl-C. Mais je ne me soucie vraiment pas de la façon dont je le fais, je veux juste savoir comment remapper ces raccourcis dans un terminal.
Paul
15
Voici le "poisson": stty intr \ ^ k (où la commande terminate, anciennement Ctrl-C devient maintenant Ctrl-K, K peut être n'importe quelle touche alpha) Personne "ne m'a donné ce poisson". J'ai travaillé dur pour le trouver par moi-même. Donc, prêcher avec des proverbes vous fait ressembler à un imbécile, OMI.
Paul
Comment pouvez-vous le remapper en Ctrl + Maj + C?
crypdick
8

Ceci est presque complètement résolu maintenant. Une partie de la solution a d'abord été portée à mon attention par MTK358 sur http://www.linuxquestions.org/questions/linux-software-2/change-bash-shortcut-keys-such-as-ctrl-c-818170/ . Il a souligné le fait (plutôt évident, à mon grand embarras) que les touches de raccourci copier-coller peuvent facilement être modifiées par les paramètres de menu de konsole. Une fois que j'ai vu cela, il a fallu environ 1 minute pour configurer Ctrl-C et Ctrl-V pour copier et coller avec le terminal.

L'autre partie de la solution aurait dû être claire à partir de la page de manuel stty, mais ce n'était pas (pour moi). J'ai fini par expérimenter sur la base de divers indices, tels que ceux affichés ci-dessus.

J'ai décidé quelle touche non numérique je voulais remplacer Ctrl-C comme commande de fin. (J'ai utilisé "k"). Je n'ai jamais trouvé d'informations sur la façon de transmettre un modificateur de décalage à stty, alors j'ai abandonné. Cela étant décidé, tout ce que j'avais à faire était d'entrer ce qui suit sur la ligne de commande:

stty intr \ ^ k

J'ai vérifié que tout fonctionnait comme souhaité.

Maintenant, je devais juste placer la commande unique ci-dessus (stty intr \ ^ k) dans un script de démarrage. Je ne sais pas lequel est le "bon". J'aimerais que ce changement soit à l'échelle du système et permanent.

Des suggestions sur le script dans lequel je devrais placer la commande?

Et enfin, quant aux réponses prêcheuses, elles sont inutiles et inutiles.

Paul
la source
Avez-vous déjà déterminé quel est le "bon" script de démarrage à utiliser, ou une meilleure façon de procéder? Je me bats avec ce même problème (votre question d'origine). Mais bien que je puisse faire 'stty intr \ ^ k' lier ctrl-k, ce n'est pas délier ctrl-c et ni 'stty intr undef' ni 'stty intr = ^ -' fais-le, ctrl-c envoie toujours une interruption . Et 'stty -a' ne montre jamais aucun changement que j'ai fait.
EricS
4

Certaines d'entre elles peuvent être définies à l'aide du mécanisme de raccourci clavier KDE normal. Dans le menu "Paramètres" de Konsole, cliquez sur "Configurer les raccourcis", et vous obtiendrez une boîte de dialogue que vous pourrez utiliser pour modifier les raccourcis clavier des fonctions gérées par KDE. Cela vous permettra de remapper Ctrl + C pour copier et Ctrl + V pour coller - mais gardez à l'esprit qu'une fois que vous faites cela, ces séquences de touches ne seront plus transmises au terminal, vous ne pourrez donc pas utiliser Ctrl + C pour interrompre un programme, par exemple.

D'autres fonctions sont contrôlées par la readlinebibliothèque, que vous pouvez configurer en modifiant le fichier ~/.inputrc. Pour que Ctrl + Z annule les modifications apportées à la ligne actuelle, vous devez ajouter

C-z: revert-line

mais cette séquence de touches est probablement déjà piégée par le terminal, vous devrez donc peut-être l'utiliser sttypour la dissocier avant qu'elle ne fonctionne. Recherchez d'abord ^Zdans la sortie de stty -a(comme indiqué dans la réponse d'Ignacio) puis, par exemple, s'il apparaît dans susp = ^Z, exécutez

stty susp ^-

pour dissocier ce mappage de clé.

Les autres changements que vous demandez devraient être effectués sttycomme le dit Ignacio, car ce sont des fonctions de terminal, mais je ne sais pas exactement comment. Le problème est que je ne sais pas si le terminal reconnaît Shift, ou si c'est le cas, comment transmettre ces informations stty.

David Z
la source
3

Bash utilise emacsou vimode sur la ligne de commande. Il n'a aucun concept de "sélection" ou de "presse-papiers". Il utilise des choses comme un "kill buffer" et "point", "mark", "word", "line", "kill" et "yank", etc.

Essayer d'y intégrer une fonctionnalité de style GUI sera frustrant au mieux et ne fonctionnera pas pleinement. Vous devrez essayer de combiner les fonctions de stty, readlineet votre terminal (probablement Terminal.apppour vous). Vous devrez remapper des fonctions telles que intr, susp, lnext, etc., de sorte que vous pouvez toujours utiliser leurs fonctions.

Je déconseille fortement de telles modifications radicales. Il n'a tout simplement pas été conçu pour faire ce que vous voulez.

Quand à Rome ...

En pause jusqu'à nouvel ordre.
la source
Dave, pour un système qui fonctionne exactement comme OS X, puis-je vous suggérer d'utiliser OS X? Comme l'a laissé entendre Dennis, même si vous pouvez le faire fonctionner, vous serez assez entravé lorsque vous vous connecterez comme autre chose que vous sur votre propre machine.
msw
Je ne peux pas garantir les autres commandes, mais le copier-coller est parfaitement logique dans une fenêtre de commande et est très pratique. Je les utilise constamment pour copier et coller entre d'autres fenêtres et la console, et cela depuis de nombreuses années. Shift-Ctrl-C et Shift-Ctrl-V fonctionnent de cette façon pour Konsole hors de la boîte. Et bien que je le fasse tous les jours depuis des années, j'oublie et frappe inévitablement Ctrl-c à Konsole. Personnellement, je suis prêt à arrêter d'appliquer l'adage «à Rome» et à les remapper pour qu'ils fonctionnent comme pratiquement CHAQUE autre application existante.
EricS
1

Je lance Ubuntu et changé le raccourci pour la copie de la valeur par défaut Ctrl+ Shift+ Cà la plus normale et simple Ctrl+ C. Cependant , cela m'a fait courir en problème de ne pas pouvoir envoyer la commande d' interruption ^ C .

Grâce à la réponse @Paul, j'ai trouvé l'exécution de la commande

tty intr \^k

Me permettra d'envoyer la commande d'interruption en utilisant Ctrl+ K. Cependant, cette commande devait être exécutée chaque fois que j'ouvre le terminal, ce qui est un problème (tout comme il l'a mentionné lui-même).

Avec un peu de recherche supplémentaire (googler 😂), j'ai trouvé comment exécuter une commande chaque fois que le terminal est ouvert (dans Ubuntu de toute façon) .

Ainsi, finalement, exécuter la commande suivante (une fois) (dans Ubuntu 18.04 et probablement plus) donnera à chaque fois le comportement attendu.

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

Enfin, il convient de mentionner que vous ne devez pas utiliser le Kbouton. Vous pouvez échanger la lettre k dans toutes les commandes ci-dessus contre n'importe quelle touche de lettre de votre choix.

Wiggy Lindholm
la source