Видалення розумних лапок автоматично


19

Особливо під час копіювання тексту з таких речей, як документи Google, я хотів би, щоб Emacs автоматично видаляв розумні подвійні лапки, розумні одиночні цитати та всілякі символи em-dash та en-dash, замінюючи їх на їх еквіваленти ascii.

Чи є спосіб налаштувати Emacs, щоб це зробити автоматично? Або, заборонивши це, функцію, яку я можу викликати, яка буде виконувати це в буфері або області?


1
Мені подобається ця ідея. У минулому я раніше (occur "[^[:ascii:]]")знаходив символи, що не відносяться до асоцій, у буфер для ручного очищення, але автоматично замінити звичайні було б чудово.
глюкас

Чи є десь перелік усіх «розумних» персонажів та їх еквівалентів 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))

Використовуючи його як дефолт, щоб додати / налаштувати символи відповідно до бажаного.


Це насправді не є повноцінним рішенням, у unicode є багато символів для різних типів цитат і тире-подібних символів (наприклад, беззбитковий дефіс \ u2011), і всі вони періодично з'являються. Я навіть не впевнений, чи вичерпний список залишатиметься вичерпним з часом, коли Unicode зростає.
Петріс

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

Після заміни будь-яких символів, визначених у списку, ви можете зателефонувати, highlight-regexpщоб виділити будь-які інші символи, що не належать до ASCII, у регіоні.
глюкас

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.