summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Ulmer <thomasmulmer02@gmail.com>2025-12-20 11:37:54 -0800
committerThomas Ulmer <thomasmulmer02@gmail.com>2025-12-20 11:37:54 -0800
commit9199a4c1eb8c77c76d2ed98c0fa88fcae2b0cc4f (patch)
tree8ccfe173554ba4671db9d1af39c121204c06f810
parent9dfc3885317fd4e46a05ca60d5b46a9b57f202b8 (diff)
emacs: terminal key shadowing fix
-rw-r--r--bashrc16
-rw-r--r--emacs/init.el121
-rw-r--r--emacs/site-lisp/my-exwm.el7
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"))