Ce sont les raccourcis clavier d'édition de texte standard que j'utilise constamment chaque fois que vous éditez du texte dans, littéralement, n'importe quelle application Linux autre que les émulateurs de terminal:
- flèches gauche + droite pour se déplacer gauche + droite
- ctrl + flèche pour déplacer un mot entier
- home / end pour passer au début / fin de la ligne
- ctrl + c / ctrl + v pour copier / coller [certains terminaux peuvent utiliser shift-ctrl-C / shift-ctrl-V; c'est un bon substitut]
- Maj + flèche pour surligner le texte
- Maj + Ctrl + Flèche pour mettre en évidence un mot entier
Je n'ai jamais trouvé une combinaison de shell et d'émulateur de terminal qui autorise les deux derniers éléments de cette liste, et cela me rend fou. De toute évidence, les émulateurs de terminaux prennent en charge la mise en surbrillance (la souris peut le faire), et ils prennent en charge l'utilisation des touches ctrl et shift comme modificateurs (ils peuvent être utilisés pour déplacer le curseur d'un mot entier et pour mettre des lettres en majuscule, respectivement; [edit:] ils peuvent même être utilisés ensemble pour copier / coller avec shift-ctrl-C et shift-ctrl-V), alors quel est le problème empêchant cette fonctionnalité? J'ai plusieurs questions:
- Est-ce un problème avec mon émulateur de terminal ou avec mon shell (bash, même si je suis prêt à changer)?
- Pourquoi les émulateurs / coques de terminaux ne sont-ils pas conformes à cette norme par ailleurs universelle?
- S'il y a une raison réelle, est-elle ancienne et obsolète, ou est-elle toujours pertinente pour un nombre important d' utilisateurs Linux de bureau ?
- Existe-t-il une sorte de solution de contournement?
- Existe-t-il un programme obscur que je peux utiliser qui prend en charge cela?
- Est-il possible de modifier la source de, disons, gnome-terminal pour supporter cela?
Je sais que le texte peut être copié / collé avec la souris, ce n'est pas ce que je demande. Je demande pourquoi je ne peux pas faire ces choses avec le clavier dans un émulateur de terminal.
la source
Réponses:
Je pense que ce serait très utile si je prenais ceci un morceau à la fois. Le problème général est: à qui s'adresse la touche? Le terminal ou le programme exécuté à l'intérieur du terminal?
Par exemple, "screen", qui est une sorte de terminal, utilise Ctrl+ Acomme préfixe pour ses commandes, pour les distinguer des choses qui vont au programme en cours d'exécution lui-même. (Et fournit un moyen d'envoyer Ctrl+ A.)
gnome-terminal
a plusieurs clés qu'il capture pour faire diverses choses, y compris celles que vous demandez.Gardez également à l'esprit que la "mise en évidence" d'un terminal est distincte de la position du curseur du terminal . Certains terminaux n'ont aucune capacité de mise en évidence.
Maintenant, en prenant ces combinaisons de touches à la fois:
Déplacer quoi à gauche et à droite? Bash peut être configuré pour cela, et est généralement par défaut. En règle générale, ceux-ci déplacent la position du curseur.
Premièrement: le copier / coller a-t-il même un sens? Si vous êtes dans un VT, vous n'avez pas vraiment de presse-papiers, surtout si X ne fonctionne pas.
Certains terminaux peuvent copier du texte dans la sortie, et certains "collent" également en vous simulant en tapant le contenu du presse-papiers. Ctrl+ Shift+ V, par exemple, est collé
gnome-terminal
, ce qui peut aider. (Et Ctrl+ Shift+ Cest une copie.) Comme discuté précédemment, le gros problème avec Ctrl+ Cet Ctrl+ Vest qu'ils se chevauchent avec les commandes de terminal / programme courantes. ( Ctrl+ Cest une interruption d'envoi (SIGINT) et Ctrl+ Vest mot pour mot.)Certains terminaux prennent également en charge deux modes de copie des données: une "copie juste" plus normale, et ce que l'on appelle "sélection de bloc" ou "copie de bloc". (Maintenez Ctrl, puis faites glisser tout en étant
gnome-terminal
par exemple.)En outre,
xsel -b
peut être utilisé pour canaliser le contenu du presse-papiers. Dépend de la situation exacte sixsel
la version de pâte du terminal est plus utile. Tu voisman xsel
.La surbrillance de votre terminal (si elle a cette capacité) est distincte de la position du curseur. Encore une fois, le manque de combinaisons de touches disponibles est probablement un facteur. Gardez à l'esprit qu'un surlignage a deux positions: soit le début et la fin, soit les coins supérieur gauche et inférieur droit. Comment gérez-vous les deux?
Enfin, notez que de nombreux terminaux GUI, un double-clic sur un mot le mettra en surbrillance. (Et en X, copiez vers la sélection principale.)
screen
, par exemple, a des touches pour basculer dans un mode pour se déplacer dans le tampon (sortie précédente) et copier / coller.Je pense que si vous faites un usage adéquat de
xsel
la sélection principale, vous constaterez que les opérations du presse-papiers sont à la fois assez rares et suffisamment complexes pour mériter l'utilisation de la souris.la source
gnome-terminal
aurait des problèmes similaires: ils ne l'ont probablement pas implémenté parce que ce n'est pas exactement quelque chose que vous faites. Gardez à l'esprit que le shell n'est pas le seul programme en cours d'exécution: n'importe quel programme peut être en cours d'exécution et il peut vouloir utiliser n'importe quelle séquence de touches que vous pourriez utiliser pour copier / coller à ses propres fins. l'écran a des moyens d'envoyer les clés qu'il remplace, et gnome-terminal essaie de ne pas marcher sur les orteils.Je ne suis pas un expert des émulateurs de terminaux mais ...
des applications comme bash (readline) fonctionnant dans un émulateur de terminal ne savent rien du système X Window en cours d'exécution et de la fenêtre X dans laquelle elles se trouvent, elles connaissent stdin et stdout sur un terminal (ttyS / ttyUSB / tty / pts sous linux).
Le problème n'est pas de montrer du texte en surbrillance, mais comment faire savoir à l'application X window (l'émulateur de terminal) que le texte a été sélectionné, via ces terminaux.
Je suppose que l'application du terminal X ouvert un de ces appareils en entrée et en sortie, puis traduis événements clés X à bien sortie (de côté) X entrée (d' un côté bash). Viceversa le flux de sortie bash vers le terminal X en entrée , ici le terminal X traite cette entrée pour déplacer le curseur, remplit le fond avec un peu de couleur, selon la sortie de l'application bash.
Pour ma connaissance, les codes d'échappement peuvent être utilisés pour contrôler des comportements spéciaux, comme effacer, remplir l'arrière-plan, déplacer le curseur, et peut - être qu'un code d'échappement personnalisé pourrait être ajouté pour faire savoir au terminal X qu'un texte de ligne, col à ligne, col a été sélectionné, juste un exemple, peut-être que le texte sélectionné pourrait simplement être retourné (un détail d'implémentation).
Je suppose que n'étant pas une définition standard, vous devrez patcher toutes les applications que vous souhaitez prendre en charge pour savoir que la combinaison de touches a appuyé et sortir le code d'échappement approprié, la ligne de lecture si vous le souhaitez dans le bash, l'émulateur de terminal X sur l'autre côté pour traiter correctement le code d'échappement (et enfin envoyer les informations au presse-papiers). La mise en œuvre probable de cette fonctionnalité en tant que terminal vous éviterait de corriger chaque application. J'espère (et devinez) que les pilotes de périphériques du noyau veulent en savoir moins que possible sur les codes d'échappement, donc si vous avez de la chance, aucun correctif ne sera nécessaire.
Le terminal X dessine la sortie, afin qu'il sache facilement, lorsque vous utilisez la souris, quel texte / caractère sélectionnez-vous.
Un widget de texte graphique sait tout sur sa fenêtre X et explique pourquoi il est si facile de mettre en œuvre la sélection et la copie.
ÉDITER
Ici, ce correctif d'affichage d'image urxvt-9.16 pourrait être un bon point de départ pour comprendre ce qui est nécessaire pour prendre en charge de nouveaux codes d'échappement. http://lists.schmorp.de/pipermail/rxvt-unicode/2013q1/001736.html
la source
Les réponses sont de bonnes explications pour expliquer pourquoi il est difficile de le faire. Voici quelque chose que vous pouvez faire dans gnome-terminal pour configurer ctrl-cet ctrl-vcopier et coller, tout en reliant d'autres clés dans la discipline du terminal avec
stty
pour envoyerSIGINT
et insérer un caractère mot pour mot. Ce n'est pas une solution complète car certains programmes désactivent la discipline du terminal et vous ne pourrez pas leur envoyer '^ C' et '^ V'. Plus d'infos ici .Dans votre (par exemple le script de démarrage du shell
~/.bashrc
,~/.zshrc
,~/.rcrc
), faireEnsuite, dans gnome-terminal Edition> Préférences> Raccourcis, vous pouvez lier Copier et Coller à ctrl-c et ctrl-v. Notez que le terminal recevra les événements clés avant que quoi que ce soit ne soit envoyé au terminal, vous ne pourrez donc plus envoyer '^ C' et '^ V' à n'importe quel processus en cours d'exécution sur le terminal.
Je viens de le faire et je vais voir comment cela se passe et quels problèmes cela provoque. J'ai fait le stty de façon conditionnelle pour les appliquer uniquement lorsque je lance X.
la source
Comme Thanatos l'a mentionné, il y a une distinction à faire entre l' émulateur de terminal (fonctionnant sous X Windows ou Wayland) et les programmes exécutés dans le terminal (appelons cela le "shell", bien qu'il ne le soit pas); ces deux choses sont isolées l'une de l'autre (voir détails techniques ).
Les premiers éléments de votre liste (touches fléchées, Début / Fin, etc.) sont gérés directement par le programme à l'intérieur du terminal, et donc la position du curseur est contrôlée par le programme à l'intérieur du terminal.
Les raccourcis copier-coller (Ctrl + Shift + C et Ctrl + Shift + V), d'autre part, sont gérés par l'émulateur de terminal, qui comprend la souris (vous pouvez donc sélectionner du texte avec la souris), il sait ce qui est sur l'écran (afin qu'il puisse copier), et peut envoyer des touches au programme à l'intérieur (afin qu'il puisse coller).
Afin de prendre en charge Shift + Left et Shift + Right, l'émulateur de terminal ou le shell doivent gérer la frappe. De toute façon, nous avons un problème:
xclip
). Et pour autant que je sache, si le shell prend en charge la sélection de texte, Linux ne définit aucun mécanisme pour informer l'émulateur de terminal de ce qui est sélectionné.~ $ ls -l
et l'émulateur de terminal ne sait pas que seule lals -l
partie appartient à l'utilisateur.Il n'est pas difficile d'imaginer un émulateur de terminal qui prend en charge la sélection avec Shift + Flèches, mais je suppose qu'il faudrait masquer le curseur du shell et introduire son propre "faux curseur" qui existe temporairement pour vous aider à sélectionner quelque chose, puis vous pourriez appuyer sur Ctrl + C / Ctrl + Maj + C / Ctrl + Ins pour copier (ou Esc pour annuler) et afficher à nouveau le vrai curseur. Bien sûr, cela n'aurait pas toutes les capacités d'une sélection normale - notamment couper et supprimer.
la source
Voici les liaisons de clavier CUA que vous décrivez, une norme d'IBM au milieu des années 80:
https://en.wikipedia.org/wiki/IBM_Common_User_Access
Ils sont généralement implémentés dans tous les environnements de bureau créés depuis. Les outils DOS, Windows, Motif et même Netware ont tous convergé vers ce standard. Une exception est le Mac, qui utilise un ensemble assez similaire mais différent (Cmd au lieu de Ctrl) de la même période.
Les terminaux Unix sont cependant bien antérieurs à cette norme et la plupart l'ont ignoré. De plus, s'ils implémentaient ces liaisons de clés, cela pourrait interférer avec les programmes TUI qui les utilisent déjà pour d'autres fonctionnalités. Donc, bien que techniquement faisable, problématique aussi.
Applications:
L'
micro
éditeur de texte est le meilleur que j'ai vu pour émuler un éditeur de texte GUI, similaire à DOS,edit
mais avec des fonctionnalités plus modernes à la Sublime Text.ne
est une ancienne dans les dépôts Debian, etnano
peut même être configurée avec des raccourcis clavier sensés. Mais le terminal / shell nu, non.Avec,
libvte
il pourrait être facile de créer un terminal virtuel rudimentaire qui gère vous-même ces raccourcis clavier. Beaucoup de travail pour un tout petit gain cependant.la source
J'ai juste aidé un copain à résoudre un problème similaire à celui-ci et j'ai découvert que le gestionnaire de presse-papiers clipit était le coupable.
sudo apt-get supprimer clipit
a été en mesure de tout remettre en place et de bien fonctionner pour lui. J'espère que cela pourrait aider quelqu'un d'autre là-bas.
la source