From: Jack Kamm <jackkamm@gmail.com>
To: Nicolas Goaziou <mail@nicolasgoaziou.fr>
Cc: emacs-orgmode@gnu.org, Richard Kim <Richard.Kim1@synopsys.com>
Subject: Re: [PATCH] restore window configuration after org-edit-src-exit
Date: Thu, 09 Jan 2020 09:43:41 -0800 [thread overview]
Message-ID: <875zhkjzjm.fsf@gmail.com> (raw)
In-Reply-To: <8736crslbi.fsf@nicolasgoaziou.fr>
[-- Attachment #1: Type: text/plain, Size: 1317 bytes --]
Hello,
Nicolas Goaziou <mail@nicolasgoaziou.fr> 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.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-org-src-restore-windows-for-some-values-of-org-src-w.patch --]
[-- Type: text/x-patch, Size: 3395 bytes --]
From 8d1cf7500d69823bc4869248bbe251758d3dcdda Mon Sep 17 00:00:00 2001
From: Jack Kamm <jackkamm@gmail.com>
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~
=<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 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-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)
--
2.24.1
next prev parent reply other threads:[~2020-01-09 17:44 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-14 19:06 restore window configuration after org-edit-src-exit Richard Kim
2019-12-16 16:30 ` Nicolas Goaziou
2019-12-17 1:51 ` Kyle Meyer
2019-12-17 14:11 ` Jack Kamm
2019-12-17 14:28 ` Jack Kamm
2019-12-17 15:16 ` Fraga, Eric
2019-12-22 14:45 ` Nicolas Goaziou
2019-12-23 1:46 ` Jack Kamm
2019-12-23 8:17 ` Nicolas Goaziou
2019-12-23 17:15 ` Jack Kamm
2019-12-23 17:20 ` Nicolas Goaziou
2019-12-23 18:18 ` [PATCH] " Jack Kamm
2020-01-07 8:49 ` Nicolas Goaziou
2020-01-09 15:03 ` Matt Price
2020-01-09 17:43 ` Jack Kamm [this message]
2020-01-14 23:10 ` Jack Kamm
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=875zhkjzjm.fsf@gmail.com \
--to=jackkamm@gmail.com \
--cc=Richard.Kim1@synopsys.com \
--cc=emacs-orgmode@gnu.org \
--cc=mail@nicolasgoaziou.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).