diff options
| author | Thomas Ulmer <thomasmulmer02@gmail.com> | 2026-01-21 13:28:55 -0800 |
|---|---|---|
| committer | Thomas Ulmer <thomasmulmer02@gmail.com> | 2026-01-22 08:30:04 -0800 |
| commit | 749d87bec0aa8595c232865000a04c9434105d90 (patch) | |
| tree | 9863af92d14cddb5ce7a502b447f9632ca461818 /emacs | |
| parent | 70465c299fdcc97fd2e855f34b850bcf67e81fb1 (diff) | |
emacs ex outside of viper + shell command at root
Diffstat (limited to 'emacs')
| -rw-r--r-- | emacs/init.el | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/emacs/init.el b/emacs/init.el index c3970fa..950a953 100644 --- a/emacs/init.el +++ b/emacs/init.el @@ -255,6 +255,18 @@ With ARG, open a Dired buffer instead." (dired dir) (vc-dir dir)))) +(defun my/shell-at-root () + "Execute an async shell commmand at the root of the current project." + (interactive) + (let ((prior-cwd default-directory) + (want-quit inhibit-quit)) + (setq inhibit-quit t) + (with-local-quit + (setq default-directory (project-root (project-current))) + (call-interactively 'async-shell-command)) + (setq default-directory prior-cwd + inhibit-quit want-quit))) + (defun my/kill-buffer (&optional arg) "Kill the current buffer. With ARG kill the window as well." (interactive "P") @@ -284,6 +296,18 @@ With ARG, don't save the current layout." (setq my/layout-pair (cons right left))) (t (message "Quick layout swap only works with same frame!"))))) +(defun my/display-lines-advice (func &rest r) + "Around advice that temporarily shows line numbers." + (let ((want-quit inhibit-quit)) + (setq inhibit-quit t) + (display-line-numbers-mode 1) + (force-window-update) + (with-local-quit + (call-interactively func)) + (display-line-numbers-mode -1) + (force-window-update) + (setq inhibit-quit want-quit))) + (progn ; my global keybinds (define-minor-mode my/keys-mode "Minor mode collecting global keybinds" @@ -306,12 +330,13 @@ With ARG, don't save the current layout." (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-J" '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 "M-W" 'switch-to-buffer) (keymap-set my/keys-mode-map "M-N" 'man) + (keymap-set my/keys-mode-map "M-*" 'my/shell-at-root) (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) @@ -457,7 +482,7 @@ With ARG, don't save the current layout." (use-package battery ; battery in modeline etc ) -(progn ; viper, anchient vi emulation +(progn ; viper, ancient vi emulation (setq-default viper-want-ctl-h-help t) (setq-default viper-inhibit-startup-message 't) (setq-default viper-expert-level 5) @@ -470,6 +495,9 @@ With ARG, don't save the current layout." (setq-default viper-buffer-search-char ?g) (setq viper-mode nil) (require 'viper) + (require 'viper-ex) + (define-key my/keys-mode-map (kbd "C-;") 'viper-ex) + (advice-add 'viper-ex :around 'my/display-lines-advice) (define-key viper-vi-global-user-map (kbd "C-y") 'yank) (define-key viper-vi-global-user-map (kbd "C-e") 'end-of-line) (define-key viper-vi-global-user-map (kbd "C-f") 'forward-char) |
