summaryrefslogtreecommitdiff
path: root/emacs
diff options
context:
space:
mode:
authorThomas Ulmer <thomasmulmer02@gmail.com>2026-01-21 13:28:55 -0800
committerThomas Ulmer <thomasmulmer02@gmail.com>2026-01-22 08:30:04 -0800
commit749d87bec0aa8595c232865000a04c9434105d90 (patch)
tree9863af92d14cddb5ce7a502b447f9632ca461818 /emacs
parent70465c299fdcc97fd2e855f34b850bcf67e81fb1 (diff)
emacs ex outside of viper + shell command at root
Diffstat (limited to 'emacs')
-rw-r--r--emacs/init.el32
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)