summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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)))))