diff options
author | Sean Whitton <spwhitton@spwhitton.name> | 2021-06-19 16:58:18 -0700 |
---|---|---|
committer | Sean Whitton <spwhitton@spwhitton.name> | 2021-06-19 16:59:29 -0700 |
commit | 0bdc138205517192d9db3893a5c36403d9533c90 (patch) | |
tree | af2958738f65779f3367c60c1461b5b5bb190698 /.emacs.d/init-spw.el | |
parent | 4ee6df6f50042a8fedfbb99354047e1d3fd2d3ba (diff) | |
download | dotfiles-0bdc138205517192d9db3893a5c36403d9533c90.tar.gz |
move side windows toggle to C-c s & improve how focus changing works
Diffstat (limited to '.emacs.d/init-spw.el')
-rw-r--r-- | .emacs.d/init-spw.el | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/.emacs.d/init-spw.el b/.emacs.d/init-spw.el index 42576971..1e8bcbf8 100644 --- a/.emacs.d/init-spw.el +++ b/.emacs.d/init-spw.el @@ -570,8 +570,19 @@ I use by default)." (slot . 0) (side . bottom)))) -;; C-c s would be another option -(global-set-key [f9] #'window-toggle-side-windows) +(defun spw/window-toggle-side-windows () + "Like `window-toggle-side-windows', but if the selected window is +a side window, change focus to the most recently used non-side +window first." + (interactive) + (when (window-parameter nil 'window-side) + (select-window (spw/get-mru-window + (lambda (w) (window-parameter w 'window-side))) + 'mark-for-redisplay)) + (window-toggle-side-windows)) +;; F9 is another option but it is nice to reserve that for short-lived +;; keyboard macros +(global-set-key "\C-cs" #'spw/window-toggle-side-windows) (setq auth-source-save-behavior nil) @@ -1814,12 +1825,14 @@ Used in my `message-mode' yasnippets." (kill-buffer-and-window))) (global-set-key [remap kill-buffer-and-window] #'spw/kill-buffer-and-window) -(defun spw/get-mru-window () - "Like `get-mru-window' but also consider the minibuffer." +(defun spw/get-mru-window (&optional exclude) + "Like `get-mru-window' but also consider the minibuffer, and +don't consider windows satisfying the predicate EXCLUDE." (let (best-window best-time time) (dolist (window (window-list-1) best-window) (setq time (window-use-time window)) - (when (and (not (eq window (selected-window))) + (when (and (not (and exclude (funcall exclude window))) + (not (eq window (selected-window))) (or (not best-time) (> time best-time))) (setq best-time time) (setq best-window window))))) |