copier et coller des onglets entre les fenêtres de terminal dans X11

11

Lorsque je copie et colle du texte à l'aide de la sélection de la souris X11 entre deux fenêtres de terminal, les onglets sont souvent, mais pas toujours, convertis en espaces. Cela semble dépendre des applications terminales impliquées et des programmes qui y sont exécutés.

Voici ce que j'ai découvert par expérimentation:

  • Cela dépend uniquement de ce qui fonctionne du côté source (copie). Le côté cible (coller) collera les onglets, peu importe ce qui est en cours d'exécution, si la source les a conservés.
  • Uniquement gnome-terminaldu côté source conserve les onglets. xtermet konsolenon.
  • Les onglets ne sont conservés que si le fichier a été généré à l'aide de cat. D' autres applications telles que less, vim, emacsou nanone préservons pas les onglets.

Quelle est l'explication pour ça? Sont ces bugs dans konsoleet xterm, ou peuvent - ils être configurés différemment? Peut-on lesset ainsi être configuré pour conserver les onglets en sortie?

Peter Eisentraut
la source

Réponses:

3

Oui, votre observation est correcte. Ce qui se passe lorsque vous copiez-collez, c'est que la cible obtient les données de la source. Lors de l'affichage de vos onglets, le xterm(et konsole), apparemment, les traduit eux-mêmes en espaces (si l'application exécutée à l'intérieur du terminal ne l'a pas déjà fait). Ainsi, lorsqu'une demande vient pour le texte sélectionné, tout ce qu'ils ont à offrir, ce sont les espaces.

Je me souviens même vaguement de la réponse d'un mainteneur d'xterm il y a quelques années, affirmant qu'il serait très difficile de corriger ...

Je ne suis pas sûr, comment gnome-terminal fait la bonne chose, mais je suis content qu'ils le fassent :) Une autre alternative est d'utiliser gvim(version graphique de vim) - au lieu de s'exécuter vimdans une application de terminal - vous pouvez copier-coller en toute sécurité à partir de gvim , sans perdre les onglets.

Mikhail T.
la source
0

Cela peut parfois être un problème, en particulier avec Makefileslequel nécessitent des onglets. Malheureusement, les problèmes avec différents programmes ne sont pas liés. Chacun aura probablement une solution très différente.

Pour vim, vous devez préformer un :set noexpandtabou le placer set noexpandtabdans votre ~/.vimrcfichier. Si vous souhaitez que seuls certains types de fichiers soient noexpandtabdéfinis, vous pouvez effectuer une autocommande dans votre ~/.vimrcJ'ai les éléments suivants dans le mien:

"indenting defaults: 4 spaces for an indent
set shiftwidth=4
set softtabstop=4
set expandtab

"exceptions to indenting for specific languages and files--------
"for shell scripts: 2 spaces for an indent
autocmd filetype sh setlocal shiftwidth=2
autocmd filetype sh setlocal softtabstop=2

"for Makefiles: use tabs for indents
autocmd filetype make setlocal tabstop=8
autocmd filetype make setlocal noexpandtab

Cela définira une valeur par défaut de 4 espaces pour un onglet vimet fera des exceptions pour les scripts shell et les Makefiles.

Pour les autres programmes comme less, essayez de regarder les pages de manuel. Ils peuvent avoir des fichiers de configuration, des variables d'environnement ou des options de ligne de commande pour ce dont vous avez besoin. En regardant la page de manuel less:

-xn,... or --tabs=n,...
       Sets tab stops.  If only one n is specified, tab stops  are  set
       at  multiples  of n.  If multiple values separated by commas are
       specified, tab stops are set at those positions, and  then  con-
       tinue  with  the  same  spacing  as  the last two.  For example,
       -x9,17 will set tabs at positions  9,  17,  25,  33,  etc.   The
       default for n is 8.

Ce que vous remarquez n'est pas un bug. "C'est une caractéristique." Le seul problème est que vous devez savoir comment le désactiver.

Sudo Bash
la source
2
less -xnle configure pour utiliser n espaces plutôt qu'un caractère de tabulation. -Ule fait afficher l'onglet comme ^I. Je n'ai pas trouvé de moyen de lui faire émettre un caractère de tabulation littéral afin que la copie du texte colle un caractère de tabulation, mais j'aimerais savoir comment.
Matt McClure
Il convient de noter que dans Roff ( troff& nroff), les tabulations peuvent être définies indépendamment les unes des autres, tout comme les barres d'outils "règle" dans les traitements de texte modernes (OpenOffice, Microsoft Word, et al). Cependant, les pages de manuel utilisent rarement des taquets de tabulation personnalisés.
mandoc(1)permet également aux utilisateurs de remplacer la largeur d'indentation par défaut à partir de la ligne de commande, en utilisant -O indent=N(par défaut 5 colonnes).