Re: [PATCH] restore window configuration after org-edit-src-exit

2020-01-14 Thread Jack Kamm
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

2020-01-09 Thread Jack Kamm
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

2020-01-09 Thread Matt Price
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

2020-01-07 Thread Nicolas Goaziou
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

2019-12-23 Thread Jack Kamm
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