diff options
| author | Thomas Ulmer <thomasmulmer02@gmail.com> | 2025-12-20 11:37:54 -0800 |
|---|---|---|
| committer | Thomas Ulmer <thomasmulmer02@gmail.com> | 2025-12-20 11:37:54 -0800 |
| commit | 9199a4c1eb8c77c76d2ed98c0fa88fcae2b0cc4f (patch) | |
| tree | 8ccfe173554ba4671db9d1af39c121204c06f810 /emacs | |
| parent | 9dfc3885317fd4e46a05ca60d5b46a9b57f202b8 (diff) | |
emacs: terminal key shadowing fix
Diffstat (limited to 'emacs')
| -rw-r--r-- | emacs/init.el | 121 | ||||
| -rw-r--r-- | emacs/site-lisp/my-exwm.el | 7 |
2 files changed, 79 insertions, 49 deletions
diff --git a/emacs/init.el b/emacs/init.el index a39fbae..8c0abd4 100644 --- a/emacs/init.el +++ b/emacs/init.el @@ -182,6 +182,20 @@ given keymap or in the global keymap." '(0 1 2 3 4 5 6 7 8 9))) (my/c-x-n-to-m-n) +(defun my/keymap-keys (map) + "Return a list of all key sequences in a keymap MAP recursively." + (mapcan (lambda (c) + (let ((ks (car c)) + (km (cdr c)) + (acc nil)) + (map-keymap (lambda (key bind) + (let ((kss (vconcat ks (vector key)))) + (when (commandp bind) + (push kss acc)))) + km) + acc)) + (accessible-keymaps map))) + (defun my/eshell (&optional arg) "Create a new eshell or switch to an existing one. With ARG, make anew shell. If the current buffer is an eshell, switch @@ -225,6 +239,43 @@ current layout." (set-window-configuration right t t) (setq my/layout-pair (cons right left)))) +(progn ; my global keybinds + (define-minor-mode my/keys-mode + "Minor mode collecting global keybinds" + :global t + :keymap (make-sparse-keymap)) + + ;; The keymaps in `emulation-mode-map-alists' take precedence over + ;; `minor-mode-map-alist' + (add-to-list 'emulation-mode-map-alists + '((my/keys-mode . my/keys-keymap))) + + (setq delete-pair-blink-delay 0) + + (keymap-set my/keys-mode-map "C-x C-C" 'save-buffers-kill-terminal) + (keymap-set my/keys-mode-map "C-x C-c" 'my/close-or-kill) + (keymap-set my/keys-mode-map "C-x -" 'my/swap-other-window-buffer) + (keymap-set my/keys-mode-map "C-x w o" 'my/toggle-window-other-reachability) + (keymap-set my/keys-mode-map "M-w" 'copy-region-as-kill) ; make copying not flash cursor + (keymap-set my/keys-mode-map "M-(" 'my/wrap-region-paren) + (keymap-set my/keys-mode-map "M-z" 'my/zap-whitespace) + (keymap-set my/keys-mode-map "C-M-z" 'my/wrap-sexp) + (keymap-set my/keys-mode-map "M-o" 'other-window) + (keymap-set my/keys-mode-map "M-RET" 'my/eshell) + (keymap-set my/keys-mode-map "M-C" 'calc) + (keymap-set my/keys-mode-map "M-K" 'my/kill-buffer) + (keymap-set my/keys-mode-map "M-D" 'my/vc-on-root) + (keymap-set my/keys-mode-map "M-U" 'scroll-lock-mode) + (keymap-set my/keys-mode-map "M-Q" 'auto-fill-mode) + (keymap-set my/keys-mode-map "M-A" 'beginning-of-line-text) + (keymap-set my/keys-mode-map "M-R" 'my/layout-swap) + (keymap-set my/keys-mode-map "C-c R" 'raise-sexp) + (keymap-set my/keys-mode-map "C-c r" 'delete-pair) + (keymap-set my/keys-mode-map "M-S" 'surround-prefix) + (keymap-set my/keys-mode-map "M-\"" 'my/activate-mark) + + (my/keys-mode 1)) + (use-package server ; allow emacsclient :demand t :config @@ -464,6 +515,34 @@ current layout." ("C-l" . eshell/clear)) :hook (eshell-mode . eldoc-mode)) +(use-package eat ; terminal override to make eshell behave better + :demand t + :custom + (eat-enable-auto-line-mode t) + :config + (eat-eshell-mode) + (eat-eshell-visual-command-mode) + (let* ((desired-global-binds (my/keymap-keys my/keys-mode-map)) + (desired-prefixes (mapcar (lambda (ks) + (let ((k1 (elt ks 0)) + (meta-mask ?\M-\0)) + (if (numberp k1) + (if (equal ?\e k1) + (vector k1 (elt ks 1)) + (let ((k-no-m (logand k1 (lognot meta-mask))) + (k-has-m (not (zerop (logand k1 meta-mask))))) + (if k-has-m + (vector ?\e k-no-m) + (vector k1)))) + (vector k1)))) + desired-global-binds))) + (mapc (lambda (ks) + (add-to-list 'eat-semi-char-non-bound-keys ks) + (add-to-list 'eat-eshell-semi-char-non-bound-keys ks)) + desired-prefixes) + (eat-update-semi-char-mode-map) + (eat-eshell-update-semi-char-mode-map))) + (use-package shelldon :demand t :config @@ -484,12 +563,6 @@ current layout." ("M-&" . 'shelldon) ("M-*" . 'shelldon-loop)) -(use-package eat ; terminal override to make eshell behave better - :demand t - :config - (eat-eshell-mode) - (eat-eshell-visual-command-mode)) - (progn ; comint, doesn't play with use-package (require 'comint) (setq-default comint-scroll-to-bottom-on-input t) @@ -768,42 +841,6 @@ current layout." (advice-add 'ispell-mode :before 'debug) (setq-default text-mode-hook (cons 'ispell-minor-mode (remove 'ispell-mode text-mode-hook)))) -(progn ; my global keybinds - (define-minor-mode my/keys-mode - "Minor mode collecting global keybinds" - :global t - :keymap (make-sparse-keymap)) - - ;; The keymaps in `emulation-mode-map-alists' take precedence over - ;; `minor-mode-map-alist' - (add-to-list 'emulation-mode-map-alists - '((my/keys-mode . my/keys-keymap))) - - (setq delete-pair-blink-delay 0) - - (keymap-set my/keys-mode-map "C-x C-C" 'save-buffers-kill-terminal) - (keymap-set my/keys-mode-map "C-x C-c" 'my/close-or-kill) - (keymap-set my/keys-mode-map "C-x -" 'my/swap-other-window-buffer) - (keymap-set my/keys-mode-map "C-x w o" 'my/toggle-window-other-reachability) - (keymap-set my/keys-mode-map "M-w" 'copy-region-as-kill) ; make copying not flash cursor - (keymap-set my/keys-mode-map "M-(" 'my/wrap-region-paren) - (keymap-set my/keys-mode-map "M-z" 'my/zap-whitespace) - (keymap-set my/keys-mode-map "C-M-z" 'my/wrap-sexp) - (keymap-set my/keys-mode-map "M-o" 'other-window) - (keymap-set my/keys-mode-map "M-RET" 'my/eshell) - (keymap-set my/keys-mode-map "M-C" 'calc) - (keymap-set my/keys-mode-map "M-K" 'my/kill-buffer) - (keymap-set my/keys-mode-map "M-D" 'my/vc-on-root) - (keymap-set my/keys-mode-map "M-U" 'scroll-lock-mode) - (keymap-set my/keys-mode-map "M-Q" 'auto-fill-mode) - (keymap-set my/keys-mode-map "M-A" 'beginning-of-line-text) - (keymap-set my/keys-mode-map "M-R" 'my/layout-swap) - (keymap-set my/keys-mode-map "C-c R" 'raise-sexp) - (keymap-set my/keys-mode-map "C-c r" 'delete-pair) - (keymap-set my/keys-mode-map "M-S" 'surround-prefix) - (keymap-set my/keys-mode-map "M-\"" 'my/activate-mark) - - (my/keys-mode 1)) (use-package time :custom diff --git a/emacs/site-lisp/my-exwm.el b/emacs/site-lisp/my-exwm.el index 66e77df..be71f52 100644 --- a/emacs/site-lisp/my-exwm.el +++ b/emacs/site-lisp/my-exwm.el @@ -97,13 +97,6 @@ changes." (interactive) (start-process-shell-command "glide" nil "glide")) - (defun my/eshell (&optional arg) - (interactive "P") - (if (eq major-mode 'eshell-mode) - ;; switch back - (switch-to-prev-buffer) - (eshell arg))) - (defun my/brightnessdown () (interactive) (start-process "" nil "brightnessdown")) (defun my/brightnessup () (interactive) (start-process "" nil "brightnessup")) (defun my/mute () (interactive) (start-process "" nil "pactl" "set-sink-mute" "@DEFAULT_SINK@" "toggle")) |
