about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorCase Duckworth2022-01-02 01:15:02 -0600
committerCase Duckworth2022-01-02 01:15:02 -0600
commitf33ffe13705f404b26246ff6edb5fa36200b4d47 (patch)
tree4a5afe3fbfc1f06a061fe6a26669921ff33e9945
parentAdd org-visibility (diff)
downloademacs-f33ffe13705f404b26246ff6edb5fa36200b4d47.tar.gz
emacs-f33ffe13705f404b26246ff6edb5fa36200b4d47.zip
Update +key to use menu as a prefix key too
I should probably choose one or the other to use.... or something.

h/t to https://old.reddit.com/r/emacs/comments/rr330u/weekly_tips_tricks_c_thread/hqwbz6p/?context=3
-rw-r--r--lisp/+key.el61
1 files changed, 47 insertions, 14 deletions
diff --git a/lisp/+key.el b/lisp/+key.el index 7a51be1..4638e95 100644 --- a/lisp/+key.el +++ b/lisp/+key.el
@@ -24,32 +24,57 @@
24 map) 24 map)
25 "A leader keymap under the \"C-z\" bind.") 25 "A leader keymap under the \"C-z\" bind.")
26 26
27;; http://xahlee.info/emacs/emacs/emacs_menu_app_keys.html and
28(defvar +key-menu-map (let ((map (make-sparse-keymap)))
29 (define-key map (kbd "<menu>")
30 #'execute-extended-command)
31 map)
32 "Custom bindings behind the menu key.")
33
27(defvar +key-mode-map (let ((map (make-sparse-keymap))) 34(defvar +key-mode-map (let ((map (make-sparse-keymap)))
28 (define-key map "\C-z" +key-leader-map) 35 (define-key map "\C-z" +key-leader-map)
29 map) 36 (define-key map (kbd "<menu>") +key-menu-map)
37 map)
30 "Keymap for `+key-mode'.") 38 "Keymap for `+key-mode'.")
31 39
40(defun turn-off-+key-mode ()
41 "Turn off `+key-mode'."
42 (+key-mode -1))
43
32;;;###autoload 44;;;###autoload
33(define-minor-mode +key-mode 45(define-minor-mode +key-mode
34 "A minor mode with keybindings that will override every other mode." 46 "A minor mode with keybindings that will override every other mode."
35 :init-value t 47 :init-value t
36 :lighter " +") 48 :lighter " +"
37(add-to-list 'emulation-mode-map-alists `((+key-mode . ,+key-mode-map))) 49 (if +key-mode
38 50 (progn ; Enable
39;;;###autoload 51 (add-to-list 'emulation-mode-map-alists
40(define-globalized-minor-mode +key-global-mode +key-mode +key-mode) 52 `((+key-mode . ,+key-mode-map)))
53 ;; Disable in minibuffer
54 (add-hook 'minibuffer-setup-hook #'turn-off-+key-mode)
55 ;; compat Linux-Windows
56 (define-key key-translation-map (kbd "<apps>") (kbd "<menu>"))
57 ;; curse you, thinkpad keyboard!!!
58 (define-key key-translation-map (kbd "<print>") (kbd "<menu>"))
59 )
60 ;; Disable
61 (setq emulation-mode-map-alists
62 (assoc-delete-all '+key-mode emulation-mode-map-alists
63 (lambda (a b)
64 (equal (car a) b))))
65 (remove-hook 'minibuffer-setup-hook #'turn-off-+key-mode)
66 (define-key key-translation-map (kbd "<print>") nil)
67 (define-key key-translation-map (kbd "<apps>") nil)))
41 68
42;;;###autoload 69;;;###autoload
43(defun +key-setup () 70(defun +key-setup ()
44 "Setup `+key-mode' after everything else." 71 "Ensure `+key-mode' happens after init."
45 (if after-init-time 72 (if after-init-time
46 (+key-global-mode +1) 73 (+key-global-mode)
47 (add-hook 'after-init-hook '+key-global-mode))) 74 (add-hook 'after-init-hook #'+key-global-mode)))
48 75
49(defun turn-off-+key-mode () 76;;;###autoload
50 "Turn off `+key-mode'." 77(define-globalized-minor-mode +key-global-mode +key-mode +key-mode)
51 (+key-mode -1))
52(add-hook 'minibuffer-setup-hook 'turn-off-+key-mode)
53 78
54;; Extras for `setup' 79;; Extras for `setup'
55(with-eval-after-load 'setup 80(with-eval-after-load 'setup
@@ -67,6 +92,14 @@
67 :documentation "Bind KEY to COMMAND in `+key-leader-map'." 92 :documentation "Bind KEY to COMMAND in `+key-leader-map'."
68 :debug '(form sexp) 93 :debug '(form sexp)
69 :ensure '(kbd func) 94 :ensure '(kbd func)
95 :repeatable t)
96
97 (setup-define :+menu
98 (lambda (key command)
99 `(define-key +key-menu-map ,key ,command))
100 :documentation "Bind KEY to COMMAND in `+key-leader-map'."
101 :debug '(form sexp)
102 :ensure '(kbd func)
70 :repeatable t)) 103 :repeatable t))
71 104
72(provide '+key) 105(provide '+key)