supprimer les espaces finaux parasites lors du copier-coller à partir du mode console emacs?


5

En utilisant Emacs dans mode console , Je veux copier le texte sélectionné d’emacs avec la souris et le coller dans une autre application (éventuellement un autre terme).

Mais emacs ajoutera des espaces complets à la sélection pour remplir toute la largeur de l'écran.

Pour ajouter l'insulte à la blessure, vim marche parfaitement. Je devais passer à vim (ou cat ) faire un simple copier / coller.

En guise de scénario de test, vous pouvez écrire ce texte dans emacs (en mode console):

(echo Does it work: \
 true)
  1. Sélectionnez ce texte (les deux lignes) avec votre souris.
  2. Collez-le dans un terminal et appuyez sur

Si c'est écrit:

Does it work: true

Ensuite, cela fonctionne comme prévu (copier-coller travaillé), vous n'avez pas mon problème (pourquoi?). Mais sur mon ordinateur, je vois:

Does it work:

Et le "vrai" est manquant: il échoue comme décrit actuellement dans ce numéro.

Toute suggestion ?


1
L'expérience que tu décris me donne Does it work: true. Mac OS X 10.8.5, emacs (22.1.1) par défaut sans une seule personnalisation, iTerm2 2.0, version 4.3.30.
romainl

@romaini ok, merci, je n'ai pas pensé à la personnalisation. C'était ça.
vaab

Réponses:


6

En mode console, mise en évidence de la syntaxe pouvez gêner et générer des lignes entières "d'espaces" en cours de copie dans le code sélectionné.

Vérifier c'est le coupable

Pour vérifier si c'est ce qui vous tourmente:

  • désactiver la coloration syntaxique temporairement avec M-x global-font-lock-mode.
  • Ensuite, essayez de copier-coller et voyez si vous pouvez toujours reproduire le problème.
  • Une fois confirmée / infirmée, vous pouvez définir la surbrillance de la syntaxe avec la même commande.

Si la désactivation de la mise en évidence de la syntaxe corrige votre problème de copier / coller, vous voudrez peut-être lire les informations suivantes pour résoudre ce problème de manière définitive.

Pourquoi est-ce que ça se passe?

Le problème est que vous avez défini une couleur d’arrière-plan pour certaines polices (souvent sur le fond). défaut Police de caractère). En conséquence, emacs remplit l’arrière-plan avec des caractères vides pour pouvoir "peindre" l’écran comme vous le souhaitez et toute action de copier-coller contient ces espaces blancs parasites.

Comment résoudre ce problème?

Vous devriez vérifier votre visage personnalisations (pour défaut police que vous pourriez utiliser M-x customize-face <RET> default <RET> ) et si vous avez un Couleur de fond différent de unspecified-bg alors c'est le coupable. unspecified-bg est une sorte de couleur de fond transparente, qui est en fait la couleur de fond par défaut d’emacs si vous ne la personnalisez pas.

Nous pouvons forcer le fond à utiliser unspecified-bg sur emacs commencent par l'ajouter en vous ~/.emacs, après toute génération automatique custom-set-faces bloc:

(unless window-system
  (custom-set-faces
   '(default ((t (:background "unspecified-bg"))))))

Ensuite, redémarrez votre emacs ou M-x eval-region sur ce bloc pour vérifier le résultat.

En guise de remarque, vous récupérerez également les trucs d’arrière-plan d’un terminal sophistiqué dans votre emacs (je pense à la transparence ou aux images d’arrière-plan ...).

NOTE: même avec cela, vous pourriez avoir une mauvaise surprise avec des espaces blancs fantômes capturés dans un texte spécial, ce qui donnerait une police mal mise en surbrillance. Dans ces cas, vous pourriez envisager d'utiliser le premier truc.

Plus d'explications sur ce qui se passe

Les terminaux ont une couleur de fond qui leur est propre (certains terminaux peuvent même permettre d'afficher une image en tant qu'arrière-plan ou même d'être transparent). Donc, pour la console, il y a comme un rien de couleur (voyez-le comme un canal alpha), et c'est la couleur par défaut pour la console.

L'application console peut changer à la fois la couleur de la police et l'arrière-plan grâce aux séquences d'échappement ANSI.

Si vous demandez à emacs de changer la couleur d'arrière-plan, il vous faudra peindre artificiellement l'écran avec des caractères d'espaces blancs ayant leur propre couleur d'arrière-plan définie sur ce que vous avez choisi.

Lors de la sélection, vous utilisez souvent la fonctionnalité de copier-coller du terminal, qui ignore totalement l'application de la console que vous utilisez. Il le fait en copiant-collant tous les caractères présents à l'écran et copiera ainsi les espaces blancs.

Notez que vous pouvez avoir une configuration qui permettra à votre application console de recevoir les entrées de la souris et de gérer la sélection et le copier-coller. Mais ce n'est pas si commun et le shell, qui est l'application la plus courante active dans votre terminal, ne supporte pas la souris.


1
Je me suis heurté à cela moi-même, excellente réponse, merci. Je n'utilise pas custom-set-faces bien que j'ai converti votre réponse en (unless window-system (set-face-attribute 'default nil :background "unspecified-bg")) et cela a fonctionné pour moi. Même si je trouve que les lignes de commentaire ont le même comportement, elles sont au moins moins horribles que toutes les lignes.
robru

1
Ce correctif ( M-x customize-face <RET> default <RET> --> background-color: unspecified-bg ) a également corrigé un problème légèrement différent que je rencontrais dans Aquamacs.app (MacOSX): lorsqu’on tirait des lignes, un seul espace supplémentaire était ajouté à la toute fin du texte saisi - si j’en tirais deux fichier, la nouvelle ligne 3 aurait un espace parasite au début.
DouglasDD

Désactivation de la coloration syntaxique temporairement travaillée, mais modification .emacs comme spécifié pas (peut-être parce que je cours emacs dans une session tmux?).
abeboparebop
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.