From 9199a4c1eb8c77c76d2ed98c0fa88fcae2b0cc4f Mon Sep 17 00:00:00 2001 From: Thomas Ulmer Date: Sat, 20 Dec 2025 11:37:54 -0800 Subject: emacs: terminal key shadowing fix --- bashrc | 16 +++--- emacs/init.el | 121 +++++++++++++++++++++++++++++---------------- emacs/site-lisp/my-exwm.el | 7 --- 3 files changed, 88 insertions(+), 56 deletions(-) diff --git a/bashrc b/bashrc index df54154..81b3265 100644 --- a/bashrc +++ b/bashrc @@ -1,7 +1,7 @@ # If not running interactively, don't do anything case $- in *i*) ;; - *) return;; + *) return;; esac # don't put duplicate lines or lines starting with space in the history. @@ -46,13 +46,16 @@ unset color_prompt # If this is an xterm set the title to user@host:dir case "$TERM" in -xterm*|rxvt*|st*|alacritty*) - PS1="\[\e]0;\u@\h: \w\a\]$PS1" - ;; -*) - ;; + xterm*|rxvt*|st*|alacritty*) + PS1="\[\e]0;\u@\h: \w\a\]$PS1" + ;; + *) + ;; esac +[ -n "$EAT_SHELL_INTEGRATION_DIR" ] && \ + source "$EAT_SHELL_INTEGRATION_DIR/bash" + export ALTERNATE_EDITOR=emacs export EDITOR="emacsclient -c" export VISUAL="emacsclient -c" @@ -60,4 +63,3 @@ export VISUAL="emacsclient -c" if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases fi - 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")) -- cgit v1.2.3