diff options
Diffstat (limited to 'init.el')
| -rw-r--r-- | init.el | 67 |
1 files changed, 36 insertions, 31 deletions
@@ -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) |
