Re: [PATCH] restore window configuration after org-edit-src-exit
By the way -- I just got my copyright papers officially updated for my current job -- so we don't need to worry about line counts and whatnot anymore :) Best, John "Jack" Kamm
Re: [PATCH] restore window configuration after org-edit-src-exit
Hello, Nicolas Goaziou writes: > Thank you for the patch! Some comments follow. > > It would be useful to also explain what happens when the value is > `reorganize-frame', `split-window-right', or `split-window-right', e.g., > that previous window configuration is restored. > > It may be useful to wrap `set-window-configuration' within > `unwind-protect' so we can still reset the > `org-src--saved-temp-window-config' variable even though something went > wrong. > > WDYT? Thank you for reviewing my patch, I agree with both of your suggestions, and have added them to the attached patch, which I also rebased on latest master. I am wondering whether this should be considered a new feature, or instead fixing a regression, in which case I could rebase on maint instead. Finally, I think we should consider moving to the display-buffer framework (https://www.gnu.org/software/emacs/manual/html_node/elisp/Choosing-Window.html#Choosing-Window), as this will provide a lot more flexibility, and simplify the code as well. We could also use `quit-restore-window' (https://www.gnu.org/software/emacs/manual/html_node/elisp/Quitting-Windows.html) to restore the window configuration after editing. I'll start a new thread/RFC/patch for this later this month, when I have a bit more time. >From 8d1cf7500d69823bc4869248bbe251758d3dcdda Mon Sep 17 00:00:00 2001 From: Jack Kamm Date: Mon, 23 Dec 2019 08:55:55 -0800 Subject: [PATCH] org-src: restore windows for some values of org-src-window-setup --- etc/ORG-NEWS| 5 + lisp/org-src.el | 22 +- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 0f836d946..67c3ca2ed 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~ == bound to ~org-columns-toggle-or-columns-quit~ replaces the diff --git a/lisp/org-src.el b/lisp/org-src.el index 7876deaba..878821b14 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-frameUse `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) -- 2.24.1
Re: [PATCH] restore window configuration after org-edit-src-exit
Hi, sorry I missed this thread in the peri-holiday rush, just want to say thank you all for ironing out the difficulties arsing from that change earlier. On Tue, Jan 7, 2020 at 4:06 AM Nicolas Goaziou wrote: > Hello, > > Jack Kamm writes: > > > Attached is a patch to restore the window configuration after exiting an > > org source buffer, when org-src-window-setup is one of reorganize-frame, > > split-window-below, or split-window-right. > > Thank you for the patch! Some comments follow. > > > @@ -156,8 +156,7 @@ 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-frameUse `switch-to-buffer-other-frame' to display edit > buffer. > > Also, when exiting the edit buffer, kill that > > frame." > > It would be useful to also explain what happens when the value is > `reorganize-frame', `split-window-right', or `split-window-right', e.g., > that previous window configuration is restored. > > > +(when org-src--saved-temp-window-config > > + (set-window-configuration org-src--saved-temp-window-config) > > + (setq org-src--saved-temp-window-config nil > > It may be useful to wrap `set-window-configuration' within > `unwind-protect' so we can still reset the > `org-src--saved-temp-window-config' variable even though something went > wrong. > > WDYT? > > Regards, > > -- > Nicolas Goaziou > >
Re: [PATCH] restore window configuration after org-edit-src-exit
Hello, Jack Kamm writes: > Attached is a patch to restore the window configuration after exiting an > org source buffer, when org-src-window-setup is one of reorganize-frame, > split-window-below, or split-window-right. Thank you for the patch! Some comments follow. > @@ -156,8 +156,7 @@ 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-frameUse `switch-to-buffer-other-frame' to display edit buffer. > Also, when exiting the edit buffer, kill that > frame." It would be useful to also explain what happens when the value is `reorganize-frame', `split-window-right', or `split-window-right', e.g., that previous window configuration is restored. > +(when org-src--saved-temp-window-config > + (set-window-configuration org-src--saved-temp-window-config) > + (setq org-src--saved-temp-window-config nil It may be useful to wrap `set-window-configuration' within `unwind-protect' so we can still reset the `org-src--saved-temp-window-config' variable even though something went wrong. WDYT? Regards, -- Nicolas Goaziou
[PATCH] restore window configuration after org-edit-src-exit
Attached is a patch to restore the window configuration after exiting an org source buffer, when org-src-window-setup is one of reorganize-frame, split-window-below, or split-window-right. References: https://lists.gnu.org/archive/html/emacs-orgmode/2019-12/msg00263.html https://lists.gnu.org/archive/html/emacs-orgmode/2018-11/msg00253.html >From 03a2b9433f1ad15ac21a49e7f0c6c5390e9e4375 Mon Sep 17 00:00:00 2001 From: Jack Kamm Date: Mon, 23 Dec 2019 08:55:55 -0800 Subject: [PATCH] org-src: restore windows for some values of org-src-window-setup --- etc/ORG-NEWS| 3 +++ lisp/org-src.el | 16 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 44dfd5459..8cb611aee 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -24,6 +24,9 @@ for all headlines. *** New option to group captured datetime entries by month A new `:tree-type month' option was added to org-capture-templates to group new datetime entries by month. +*** 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~ == bound to ~org-columns-toggle-or-columns-quit~ replaces the diff --git a/lisp/org-src.el b/lisp/org-src.el index 5e50a1b47..5a2f07d53 100644 --- a/lisp/org-src.el +++ b/lisp/org-src.el @@ -156,8 +156,7 @@ 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-frameUse `switch-to-buffer-other-frame' to display edit buffer. Also, when exiting the edit buffer, kill that frame." :group 'org-edit-structure @@ -276,6 +275,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 +471,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 +1188,10 @@ 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 + (set-window-configuration org-src--saved-temp-window-config) + (setq org-src--saved-temp-window-config nil (provide 'org-src) -- 2.24.1