From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jack Kamm Subject: [PATCH] restore window configuration after org-edit-src-exit Date: Mon, 23 Dec 2019 10:18:33 -0800 Message-ID: <87woamc3d2.fsf@gmail.com> References: <87lfrc9qs6.fsf@nicolasgoaziou.fr> <87woavd8j4.fsf@kyleam.com> <87sgljf3e1.fsf@gmail.com> <87mubrf2mm.fsf@gmail.com> <87lfr45shp.fsf@nicolasgoaziou.fr> <87a77jddbb.fsf@gmail.com> <874kxr5ubv.fsf@nicolasgoaziou.fr> <8736dbc6a2.fsf@gmail.com> <87blrz3qn1.fsf@nicolasgoaziou.fr> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:470:142:3::10]:47986) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ijSIZ-0005cf-37 for emacs-orgmode@gnu.org; Mon, 23 Dec 2019 13:19:21 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ijSIX-0002bC-2p for emacs-orgmode@gnu.org; Mon, 23 Dec 2019 13:19:18 -0500 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]:55913) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ijSIV-0002ZL-Ua for emacs-orgmode@gnu.org; Mon, 23 Dec 2019 13:19:16 -0500 Received: by mail-pj1-x1033.google.com with SMTP id d5so96112pjz.5 for ; Mon, 23 Dec 2019 10:19:15 -0800 (PST) In-Reply-To: <87blrz3qn1.fsf@nicolasgoaziou.fr> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: Nicolas Goaziou Cc: emacs-orgmode@gnu.org, Richard Kim --=-=-= Content-Type: text/plain 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 --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-org-src-restore-windows-for-some-values-of-org-src-w.patch >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-frame Use `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 --=-=-=--