Automatyczne usuwanie inteligentnych ofert

19

Zwłaszcza podczas kopiowania tekstu z dokumentów takich jak Google, chciałbym, aby Emacs automatycznie usuwał inteligentne podwójne cudzysłowy, inteligentne pojedyncze cudzysłowy oraz wszelkie znaki em-dash i en-dash, zastępując je odpowiednikami ascii.

Czy istnieje sposób na skonfigurowanie Emacsa, aby robił to automatycznie? A może poza tym, że mogę wywołać funkcję, która zrobi to w buforze lub regionie?

Lee H.
źródło
1
Podoba mi się ten pomysł. W przeszłości (occur "[^[:ascii:]]")znajdowałem w buforze znaki nie-ascii do ręcznego czyszczenia, ale automatyczne zastępowanie typowych byłoby świetne.
glucas,
Czy jest gdzieś, gdzie można wymienić wszystkie „inteligentne” postacie i ich ascii?
Jonathan Leech-Pepin

Odpowiedzi:

16

Na podstawie SU: Jak usunąć inteligentne cytaty w kopii Wklej

Możesz spróbować czegoś takiego:

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

Używanie go jako defcustom, aby umożliwić dodawanie / dostosowywanie znaków, aby dopasować to, co jest pożądane.

Jonathan Leech-Pepin
źródło
To naprawdę nie będzie pełne rozwiązanie, unicode ma wiele symboli dla każdego rodzaju cytatów i znaków przypominających myślniki (np. Niełamliwy łącznik) i wszystkie one pojawiają się od czasu do czasu. Nie jestem nawet pewien, czy wyczerpująca lista pozostanie wyczerpująca wraz z upływem czasu w miarę wzrostu Unicode.
Peteris,
1
@Peteris zakładając, że lista była aktualna (potrzebowałaby listy / odnośników takich), będzie działać na dłuższą metę. Mój wybór był całkowicie oparty na tych, o których wspominał Lee H. W tym przypadku nie próbowałem podać wyczerpującej listy, po prostu punkt wyjścia, który można dostosować, aby pasował do innych pobieranych plików.
Jonathan Leech-Pepin,
Po zamianie wszystkich znaków zdefiniowanych w liście, możesz wywołać, highlight-regexpaby podświetlić wszystkie pozostałe znaki spoza ASCII w regionie.
glucas
8

Aby dodać do tego, co opublikował @Jathanathan, możesz ustawić to automatycznie (aby szarpanie nawet nie dodawało tych znaków):

(advice-add 'yank :after (lambda (&optional ignore)
                           (replace-smart-to-ascii (mark) (point)))
            '(name replace-smart))
Rysował
źródło