Supprimer automatiquement les devis intelligents

19

Surtout lors de la copie de texte à partir de choses comme Google docs, j'aimerais qu'Emacs supprime automatiquement les guillemets doubles intelligents, les guillemets simples intelligents et toutes sortes de caractères em-dash et en-dash, en les remplaçant par leurs équivalents ascii.

Existe-t-il un moyen de configurer Emacs pour le faire automatiquement? Ou, à part cela, une fonction que je peux appeler qui le fera sur le tampon ou la région?

Lee H
la source
1
J'aime cette idée. Dans le passé, j'ai utilisé (occur "[^[:ascii:]]")pour trouver des caractères non ascii dans un tampon pour le nettoyage manuel, mais remplacer automatiquement les caractères communs serait génial.
glucas
Y a-t-il quelque part qui pourrait énumérer tous les caractères «intelligents» et leurs équivalents ascii?
Jonathan Leech-Pepin

Réponses:

16

Basé sur SU: Comment supprimer les citations intelligentes dans le copier-coller

Vous pouvez essayer quelque chose comme ceci:

(defcustom smart-to-ascii '(("\x201C" . "\"")
                ("\x201D" . "\"")
                ("\x2018" . "'")
                            ("\x2019" . "'")
                            ;; en-dash
                            ("\x2013" . "-")
                            ;; em-dash
                            ("\x2014" . "-"))
  ""
  :type '(repeat (cons (string :tag "Smart Character  ")
                       (string :tag "Ascii Replacement"))))

(defun replace-smart-to-ascii (beg end)
  (interactive "r")
  (format-replace-strings smart-to-ascii
                          nil beg end))

En l'utilisant par défaut pour permettre l'ajout / l'ajustement de caractères pour correspondre à ce qui est souhaité.

Jonathan Leech-Pepin
la source
Ce ne sera pas vraiment une solution complète, unicode a de nombreux symboles chacun pour différents types de guillemets et de caractères de type tiret (par exemple, un trait d'union insécable \ u2011) et ils apparaissent tous de temps en temps. Je ne suis même pas sûr qu'une liste exhaustive resterait exhaustive au fil du temps à mesure que l'unicode se développerait.
Peteris
1
@Peteris en supposant que la liste soit maintenue à jour (il faudrait une liste / référence), cela fonctionnerait à long terme. Ma sélection était entièrement basée sur celles mentionnées par Lee H. Je n'essayais pas de fournir une liste exhaustive dans ce cas, simplement un point de départ qui pourrait être personnalisé pour s'adapter à tous ceux qui sont récupérés.
Jonathan Leech-Pepin
Après avoir remplacé les caractères définis dans la liste, vous pouvez appeler highlight-regexppour mettre en surbrillance tous les caractères non ASCII restants dans la région.
glucas
8

Pour ajouter à ce que @Jonathan a publié, vous pouvez rendre cela automatique (de sorte que Yanking n'ajoute même pas ces caractères en premier lieu) en procédant comme suit:

(advice-add 'yank :after (lambda (&optional ignore)
                           (replace-smart-to-ascii (mark) (point)))
            '(name replace-smart))
A dessiné
la source