summaryrefslogtreecommitdiff
path: root/modules/system-commands.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-03 19:10:50 -0500
committerCraig Jennings <c@cjennings.net>2026-05-03 19:10:50 -0500
commitc2f355bf601fd9b7db0107c163c64432a7ae9a80 (patch)
tree9df8e899861bb0374d9a9157b7a37962b6f5d5e7 /modules/system-commands.el
parent875887fc3821869c7ca8f23777e79caa00b3999e (diff)
downloaddotemacs-c2f355bf601fd9b7db0107c163c64432a7ae9a80.tar.gz
dotemacs-c2f355bf601fd9b7db0107c163c64432a7ae9a80.zip
fix: keep C-; ! as system command prefix
The module was binding `cj/system-command-map` under `C-; !`, then a few lines later overwriting the same prefix with `cj/system-command-menu`. The second bind won, so every documented subkey, like `C-; ! r` for reboot and `C-; ! l` for lock, was unreachable. I kept the prefix map and folded the completing-read menu into it at `C-; ! !`. So `C-; !` still opens the prefix, the menu is one extra `!` away, and the single-letter shortcuts work again. I also added which-key labels for every documented subkey so the popup actually says what each one does. I added `tests/test-system-commands-keymap.el`. It asserts the prefix stays mounted and that every binding (`!`, `L`, `r`, `s`, `S`, `l`, `E`, `e`) resolves to the right command.
Diffstat (limited to 'modules/system-commands.el')
-rw-r--r--modules/system-commands.el34
1 files changed, 21 insertions, 13 deletions
diff --git a/modules/system-commands.el b/modules/system-commands.el
index fb8c0611..8b155746 100644
--- a/modules/system-commands.el
+++ b/modules/system-commands.el
@@ -104,17 +104,6 @@ If CONFIRM is non-nil, mark VAR to always require confirmation."
(run-at-time 1 nil #'kill-emacs)
(message "Restarting Emacs..."))
-(defvar-keymap cj/system-command-map
- :doc "Keymap for system commands."
- "L" #'cj/system-cmd-logout
- "r" #'cj/system-cmd-reboot
- "s" #'cj/system-cmd-shutdown
- "S" #'cj/system-cmd-suspend
- "l" #'cj/system-cmd-lock
- "E" #'cj/system-cmd-exit-emacs
- "e" #'cj/system-cmd-restart-emacs)
-(keymap-set cj/custom-keymap "!" cj/system-command-map)
-
(defun cj/system-command-menu ()
"Present system commands via \='completing-read\='."
(interactive)
@@ -129,10 +118,29 @@ If CONFIRM is non-nil, mark VAR to always require confirmation."
(when-let ((cmd (alist-get choice commands nil nil #'equal)))
(call-interactively cmd))))
-(keymap-set cj/custom-keymap "!" #'cj/system-command-menu)
+(defvar-keymap cj/system-command-map
+ :doc "Keymap for system commands."
+ "!" #'cj/system-command-menu
+ "L" #'cj/system-cmd-logout
+ "r" #'cj/system-cmd-reboot
+ "s" #'cj/system-cmd-shutdown
+ "S" #'cj/system-cmd-suspend
+ "l" #'cj/system-cmd-lock
+ "E" #'cj/system-cmd-exit-emacs
+ "e" #'cj/system-cmd-restart-emacs)
+(keymap-set cj/custom-keymap "!" cj/system-command-map)
(with-eval-after-load 'which-key
- (which-key-add-key-based-replacements "C-; !" "system commands"))
+ (which-key-add-key-based-replacements
+ "C-; !" "system commands"
+ "C-; ! !" "system command menu"
+ "C-; ! L" "logout"
+ "C-; ! E" "exit Emacs"
+ "C-; ! S" "suspend"
+ "C-; ! e" "restart Emacs"
+ "C-; ! l" "lock screen"
+ "C-; ! r" "reboot"
+ "C-; ! s" "shutdown"))
(provide 'system-commands)
;;; system-commands.el ends here