/
scamx-exit.el
29 lines (25 loc) · 1.03 KB
/
scamx-exit.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
;; (setq meow-two-char-escape-sequence '("gn" "gp" "gf" "gb"))
(setq meow-two-char-escape-sequence "gg")
(setq meow-two-char-escape-delay 0.3)
(defun meow--two-char-exit-insert-state (s)
(when (meow-insert-mode-p)
(let ((modified (buffer-modified-p)))
(insert (elt s 0))
(let* ((second-char (elt s 1))
(event
(if defining-kbd-macro
(read-event nil nil)
(read-event nil nil meow-two-char-escape-delay))))
(when event
(if (and (characterp event) (= event second-char))
(progn
(backward-delete-char 1)
(set-buffer-modified-p modified)
(meow--execute-kbd-macro "<escape>"))
(push event unread-command-events)))))))
(defun meow-two-char-exit-insert-state ()
(interactive)
(meow--two-char-exit-insert-state meow-two-char-escape-sequence))
(define-key meow-insert-state-keymap (substring meow-two-char-escape-sequence 0 1)
#'meow-two-char-exit-insert-state)
(provide 'scamx-exit)