summaryrefslogtreecommitdiff
path: root/.emacs.d
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2021-06-19 16:58:18 -0700
committerSean Whitton <spwhitton@spwhitton.name>2021-06-19 16:59:29 -0700
commit0bdc138205517192d9db3893a5c36403d9533c90 (patch)
treeaf2958738f65779f3367c60c1461b5b5bb190698 /.emacs.d
parent4ee6df6f50042a8fedfbb99354047e1d3fd2d3ba (diff)
downloaddotfiles-0bdc138205517192d9db3893a5c36403d9533c90.tar.gz
move side windows toggle to C-c s & improve how focus changing works
Diffstat (limited to '.emacs.d')
-rw-r--r--.emacs.d/init-spw.el23
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)))))