diff options
| author | Jonas Bernoulli <jonas@bernoul.li> | 2015-08-09 18:29:00 +0200 |
|---|---|---|
| committer | Jonas Bernoulli <jonas@bernoul.li> | 2015-08-09 18:29:00 +0200 |
| commit | 553820da413d10bf33f935945167a5317766b01d (patch) | |
| tree | 98ae0c7bcf4de530fd7819fc48affd63dc0b9265 /lisp | |
| parent | dff3672b8e7e3bf706e98f21d5a1e4e29639a47d (diff) | |
separate window configuration code from regular display and bury
Add the new functions `magit-save-window-configuration'
and `magit-restore-window-configuration' and call them in
`magit-mode-display-buffer' and `magit-mode-bury-buffer' when
the variable `magit-restore-window-configuration' calls for it.
Previously all of this was done inside the latter two directly.
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/magit-mode.el | 52 |
1 files changed, 30 insertions, 22 deletions
diff --git a/lisp/magit-mode.el b/lisp/magit-mode.el index b227aea..c076211 100644 --- a/lisp/magit-mode.el +++ b/lisp/magit-mode.el @@ -429,11 +429,6 @@ before switching to BUFFER." (magit-refresh-buffer)) (user-error "Not inside a Git repository"))))) -(defvar magit-inhibit-save-previous-winconf nil) - -(defvar-local magit-previous-window-configuration nil) -(put 'magit-previous-window-configuration 'permanent-local t) - (defvar-local magit-previous-section nil) (put 'magit-previous-section 'permanent-local t) @@ -460,12 +455,7 @@ the function `magit-toplevel'." (let ((section (magit-current-section))) (with-current-buffer buffer (setq magit-previous-section section) - (if magit-inhibit-save-previous-winconf - (when (eq magit-inhibit-save-previous-winconf 'unset) - (setq magit-previous-window-configuration nil)) - (unless (get-buffer-window buffer (selected-frame)) - (setq magit-previous-window-configuration - (current-window-configuration)))))) + (magit-save-window-configuration))) (funcall (or switch-function (if (derived-mode-p 'magit-mode) 'switch-to-buffer @@ -516,17 +506,9 @@ configuration stored by `magit-mode-display-buffer' originates from the selected frame then restore it after burying/killing the buffer." (interactive "P") - (let ((winconf magit-previous-window-configuration) - (buffer (current-buffer)) - (frame (selected-frame))) - (quit-window kill-buffer (selected-window)) - (when winconf - (when (and magit-restore-window-configuration - (equal frame (window-configuration-frame winconf))) - (set-window-configuration winconf) - (when (buffer-live-p buffer) - (with-current-buffer buffer - (setq magit-previous-window-configuration nil))))))) + (if magit-restore-window-configuration + (magit-restore-window-configuration kill-buffer) + (quit-window kill-buffer))) (defun magit-rename-buffer (&optional newname) "Rename the current buffer, so that Magit won't reuse it. @@ -785,6 +767,32 @@ argument (the prefix) non-nil means save all with no questions." (equal (ignore-errors (magit-toplevel nil t)) topdir))) topdir)))) +;;; Restore Window Configuration + +(defvar magit-inhibit-save-previous-winconf nil) + +(defvar-local magit-previous-window-configuration nil) +(put 'magit-previous-window-configuration 'permanent-local t) + +(defun magit-save-window-configuration () + (if magit-inhibit-save-previous-winconf + (when (eq magit-inhibit-save-previous-winconf 'unset) + (setq magit-previous-window-configuration nil)) + (unless (get-buffer-window (current-buffer) (selected-frame)) + (setq magit-previous-window-configuration + (current-window-configuration))))) + +(defun magit-restore-window-configuration (&optional kill-buffer) + (let ((winconf magit-previous-window-configuration) + (buffer (current-buffer)) + (frame (selected-frame))) + (quit-window kill-buffer (selected-window)) + (when (and winconf (equal frame (window-configuration-frame winconf))) + (set-window-configuration winconf) + (when (buffer-live-p buffer) + (with-current-buffer buffer + (setq magit-previous-window-configuration nil)))))) + ;;; Buffer History (defun magit-go-backward () |
