summary refs log tree commit diff stats
path: root/lisp/+key.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/+key.el')
-rw-r--r--lisp/+key.el106
1 files changed, 0 insertions, 106 deletions
diff --git a/lisp/+key.el b/lisp/+key.el deleted file mode 100644 index a217dad..0000000 --- a/lisp/+key.el +++ /dev/null
@@ -1,106 +0,0 @@
1;;; +key.el --- minor mode for keymaps -*- lexical-binding: t; -*-
2
3;;; Commentary:
4
5;; Much of the code here was cribbed from https://emacs.stackexchange.com/a/358,
6;; which in turn was cribbed in part from
7;; https://github.com/kaushalmodi/.emacs.d/blob/master/elisp/modi-mode.el,
8;; https://github.com/jwiegley/use-package/blob/master/bind-key.el and
9;; elsewhere.
10
11;; The basic idea is to have a minor-mode for my personal key customizations,
12;; especially a "leader key" set up à la vim. In Emacs, I use `C-z' for this
13;; leader key, because of its easy location and relative uselessness by default.
14
15;;; Code:
16
17(require 'easy-mmode)
18(require 'setup nil t)
19
20;; I need to define this map before the proper mode map.
21(defvar +key-leader-map (let ((map (make-sparse-keymap))
22 (c-z (global-key-binding "\C-z")))
23 ;;(define-key map "\C-z" c-z)
24 map)
25 "A leader keymap under the \"C-z\" bind.")
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
34(defvar +key-mode-map (let ((map (make-sparse-keymap)))
35 (define-key map "\C-z" +key-leader-map)
36 (define-key map (kbd "<menu>") +key-menu-map)
37 map)
38 "Keymap for `+key-mode'.")
39
40(defun turn-off-+key-mode ()
41 "Turn off `+key-mode'."
42 (+key-mode -1))
43
44;;;###autoload
45(define-minor-mode +key-mode
46 "A minor mode with keybindings that will override every other mode."
47 :init-value t
48 :lighter " +"
49 (if +key-mode
50 (progn ; Enable
51 (add-to-list 'emulation-mode-map-alists
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)))
68
69;;;###autoload
70(defun +key-setup ()
71 "Ensure `+key-mode' happens after init."
72 (if after-init-time
73 (+key-global-mode)
74 (add-hook 'after-init-hook #'+key-global-mode)))
75
76;;;###autoload
77(define-globalized-minor-mode +key-global-mode +key-mode +key-mode)
78
79;; Extras for `setup'
80(with-eval-after-load 'setup
81 (setup-define :+key
82 (lambda (key command)
83 `(define-key +key-mode-map ,key ,command))
84 :documentation "Bind KEY to COMMAND in `+key-mode-map'."
85 :debug '(form sexp)
86 :ensure '(kbd nil)
87 :repeatable t)
88
89 (setup-define :+leader
90 (lambda (key command)
91 `(define-key +key-leader-map ,key ,command))
92 :documentation "Bind KEY to COMMAND in `+key-leader-map'."
93 :debug '(form sexp)
94 :ensure '(kbd nil)
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 nil)
103 :repeatable t))
104
105(provide '+key)
106;;; +key.el ends here