스마트 따옴표 자동 제거


19

특히 Google 문서와 같은 텍스트를 복사 할 때 Emacs가 자동 큰 따옴표, 스마트 작은 따옴표 및 모든 방식의 em-dash 및 en-dash 문자를 자동으로 제거하여 ASCII 문자로 대체하도록하고 싶습니다.

자동으로 Emacs를 구성하는 방법이 있습니까? 또는 버퍼 또는 영역에서 호출 할 수있는 함수는 무엇입니까?


1
나는이 아이디어를 좋아한다. 과거에는 (occur "[^[:ascii:]]")수동 정리를 위해 버퍼에서 ASCII가 아닌 문자를 찾는 데 사용 했지만 일반적인 문자를 자동으로 바꾸는 것이 좋습니다.
glucas

모든 '스마트 한'문자와 그에 해당하는 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)에 대해 각각 많은 기호가 있으며 때로는 모두 나타납니다. 유니 코드가 커짐에 따라 철저한 목록이 시간이 지남에 따라 철저하게 유지되는지 확실하지 않습니다.
Peteris

1
@Peteris는 목록이 최신 상태로 유지되었다고 가정합니다 (목록과 참조가 필요할 것입니다). 나의 선택은 전적으로 Lee H가 언급 한 것들에 근거했다. 나는이 경우 철저한 목록을 제공하려고하지 않았습니다. 단순히 검색 된 다른 사람에 맞게 사용자 정의 할 수있는 출발점입니다.
Jonathan Leech-Pepin

목록에 정의 된 문자를 모두 바꾼 후에 highlight-regexp는 지역에 남아있는 비 ASCII 문자를 강조 표시하기 위해 전화 를 걸 수 있습니다.
glucas

8

@Jonathan이 게시 한 내용에 추가하려면 다음을 수행하여 자동으로 만들 수 있습니다.

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