summaryrefslogtreecommitdiffhomepage
path: root/init.el
diff options
context:
space:
mode:
Diffstat (limited to 'init.el')
-rw-r--r--init.el67
1 files changed, 36 insertions, 31 deletions
diff --git a/init.el b/init.el
index 71b9bbd..d24ec6f 100644
--- a/init.el
+++ b/init.el
@@ -978,20 +978,6 @@
(global-set-key (kbd "C-x _") #'delete-other-windows-vertically)
-;;;; first window
-(defvar jao-first-window--from nil)
-
-(defun jao-first-window ()
- "Go to previous windows in frame, remembering where we were."
- (interactive)
- (let ((cb (current-buffer)))
- (if (eq (get-buffer-window cb) (select-window (frame-first-window)))
- (when jao-first-window--from (pop-to-buffer jao-first-window--from))
- (setq jao-first-window--from cb))))
-
-(global-set-key (kbd "s-a") #'jao-first-window)
-(global-set-key (kbd "M-a") #'jao-first-window)
-
;;;; window navigation (custom)
(defun jao-nth-window (n)
(if (zerop n)
@@ -1022,7 +1008,36 @@
(global-set-key (format "\C-c%s" (1+ n)) (jao-nth-window n)))
'(0 1 2 3 4 5 6 7 8))
+;;;;; last window
+(defvar jao-previous-window nil)
+
+(defun jao-save-current-window (&rest _ignore)
+ (unless (active-minibuffer-window)
+ (setq jao-previous-window (get-buffer-window (current-buffer)))))
+
+(defun jao-switch-goto-previous-window ()
+ (interactive)
+ (let ((previous-window jao-previous-window))
+ (jao-save-current-window)
+ (if (window-live-p previous-window)
+ (select-window previous-window)
+ (other-window 1))))
+
+(advice-add 'other-window :before #'jao-save-current-window)
+
(global-set-key "\C-xp" 'jao-prev-window)
+(global-set-key (kbd "M-o") #'jao-switch-goto-previous-window)
+
+;;;;; first window
+(defun jao-first-window ()
+ (interactive)
+ (if (eq (selected-window) (frame-first-window))
+ (jao-switch-goto-previous-window)
+ (jao-save-current-window)
+ (select-window (frame-first-window))))
+
+(global-set-key (kbd "s-a") #'jao-first-window)
+(global-set-key (kbd "M-a") #'jao-first-window)
;;;; window navigation (switch-window)
(use-package switch-window
@@ -1053,25 +1068,15 @@
(interactive)
(jao-switch-window--then "Switch to buffer" 'consult-buffer))
- :bind (("M-o" . switch-window)
+ (advice-add 'switch-window :before #'jao-save-current-window)
+
+ :bind (("C-M-o" . switch-window)
+ ("C-x o" . switch-window)
("C-x 4 d" . jao-switch-window-then-dired)
("C-x 4 f" . jao-switch-window-then-find-file)
- ("C-x 4 b" . jao-switch-window-then-consult-buffer)))
-
-;;;; transposing windows
-(defun transpose-windows (arg)
- "Transpose the buffers shown in two windows."
- (interactive "p")
- (let ((selector (if (>= arg 0) 'next-window 'previous-window)))
- (while (/= arg 0)
- (let ((this-win (window-buffer))
- (next-win (window-buffer (funcall selector))))
- (set-window-buffer (selected-window) next-win)
- (set-window-buffer (funcall selector) this-win)
- (select-window (funcall selector)))
- (setq arg (if (> arg 0) (1- arg) (1+ arg))))))
-
-(define-key ctl-x-4-map (kbd "t") 'transpose-windows)
+ ("C-x 4 b" . jao-switch-window-then-consult-buffer)
+ ("C-x 4 t" . switch-window-then-swap-buffer)
+ ("C-x 4 T" . transpose-windows)))
;;;; winner mode
(winner-mode 1)