Akıllı teklifleri otomatik olarak kaldırma


19

Özellikle Google dokümanları gibi şeylerden metin kopyalarken, Emacs'ın akıllı çift tırnakları, akıllı tek tırnakları ve her türlü em-dash ve en-dash karakterlerini otomatik olarak kaldırmasını ve bunları ascii eşdeğerleriyle değiştirmesini istiyorum.

Emacs'ı bunu otomatik olarak yapacak şekilde yapılandırmanın bir yolu var mı? Ya da, bunu engelleyerek, arabellekte veya bölgede yapacak bir işlev diyebilirim?


1
Bu fikri seviyorum. Geçmişte (occur "[^[:ascii:]]"), manuel temizleme için bir arabellekte ascii olmayan karakterler bulmaya alırdım, ancak ortak olanları otomatik olarak değiştirmek harika olurdu.
glucas

Tüm 'akıllı' karakterleri ve ascii eşdeğerlerini listeleyebilecek herhangi bir yer var mı?
Jonathan Leech-Pepin

Yanıtlar:


16

SU tabanlı : Kopyalamadaki akıllı tırnaklar nasıl kaldırılır

Aşağıdaki gibi bir şey deneyebilirsiniz:

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

İstediğiniz karakterlerle eşleşecek karakterlerin eklenmesine / ayarlanmasına izin vermek için bir defcustom olarak kullanmak.


Bu tam bir çözüm olmayacak, unicode'un her biri çeşitli tırnak işaretleri ve tire benzeri karakterler için birçok sembol var (örneğin, kesilmeyen tire \ u2011) ve hepsi zaman zaman ortaya çıkıyor. Unicode büyüdükçe, kapsamlı bir listenin zaman içinde ayrıntılı olup olmayacağından bile emin değilim.
Peteris

1
@Peteris listenin güncel tutulduğu varsayılırsa (böyle bir listeye / referansa ihtiyaç duyar) uzun vadede işe yarayacaktır. Seçimim tamamen Lee H'nin bahsettiklerine dayanıyordu. Bu durumda kapsamlı bir liste sağlamaya çalışmıyordum, sadece alınan diğerlerine uyacak şekilde özelleştirilebilen bir başlangıç ​​noktası.
Jonathan Leech-Pepin

Listede tanımlanan karakterleri değiştirdikten sonra highlight-regexp, bölgedeki kalan ASCII olmayan karakterleri vurgulamak için çağrı yapabilirsiniz .
glucas

8

@Jonathan'ın yayınladığı şeye eklemek için, bunu yaparak otomatik olarak yapabilirsiniz (böylece yanking ilk olarak bu karakterleri bile eklemez):

(advice-add 'yank :after (lambda (&optional ignore)
                           (replace-smart-to-ascii (mark) (point)))
            '(name replace-smart))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.