ivy 인터페이스를 이용한 ispell/aspell 기반의 영어 단어 완성
6032 단어 Emacs
이번은 그것을 helm이 아니라 ivy로 구현한 것이다. 영어 알파벳 3문자 이상을 입력하고
M-x ivy-ispell
하면 보완이 달린다. 적당한 키 바인드를 할당하는 것도 일흥일 것이다. 덧붙여서 바이너리는 ispell/aspell/hunspell의 어느 것을 준비해 둘 필요가 있다 (cf. ispell-program-name
).(require 'ispell)
(require 'ivy)
(require 'thingatpt)
(defvar ivy-ispell--word-at-point nil)
(defun ivy-ispell--case-function (input)
(let ((case-fold-search nil))
(cond ((string-match-p "\\`[A-Z]\\{2\\}" input) 'upcase)
((string-match-p "\\`[A-Z]\\{1\\}" input) 'capitalize)
(t 'identity))))
(defun ivy-ispell--compare-length (a b)
(< (length a) (length b)))
(defun ivy-ispell--make-candidate ()
(let ((input (downcase ivy-ispell--word-at-point))
(case-func (ivy-ispell--case-function
ivy-ispell--word-at-point)))
(when (string-match-p "\\`[a-z]+\\'" input)
(mapcar case-func
(sort (ispell-lookup-words (concat input "*")
ispell-complete-word-dict)
'ivy-ispell--compare-length)))))
(defun ivy-ispell ()
(interactive)
(setq ivy-ispell--word-at-point (thing-at-point 'word))
(if (not ivy-ispell--word-at-point)
(message "Nothing to complete.")
(let ((candidate (ivy-read "Completion: "
(funcall 'ivy-ispell--make-candidate)
:initial-input ivy-ispell--word-at-point))
(curpoint (point)))
(backward-word 1)
(delete-region (point) curpoint)
(insert candidate))))
동작 예
"nece"를 입력하고 ivy 인터페이스에서 좁히고 "necessarily"를 입력하는 모습.
Reference
이 문제에 관하여(ivy 인터페이스를 이용한 ispell/aspell 기반의 영어 단어 완성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ballforest/items/1eec572a9569b27802b2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)