forked from AndreaCrotti/minimal-emacs-configuration
-
Notifications
You must be signed in to change notification settings - Fork 0
/
show-keys.el
79 lines (68 loc) · 3.25 KB
/
show-keys.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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
;;; show-keys.el --- Minor mode which displays the keys you've typed
;; Copyright (C) 2012 Craig Andera
;; Permission is hereby granted, free of charge, to any person
;; obtaining a copy of this software and associated documentation
;; files (the "Software"), to deal in the Software without
;; restriction, including without limitation the rights to use,
;; copy, modify, merge, publish, distribute, sublicense, and/or sell
;; copies of the Software, and to permit persons to whom the
;; Software is furnished to do so, subject to the following
;; conditions:
;; The above copyright notice and this permission notice shall be
;; included in all copies or substantial portions of the Software.
;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
;; OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
;; HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
;; WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
;; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
;; OTHER DEALINGS IN THE SOFTWARE.
;; Author: Craig Andera <candera@wangdera.com>
;; Commentary: Invoke this minor mode to continuously update the
;; *shown-keys* buffer with the keys you've typed. Ignores keys bound
;; to certain commands, like self-insert-command, since that would get
;; pretty noisy.
;;
;; Installation:
;; (add-to-path 'load-path "/path/to/show-keys.el")
;; (require 'show-keys)
;; TODO: Add support for customization
(defvar show-keys-limit 100) ; Currently unused. Intent is to trim
; displayed older keys after this many
; commands
(defvar show-keys-buffer nil)
(defvar show-keys-ignored-commands '(self-insert-command
delete-backward-char
paredit-backward-delete))
(define-minor-mode show-keys-mode
"Displays the keys you've typed recently in the *shown-keys* buffer."
:lighter " (sk)"
:global t
:group 'show-keys
(if show-keys-mode
(progn
(add-hook 'pre-command-hook 'show-keys-command-hook)
(setq show-keys-buffer (get-buffer-create "*shown-keys*"))
(let ((orig-window (selected-window)))
(view-buffer-other-window show-keys-buffer)
(select-window orig-window)))
(remove-hook 'pre-command-hook 'show-keys-command-hook)))
(defun show-keys-command-hook ()
"When show-keys-mode is enabled, fires after every command.
Updates the *shown-keys* buffer with the keys that were typed."
(unless (member this-command show-keys-ignored-commands)
(let ((deactivate-mark nil))
(with-current-buffer show-keys-buffer
(let ((buffer-read-only nil)
(orig-window (selected-window))
(show-buffer-window (get-buffer-window show-keys-buffer t)))
(when show-buffer-window
(select-window show-buffer-window t))
(goto-char (point-max))
(insert (format "%s (%s)\n"
(key-description (this-command-keys-vector))
this-command))
(when show-buffer-window
(select-window orig-window t)))))))
(provide 'show-keys)