การลบเครื่องหมายคำพูดอัจฉริยะโดยอัตโนมัติ


19

โดยเฉพาะอย่างยิ่งเมื่อคัดลอกข้อความจากสิ่งต่าง ๆ เช่น Google เอกสารฉันต้องการให้ Emacs ลบเครื่องหมายอัญประกาศคู่อัจฉริยะโดยอัตโนมัติ, เครื่องหมายอัญประกาศเดี่ยวเดี่ยวและอักขระ em-dash และ en-dash ทั้งหมดแทนที่พวกเขาด้วยการเทียบ ASCII ของพวกเขา

มีวิธีการกำหนดค่า Emacs ให้ทำสิ่งนี้โดยอัตโนมัติหรือไม่? หรือถอดที่ฟังก์ชันที่ฉันสามารถเรียกที่จะทำในบัฟเฟอร์หรือภูมิภาค?


1
ฉันชอบความคิดนี้ ในอดีตที่ผ่านมาฉันเคย(occur "[^[:ascii:]]")พบตัวละครที่ไม่ใช่ ASCII ในบัฟเฟอร์สำหรับการล้างข้อมูลด้วยตนเอง แต่การแทนที่อักขระทั่วไปโดยอัตโนมัติจะดีมาก
ลูกัส

มีที่ไหนบ้างที่อาจแสดงรายการตัวละคร 'อัจฉริยะ' ทั้งหมดและรายการเทียบเท่าของพวกเขา?
Jonathan Leech-Pepin

คำตอบ:


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) และพวกมันก็ปรากฏขึ้นเป็นครั้งคราว ฉันไม่แน่ใจด้วยซ้ำว่ารายการที่ละเอียดถี่ถ้วนจะยังคงมีอยู่ตลอดเวลาเมื่อ Unicode เติบโตขึ้น
Peteris

1
@Peteris สมมติว่ารายการนั้นถูกเก็บไว้เป็นปัจจุบัน (จะต้องมีรายการ / ข้อมูลอ้างอิง) มันจะทำงานได้ในระยะยาว การเลือกของฉันขึ้นอยู่กับผู้ที่กล่าวถึง Lee H ฉันไม่ได้พยายามจัดทำรายการครบถ้วนสมบูรณ์ในกรณีนี้เป็นเพียงจุดเริ่มต้นที่สามารถปรับแต่งให้เหมาะสมกับคนอื่น ๆ ที่ดึงมาได้
Jonathan Leech-Pepin

หลังจากแทนที่อักขระใด ๆ ที่กำหนดไว้ใน alist คุณสามารถโทรhighlight-regexpเพื่อเน้นอักขระที่ไม่ใช่ ASCII ที่เหลืออยู่ในภูมิภาค
ลูกัส

8

หากต้องการเพิ่มสิ่งที่ @Jonathan โพสต์คุณสามารถสร้างอัตโนมัติ (เพื่อให้ yanking ไม่ได้เพิ่มตัวอักษรเหล่านั้นในตอนแรก) โดยทำสิ่งนี้:

(advice-add 'yank :after (lambda (&optional ignore)
                           (replace-smart-to-ascii (mark) (point)))
            '(name replace-smart))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.