aboutsummaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorJonas Bernoulli <jonas@bernoul.li>2015-08-09 18:29:00 +0200
committerJonas Bernoulli <jonas@bernoul.li>2015-08-09 18:29:00 +0200
commit553820da413d10bf33f935945167a5317766b01d (patch)
tree98ae0c7bcf4de530fd7819fc48affd63dc0b9265 /lisp
parentdff3672b8e7e3bf706e98f21d5a1e4e29639a47d (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.el52
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 ()