5 votes

supprimer les espaces de fin de ligne parasites lors du copier-coller depuis le mode console d'emacs ?

Utilisation de emacs en mode console Je veux copier le texte sélectionné par la souris depuis emacs et le coller dans une autre application (peut-être un autre terme).

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

Pour ajouter l'insulte à la blessure, vim fonctionne parfaitement. J'ai dû passer à vim (ou cat ) pour effectuer un simple copier/coller.

Comme 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 elle écrit :

Does it work: true

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

Does it work:

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

Une suggestion ?

7voto

vaab Points 422

En mode console, coloration syntaxique peut se mettre en travers du chemin et générer des lignes entières d'"espaces" copiés dans le code sélectionné.

Je vérifie que c'est le coupable

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

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

Si la désactivation de la coloration syntaxique a résolu votre problème de copier/coller, vous pouvez lire ce qui suit pour résoudre définitivement le problème.

Pourquoi cela se produit-il ?

Ce qui déclenche le problème, c'est que vous avez défini une couleur d'arrière-plan pour certaines polices (souvent sur la page d'accueil). par défaut police). Par conséquent, emacs remplit l'arrière-plan de caractères vides afin de pouvoir "peindre" l'écran comme vous le souhaitiez, et toute action de copier-coller contiendra ces faux espaces blancs.

Comment résoudre ce problème ?

Vous devez vérifier votre visage personnalisations (pour par défaut vous pourriez utiliser la police 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, et c'est en fait la couleur de fond par défaut d'emacs si vous ne l'avez pas personnalisé.

Nous pouvons forcer l'arrière-plan à utiliser unspecified-bg sur emacs commencer par ajouter ceci dans votre ~/.emacs après toute génération automatique de custom-set-faces bloc :

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

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

Accessoirement, vous récupérerez aussi toutes les astuces d'arrière-plan du terminal dans votre emacs (je pense à la transparence ou aux images de fond...).

REMARQUE : même avec cette astuce, vous pourriez avoir de mauvaises surprises avec des espaces blancs fantômes capturés dans certains textes spéciaux, qui obtiendraient une police mal mise en évidence. Dans ces cas, vous pouvez envisager d'utiliser la première astuce.

Plus d'explications sur le pourquoi de ce phénomène

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

L'application console peut modifier la couleur de la police et de l'arrière-plan au moyen de séquences d'échappement ANSI.

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

Lors de la sélection, vous utilisez souvent la fonctionnalité de copier-coller du terminal, qui ignore totalement l'application console que vous utilisez. Elle fait son travail en copiant-collant les caractères affichés à l'écran, et copiera donc les espaces blancs.

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X