Eliminar citas inteligentes automáticamente

19

Especialmente al copiar texto de cosas como documentos de Google, me gustaría que Emacs elimine automáticamente las comillas dobles inteligentes, las comillas simples inteligentes y todo tipo de caracteres de guión y guión, reemplazándolos con sus equivalentes ascii.

¿Hay alguna forma de configurar Emacs para hacer esto automáticamente? O, salvo eso, ¿una función que pueda llamar que lo haga en el búfer o región?

Lee H
fuente
1
Me gusta esta idea. En el pasado, solía (occur "[^[:ascii:]]")encontrar caracteres no ascii en un búfer para la limpieza manual, pero reemplazar automáticamente los comunes sería genial.
glucas
¿Hay algún lugar que pueda enumerar todos los caracteres 'inteligentes' y sus equivalentes ascii?
Jonathan Leech-Pepin

Respuestas:

16

Basado en SU: Cómo eliminar comillas inteligentes en copiar Pegar

Puedes probar algo como lo siguiente:

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

Usarlo como una costumbre para permitir agregar / ajustar caracteres para que coincidan con lo que se desea.

Jonathan Leech-Pepin
fuente
Eso no será realmente una solución completa, unicode tiene muchos símbolos para varios tipos de comillas y caracteres como guiones (por ejemplo, guiones sin interrupción \ u2011) y todos aparecen ocasionalmente. Ni siquiera estoy seguro de si una lista exhaustiva se mantendría exhaustiva con el tiempo a medida que crece Unicode.
Peteris
1
@Peteris supone que la lista se mantuvo actualizada (necesitaría una lista / referencia de la misma) que funcionaría a largo plazo. Mi selección se basó completamente en las que Lee H mencionó. No estaba tratando de proporcionar una lista exhaustiva en este caso, simplemente un punto de partida que podría personalizarse para adaptarse a cualquier otro que se recupere.
Jonathan Leech-Pepin
Después de reemplazar los caracteres definidos en la lista, puede llamar highlight-regexppara resaltar los caracteres restantes que no sean ASCII en la región.
glucas
8

Para agregar a lo que publicó @Jonathan, puede hacer que sea automático (para que ni siquiera agregue esos caracteres en primer lugar) haciendo esto:

(advice-add 'yank :after (lambda (&optional ignore)
                           (replace-smart-to-ascii (mark) (point)))
            '(name replace-smart))
Dibujó
fuente