diff options
Diffstat (limited to 'emacs/init.el')
| -rw-r--r-- | emacs/init.el | 121 |
1 files changed, 79 insertions, 42 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 |
