Удаление умных цитат автоматически


19

Особенно при копировании текста из таких документов, как Google, я бы хотел, чтобы Emacs автоматически удалял умные двойные кавычки, умные одиночные кавычки и всевозможные символы em-dash и en-dash, заменяя их их эквивалентами ascii.

Есть ли способ настроить Emacs, чтобы сделать это автоматически? Или, если не считать этого, функцию, которую я могу вызвать, которая будет делать это в буфере или области?


1
Мне нравится эта идея. Раньше я использовал (occur "[^[:ascii:]]")для поиска не-ascii символов в буфере для ручной очистки, но было бы неплохо автоматически заменить обычные.
glucas

Есть ли где-нибудь, что может перечислить все «умные» персонажи и их эквиваленты ascii?
Джонатан Лич-Пепин

Ответы:


16

На основе SU: Как удалить умные цитаты в копии Вставить

Вы можете попробовать что-то вроде следующего:

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

Использование его в качестве defcustom для добавления / настройки символов в соответствии с желаемым.


Это не будет полным решением, в Юникоде есть много символов, каждый для различных типов кавычек и черточко-подобных символов (например, неразрывный дефис \ u2011), и они все время от времени появляются. Я даже не уверен, что исчерпывающий список останется исчерпывающим со временем по мере роста юникода.
Петерис

1
@Peteris при условии, что список был актуален (потребуется список / ссылка на него), он будет работать в долгосрочной перспективе. Мой выбор был полностью основан на тех, что упоминал Ли Х. В этом случае я не пытался предоставить исчерпывающий список, просто отправную точку, которую можно настроить так, чтобы она подходила для любых других извлекаемых данных.
Джонатан Лич-Пепин

После замены любых символов, определенных в alist, вы можете вызвать, highlight-regexpчтобы выделить все оставшиеся не-ASCII символы в регионе.
glucas

8

Чтобы добавить к тому, что написал @Jonathan, вы можете сделать это автоматически (так, чтобы янки даже не добавляли эти символы в первую очередь), выполнив это:

(advice-add 'yank :after (lambda (&optional ignore)
                           (replace-smart-to-ascii (mark) (point)))
            '(name replace-smart))
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.