Rimozione automatica delle virgolette intelligenti


19

Soprattutto quando si copia testo da cose come i documenti di Google, vorrei che Emacs rimuovesse automaticamente le virgolette doppie intelligenti, le virgolette singole intelligenti e tutti i tipi di caratteri em-dash e en-dash, sostituendoli con i loro equivalenti ASCII.

Esiste un modo per configurare Emacs per farlo automaticamente? O, a parte quello, una funzione che posso chiamare che lo farà sul buffer o sulla regione?


1
Mi piace questa idea. In passato ho (occur "[^[:ascii:]]")trovato caratteri non ascii in un buffer per la pulizia manuale, ma sostituire automaticamente quelli comuni sarebbe stato ottimo.
glucas,

C'è un posto che potrebbe elencare tutti i personaggi "intelligenti" e i loro equivalenti ASCII?
Jonathan Leech-Pepin,

Risposte:


16

Basato su SU: Come rimuovere le virgolette intelligenti in Copia Incolla

Puoi provare qualcosa di simile al seguente:

(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))

Usandolo come defcustom per consentire l'aggiunta / regolazione di caratteri per abbinare ciò che si desidera.


Questa non sarà davvero una soluzione completa, unicode ha molti simboli ciascuno per vari tipi di virgolette e trattini simili a trattini (ad esempio trattino non-break \ u2011) e tutti appaiono occasionalmente. Non sono nemmeno sicuro che un elenco esaustivo rimanga esaustivo nel tempo man mano che cresce l'unicode.
Peteris,

1
@Peteris supponendo che l'elenco fosse tenuto aggiornato (avrebbe bisogno di un elenco / riferimento di tale) funzionerebbe a lungo termine. La mia selezione si basava interamente su quelli citati da Lee H. In questo caso non stavo cercando di fornire un elenco esaustivo, semplicemente un punto di partenza che poteva essere personalizzato per adattarsi a qualsiasi altro oggetto recuperato.
Jonathan Leech-Pepin,

Dopo aver sostituito i caratteri definiti nell'elenco, è possibile chiamare highlight-regexpper evidenziare eventuali caratteri non ASCII rimanenti nella regione.
glucas,

8

Per aggiungere ciò che ha pubblicato @Jonathan, puoi renderlo automatico (in modo che lo yanking non aggiunga nemmeno quei caratteri in primo luogo) facendo questo:

(advice-add 'yank :after (lambda (&optional ignore)
                           (replace-smart-to-ascii (mark) (point)))
            '(name replace-smart))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.