Re: restore window configuration after org-edit-src-exit
Hi Edgar, ed...@openmail.cc writes: > Hello. I would like to request this to be pushed onto the =maint= > branch (7684b59c7) or make it the default, please. this has been applied in the master branch back in January, it will be part of Org 9.4. Best, -- Bastien
Re: restore window configuration after org-edit-src-exit
Hello. I would like to request this to be pushed onto the =maint= branch (7684b59c7) or make it the default, please. https://lists.gnu.org/archive/html/emacs-orgmode/2019-12/txtr_q1WmvVPH.txt which is related to (at least) commits 7d5e931f7 and d833920de from the =master= branch. I have also tested by using lisp/org-src.el from the current =master= (9bc0cc7fb) on the =maint= branch (7684b59c7), and it works for me. Thanks! - This free account was provided by VFEmail.net - report spam to ab...@vfemail.net ONLY AT VFEmail! - Use our Metadata Mitigator to keep your email out of the NSA's hands! $24.95 ONETIME Lifetime accounts with Privacy Features! 15GB disk! No bandwidth quotas! Commercial and Bulk Mail Options!
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
Re: restore window configuration after org-edit-src-exit
Jack Kamm writes: > However, the change here is very small, I just wrote a small patch and > it's 15 insertions (+), 4 deletions(-), including the entry in > ORG-NEWS. My understanding is that such small changes don't require > explicit copyright assignment. > > Is it OK for me to send the patch along, or should I hold off on this? It is OK.
Re: restore window configuration after org-edit-src-exit
> OK. Would you want to implement it? Yes, but I'm still in the process of updating my copyright papers for my current job. My job said they won't be able to sign the copyright disclaimer until the new year, so I expect this to be sorted out later in January some time. However, the change here is very small, I just wrote a small patch and it's 15 insertions (+), 4 deletions(-), including the entry in ORG-NEWS. My understanding is that such small changes don't require explicit copyright assignment. Is it OK for me to send the patch along, or should I hold off on this? --Jack
Re: restore window configuration after org-edit-src-exit
Hello, Jack Kamm writes: > I agree, this sounds like the correct behavior to me. OK. Would you want to implement it? Regards, -- Nicolas Goaziou
Re: restore window configuration after org-edit-src-exit
Hi, > I think any value that modifies the current layout ought to restore it: > - `split-window-below' > - `split-window-right' > - `reorganize-frame' > > OTOH, values that use the current layout should not restore it > afterwards: > - `current-window' > - `other-window' > - `other-frame' > > This should be mentioned in the docstring. > > WDYT? I agree, this sounds like the correct behavior to me.
Re: restore window configuration after org-edit-src-exit
Hello, Jack Kamm writes: > Rather than adding a new option, how about we make the behavior > dependent on the value of org-src-window-setup? > > Basically, when org-src-window-setup is current-window, it never makes > sense to restore the original layout. But when org-src-window-setup is > reorganize-frame (the default), it always makes sense to restore the > original layout. > > I'm not sure what the "correct" behavior would be for the other options > however. I think any value that modifies the current layout ought to restore it: - `split-window-below' - `split-window-right' - `reorganize-frame' OTOH, values that use the current layout should not restore it afterwards: - `current-window' - `other-window' - `other-frame' This should be mentioned in the docstring. WDYT? Regards, -- Nicolas Goaziou
Re: restore window configuration after org-edit-src-exit
On Tuesday, 17 Dec 2019 at 06:28, Jack Kamm wrote: > Basically, when org-src-window-setup is current-window, it never makes > sense to restore the original layout. But when org-src-window-setup is > reorganize-frame (the default), it always makes sense to restore the > original layout. This makes sense to me. While we're talking about org-src-window-setup, I set it to 'split-window-right on my large monitor. Sometimes, I make the src window full frame but then, when trying to go back to the org buffer (C-c '), I get the error: delete-window: Attempt to delete minibuffer or sole ordinary window This would be fixed if the original layout were restored instead of simply deleting the src window, I guess. -- Eric S Fraga via Emacs 27.0.50, Org release_9.3-34-g2eee3c
Re: restore window configuration after org-edit-src-exit
Sorry for the noise, but I just had another thought: Rather than adding a new option, how about we make the behavior dependent on the value of org-src-window-setup? Basically, when org-src-window-setup is current-window, it never makes sense to restore the original layout. But when org-src-window-setup is reorganize-frame (the default), it always makes sense to restore the original layout. I'm not sure what the "correct" behavior would be for the other options however. Now that I think about it, I remember trying out the "current-window" option before, and having a very similar experience to Matt -- while I enjoyed having more manual control over the window layout, the fact that org-mode would change the window layout after I finished editing defeated the whole purpose of this, so I switched back to the original defaults.
Re: restore window configuration after org-edit-src-exit
I'd like to add a vote for the old behavior. I only recently noticed the new behavior, and agree with Richard that it's inconvenient. I think many of us missed this change because it wasn't in 9.2. In particular, I'd propose to make the old behavior the default, and hide the new behavior behind an option like Matt originally proposed. I'm updating my copyright papers for my current job, if no one has submitted a patch by the time I've got that sorted, I could work on a patch then.
Re: restore window configuration after org-edit-src-exit
Nicolas Goaziou writes: > However, it doesn't mean the inconvenience shouldn't be fixed. I cannot > remember why 819e98afd018cad3c13fd58bfcbd979ab36dfbc7 was necessary. I'm > Cc'ing Matt Price. Here's the related thread: https://lists.gnu.org/archive/html/emacs-orgmode/2018-11/msg00253.html Summary: Matt had a case where he didn't want the window configuration to be restored, so he proposed hiding the behavior behind an option. You wondered whether we should just remove support for restoring the window configuration and not bother with the option. Nobody offered a defense for restoring the window configuration or complained... until now :]
Re: restore window configuration after org-edit-src-exit
Hello, Richard Kim writes: > About a year ago change 819e98afd018cad3c13fd58bfcbd979ab36dfbc7 was checked > in > to remove code that restored window configuration when =org-edit-src-exit= > finished. The net result is af if =C-x 1= is called to remove all windows > except > the org buffer just edited. This is very inconvenient. > > Why not call =winner-undo= to restore window configuration as shown > here? I'd rather not add another dependency just for this. However, it doesn't mean the inconvenience shouldn't be fixed. I cannot remember why 819e98afd018cad3c13fd58bfcbd979ab36dfbc7 was necessary. I'm Cc'ing Matt Price. Regards, -- Nicolas Goaziou
restore window configuration after org-edit-src-exit
About a year ago change 819e98afd018cad3c13fd58bfcbd979ab36dfbc7 was checked in to remove code that restored window configuration when =org-edit-src-exit= finished. The net result is af if =C-x 1= is called to remove all windows except the org buffer just edited. This is very inconvenient. Why not call =winner-undo= to restore window configuration as shown here? #+begin_src diff >From bd0a2abaa8097338d7f33c7ca9a1d45f5da67e7a Mon Sep 17 00:00:00 2001 From: kimr Date: Sat, 14 Dec 2019 10:59:00 -0800 Subject: [PATCH] restore window config by calling winner-undo --- lisp/org-src.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lisp/org-src.el b/lisp/org-src.el index 5e50a1b4..c8c30889 100644 --- a/lisp/org-src.el +++ b/lisp/org-src.el @@ -1182,7 +1182,8 @@ 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) +(winner-undo))) (provide 'org-src) -- 2.22.1 #+end_src For now I'm using the following advice do the same thing. #+begin_src elisp (defadvice org-edit-src-exit (after restore-window-config activate) (winner-undo)) #+end_src