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?


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.


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))
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.