Skip to content

Commit 21feecc

Browse files
committed
Add "zg" and "zG" bindings
Implements evil-ispell-mark-word-as-good and evil-ispell-mark-word-as-locally-good
1 parent 070abb1 commit 21feecc

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

evil-commands.el

+33
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
(require 'evil-jumps)
3434
(require 'evil-vars)
3535
(require 'flyspell)
36+
(require 'ispell)
3637
(require 'cl-lib)
3738
(require 'reveal)
3839

@@ -636,6 +637,38 @@ and jump to the corresponding one."
636637
(when ov
637638
(goto-char (overlay-start ov))))))))
638639

640+
(defun evil-ispell-mark-word-as-good (word)
641+
"Add WORD under the cursor as a good word to the Ispell dictionary."
642+
(interactive (list (thing-at-point 'word)))
643+
;; accept and insert word into personal dictionary.
644+
(ispell-send-string (concat "*" word "\n"))
645+
;; dictionary modified!
646+
(setq ispell-pdict-modified-p '(t))
647+
(ispell-pdict-save ispell-silently-savep)
648+
(when (bound-and-true-p flyspell-mode)
649+
(let ((start (car (bounds-of-thing-at-point 'word))))
650+
(when start
651+
(flyspell-unhighlight-at start))))
652+
(message "Word '%s' added to personal dictionary" (upcase word)))
653+
654+
(defun evil-ispell-mark-word-as-locally-good (word &optional buffer-local)
655+
"Add WORD under the cursor to the session dictionary.
656+
If BUFFER-LOCAL is non-nil, the word will be added to current buffer."
657+
(interactive (list (thing-at-point 'word) current-prefix-arg))
658+
;; accept word without insertion
659+
(ispell-send-string (concat "@" word "\n"))
660+
(add-to-list 'ispell-buffer-session-localwords word)
661+
;; session localwords might conflict.
662+
(unless ispell-buffer-local-name
663+
(setq ispell-buffer-local-name (buffer-name)))
664+
(when buffer-local
665+
(ispell-add-per-file-word-list word))
666+
(when (bound-and-true-p flyspell-mode)
667+
(let ((start (car (bounds-of-thing-at-point 'word))))
668+
(when start
669+
(flyspell-unhighlight-at start))))
670+
(message "Word '%s' added to local dictionary" (upcase word)))
671+
639672
(evil-define-motion evil-next-flyspell-error (count)
640673
"Go to the COUNT'th spelling mistake after point."
641674
(interactive "p")

evil-maps.el

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
(define-key evil-normal-state-map "za" 'evil-toggle-fold)
8383
(define-key evil-normal-state-map "zr" 'evil-open-folds)
8484
(define-key evil-normal-state-map "zm" 'evil-close-folds)
85+
(define-key evil-normal-state-map "zg" 'evil-ispell-mark-word-as-good)
86+
(define-key evil-normal-state-map "zG" 'evil-ispell-mark-word-as-locally-good)
8587
(define-key evil-normal-state-map "z=" 'ispell-word)
8688
(define-key evil-normal-state-map "\C-n" 'evil-paste-pop-next)
8789
(define-key evil-normal-state-map "\C-p" 'evil-paste-pop)

0 commit comments

Comments
 (0)