summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Kamm <jackkamm@gmail.com>2019-12-23 08:55:55 -0800
committerNicolas Goaziou <mail@nicolasgoaziou.fr>2020-01-16 16:09:42 +0100
commitd833920defadbfab48c21386621e0577c62afcc3 (patch)
tree4e195ffe812872a57ccfe2cd1a4489a74057776e
parentf93020d5e6d7594c335cc129ad02c21ac26ed58a (diff)
downloadorg-mode-d833920defadbfab48c21386621e0577c62afcc3.tar.gz
org-src: restore windows for some values of org-src-window-setup
-rw-r--r--etc/ORG-NEWS5
-rw-r--r--lisp/org-src.el22
2 files changed, 22 insertions, 5 deletions
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 0f836d9..67c3ca2 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -30,6 +30,11 @@ group new datetime entries by month.
Babel Java blocks recognize header argument =:cmdargs= and pass its
value in call to =java=.
+*** Refinement in window behavior on exiting Org source buffer
+
+After editing a source block, Org will restore the window layout when
+~org-src-window-setup~ is set to a value that modifies the layout.
+
** New functions
*** ~org-columns-toggle-or-columns-quit~
=<C-c C-c>= bound to ~org-columns-toggle-or-columns-quit~ replaces the
diff --git a/lisp/org-src.el b/lisp/org-src.el
index 7876dea..878821b 100644
--- a/lisp/org-src.el
+++ b/lisp/org-src.el
@@ -156,10 +156,12 @@ split-window-right Show edit buffer to the right of the current window,
keeping all other windows.
other-window Use `switch-to-buffer-other-window' to display edit buffer.
reorganize-frame Show only two windows on the current frame, the current
- window and the edit buffer. When exiting the edit buffer,
- return to one window.
+ window and the edit buffer.
other-frame Use `switch-to-buffer-other-frame' to display edit buffer.
- Also, when exiting the edit buffer, kill that frame."
+ Also, when exiting the edit buffer, kill that frame.
+
+Values that modify the window layout (reorganize-frame, split-window-below,
+split-window-right) will restore the layout after exiting the edit buffer."
:group 'org-edit-structure
:type '(choice
(const current-window)
@@ -276,6 +278,9 @@ issued in the language major mode buffer."
(defvar-local org-src--remote nil)
(put 'org-src--remote 'permanent-local t)
+(defvar-local org-src--saved-temp-window-config nil)
+(put 'org-src--saved-temp-window-config 'permanent-local t)
+
(defvar-local org-src--source-type nil
"Type of element being edited, as a symbol.")
(put 'org-src--source-type 'permanent-local t)
@@ -469,6 +474,10 @@ When REMOTE is non-nil, do not try to preserve point or mark when
moving from the edit area to the source.
Leave point in edit buffer."
+ (when (memq org-src-window-setup '(reorganize-frame
+ split-window-below
+ split-window-right))
+ (setq org-src--saved-temp-window-config (current-window-configuration)))
(let* ((area (org-src--contents-area datum))
(beg (copy-marker (nth 0 area)))
(end (copy-marker (nth 1 area) t))
@@ -1182,8 +1191,11 @@ Throw an error if there is no such buffer."
(write-back (org-src--goto-coordinates coordinates beg end))))
;; Clean up left-over markers and restore window configuration.
(set-marker beg nil)
- (set-marker end nil)))
-
+ (set-marker end nil)
+ (when org-src--saved-temp-window-config
+ (unwind-protect
+ (set-window-configuration org-src--saved-temp-window-config)
+ (setq org-src--saved-temp-window-config nil)))))
(provide 'org-src)