Intelligente Anführungszeichen automatisch entfernen

18

Insbesondere beim Kopieren von Text aus Dingen wie Google Docs möchte ich, dass Emacs automatisch intelligente doppelte Anführungszeichen, einfache Anführungszeichen und alle Arten von Em-Strich- und En-Strich-Zeichen entfernt und diese durch ihre ASCII-Entsprechungen ersetzt.

Gibt es eine Möglichkeit, Emacs so zu konfigurieren, dass dies automatisch erfolgt? Oder, abgesehen davon, eine Funktion, die ich aufrufen kann und die dies für den Puffer oder die Region erledigt?

Lee H
quelle
1
Ich mag diese Idee. In der Vergangenheit habe ich (occur "[^[:ascii:]]")nicht-ASCII-Zeichen in einem Puffer für die manuelle Bereinigung gefunden, aber das automatische Ersetzen der allgemeinen wäre großartig.
Glucas
Gibt es irgendwo eine Liste, in der alle "intelligenten" Charaktere und ihre Ascii-Entsprechungen aufgeführt sind?
Jonathan Leech-Pepin

Antworten:

15

Basierend auf SU: So entfernen Sie intelligente Anführungszeichen in copy Paste

Sie können Folgendes ausprobieren:

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

Verwendung als Standard, um das Hinzufügen / Anpassen von Zeichen entsprechend den Anforderungen zu ermöglichen.

Jonathan Leech-Pepin
quelle
Das ist keine vollständige Lösung, denn Unicode enthält viele Symbole für verschiedene Arten von Anführungszeichen und strichartigen Zeichen (z. B. nicht unterbrechender Bindestrich \ u2011), die alle gelegentlich angezeigt werden. Ich bin mir nicht einmal sicher, ob eine vollständige Liste im Laufe der Zeit erschöpfend bleiben würde, wenn der Unicode wächst.
Peteris
1
@Peteris unter der Annahme, dass die Liste auf dem neuesten Stand gehalten wird (würde eine Liste / Referenz von solchen benötigen), würde es auf lange Sicht funktionieren. Meine Auswahl basierte ausschließlich auf denen, die Lee H erwähnte. In diesem Fall habe ich nicht versucht, eine vollständige Liste zu erstellen, sondern lediglich einen Ausgangspunkt, der so angepasst werden kann, dass er auf alle anderen abgerufenen Elemente passt.
Jonathan Leech-Pepin
Nachdem Sie alle in der Alist definierten Zeichen ersetzt haben, können Sie highlight-regexpalle verbleibenden Nicht-ASCII-Zeichen in der Region markieren.
Glucas
8

Um das zu ergänzen, was @Jonathan gepostet hat, können Sie dies automatisch machen (so dass Yanking diese Zeichen überhaupt nicht hinzufügt), indem Sie dies tun:

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