Re: [PATCH v2] emacs: Use pop-to-buffer-same-window rather than switch-to-buffer
Hello, On Sat 22 Aug 2020 at 12:04PM +03, Tomi Ollila wrote: > On Tue, Aug 11 2020, Sean Whitton wrote: > >> This means that notmuch commands obey display-buffer-alist so the user >> can customize how buffers show up. >> >> It also permits the use of C-x 4 4, C-x 5 5 and C-x t t, available in >> Emacs 28. For example, one can use C-x 4 4 M-x notmuch-jump-search RET >> to open a saved search in another window rather than the current window. >> Or in notmuch-search mode, C-x 5 5 RET to view the message at point in >> a new frame. >> >> notmuch-tree has custom buffer display logic, so bind >> display-buffer-overriding-action to make pop-to-buffer-same-window >> behave exactly as switch-to-buffer while that function is running. >> --- >> Changes since v1: rebased onto latest master. > > I've been having this in my emacs setup (one-notmuch.elc =D) couple > of days, and haven't seen anything strange. Thanks both for testing it! -- Sean Whitton ___ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-le...@notmuchmail.org
Re: [PATCH v2] emacs: Use pop-to-buffer-same-window rather than switch-to-buffer
Sean Whitton writes: > This means that notmuch commands obey display-buffer-alist so the user > can customize how buffers show up. > applied to release and master ___ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-le...@notmuchmail.org
Re: [PATCH v2] emacs: Use pop-to-buffer-same-window rather than switch-to-buffer
On Tue, Aug 11 2020, Sean Whitton wrote: > This means that notmuch commands obey display-buffer-alist so the user > can customize how buffers show up. > > It also permits the use of C-x 4 4, C-x 5 5 and C-x t t, available in > Emacs 28. For example, one can use C-x 4 4 M-x notmuch-jump-search RET > to open a saved search in another window rather than the current window. > Or in notmuch-search mode, C-x 5 5 RET to view the message at point in > a new frame. > > notmuch-tree has custom buffer display logic, so bind > display-buffer-overriding-action to make pop-to-buffer-same-window > behave exactly as switch-to-buffer while that function is running. > --- > Changes since v1: rebased onto latest master. I've been having this in my emacs setup (one-notmuch.elc =D) couple of days, and haven't seen anything strange. Just now I tested a bit more, tried show and tree modes, with M-x debug-on-entry pop-to-buffer-same-window active and see some call paths (interestingly (or not so), starting this mail composition pop-to-buffer-same-window was not in call path -- but probably switch-to-buffer would be neither and there is no change in status quo) So LGTM. Tomi > > emacs/notmuch-draft.el | 3 ++- > emacs/notmuch-hello.el | 2 +- > emacs/notmuch-show.el | 8 > emacs/notmuch-tree.el | 13 + > emacs/notmuch.el | 4 ++-- > 5 files changed, 18 insertions(+), 12 deletions(-) > > diff --git a/emacs/notmuch-draft.el b/emacs/notmuch-draft.el > index 759e6c9e..283830ad 100644 > --- a/emacs/notmuch-draft.el > +++ b/emacs/notmuch-draft.el > @@ -232,7 +232,8 @@ applied to newly inserted messages)." >(draft (equal tags (notmuch-update-tags tags notmuch-draft-tags > (when (or draft > (yes-or-no-p "Message does not appear to be a draft: edit as new? > ")) > - (switch-to-buffer (get-buffer-create (concat "*notmuch-draft-" id > "*"))) > + (pop-to-buffer-same-window > + (get-buffer-create (concat "*notmuch-draft-" id "*"))) >(setq buffer-read-only nil) >(erase-buffer) >(let ((coding-system-for-read 'no-conversion)) > diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el > index c127bba9..bb60a890 100644 > --- a/emacs/notmuch-hello.el > +++ b/emacs/notmuch-hello.el > @@ -973,7 +973,7 @@ following: >(let ((notmuch-hello-auto-refresh nil)) > (if no-display > (set-buffer "*notmuch-hello*") > - (switch-to-buffer "*notmuch-hello*"))) > + (pop-to-buffer-same-window "*notmuch-hello*"))) >;; Install auto-refresh hook >(when notmuch-hello-auto-refresh > (add-hook 'window-configuration-change-hook > diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el > index b0f2d28b..98d9c935 100644 > --- a/emacs/notmuch-show.el > +++ b/emacs/notmuch-show.el > @@ -1241,7 +1241,7 @@ matched." > (eval (car (get 'mm-inline-override-types > 'standard-value >(cons "application/*" mm-inline-override-types) > mm-inline-override-types))) > -(switch-to-buffer (get-buffer-create buffer-name)) > +(pop-to-buffer-same-window (get-buffer-create buffer-name)) > ;; No need to track undo information for this buffer. > (setq buffer-undo-list t) > (notmuch-show-mode) > @@ -1998,7 +1998,7 @@ to show, nil otherwise." >(let* ((id (notmuch-show-get-message-id)) >(buf (get-buffer-create (concat "*notmuch-raw-" id "*"))) >(inhibit-read-only t)) > -(switch-to-buffer buf) > +(pop-to-buffer-same-window buf) > (erase-buffer) > (let ((coding-system-for-read 'no-conversion)) >(call-process notmuch-command nil t nil "show" "--format=raw" id)) > @@ -2057,7 +2057,7 @@ message." > (set-buffer-modified-p nil) > (setq buffer-read-only t) > (unless (zerop exit-code) > - (switch-to-buffer-other-window buf) > + (pop-to-buffer buf) > (message (format "Command '%s' exited abnormally with code %d" >shell-command exit-code > > @@ -2465,7 +2465,7 @@ If the part is displayed in an external application > then close > the new buffer." >(let ((buf (get-buffer-create (generate-new-buffer-name >(concat " *notmuch-internal-part*") > -(switch-to-buffer buf) > +(pop-to-buffer-same-window buf) > (if (eq (mm-display-part handle) 'external) > (kill-buffer buf) >(goto-char (point-min)) > diff --git a/emacs/notmuch-tree.el b/emacs/notmuch-tree.el > index fbba4bb3..f36a6e72 100644 > --- a/emacs/notmuch-tree.el > +++ b/emacs/notmuch-tree.el > @@ -543,9 +543,14 @@ NOT change the database." >(setq notmuch-tree-message-window > (split-window-vertically (/ (window-height) 4))) >(with-selected-window notmuch-tree-message-window > - ;; Since we are only displaying one message do not indent. > - (let ((notmuch-show-indent-messages-width 0) > -
Re: [PATCH v2] emacs: Use pop-to-buffer-same-window rather than switch-to-buffer
Sean Whitton writes: > This means that notmuch commands obey display-buffer-alist so the user > can customize how buffers show up. > > It also permits the use of C-x 4 4, C-x 5 5 and C-x t t, available in > Emacs 28. For example, one can use C-x 4 4 M-x notmuch-jump-search RET > to open a saved search in another window rather than the current window. > Or in notmuch-search mode, C-x 5 5 RET to view the message at point in > a new frame. > > notmuch-tree has custom buffer display logic, so bind > display-buffer-overriding-action to make pop-to-buffer-same-window > behave exactly as switch-to-buffer while that function is running. I only tested this in emacs 26.3, but I think I hit all the modified code paths and it didn't crash. It would be nice to have one or two more people try it out before I apply to master; I tend to be somewhat oblivious to subtle changes in emacs window behaviour. d ___ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-le...@notmuchmail.org
[PATCH v2] emacs: Use pop-to-buffer-same-window rather than switch-to-buffer
This means that notmuch commands obey display-buffer-alist so the user can customize how buffers show up. It also permits the use of C-x 4 4, C-x 5 5 and C-x t t, available in Emacs 28. For example, one can use C-x 4 4 M-x notmuch-jump-search RET to open a saved search in another window rather than the current window. Or in notmuch-search mode, C-x 5 5 RET to view the message at point in a new frame. notmuch-tree has custom buffer display logic, so bind display-buffer-overriding-action to make pop-to-buffer-same-window behave exactly as switch-to-buffer while that function is running. --- Changes since v1: rebased onto latest master. emacs/notmuch-draft.el | 3 ++- emacs/notmuch-hello.el | 2 +- emacs/notmuch-show.el | 8 emacs/notmuch-tree.el | 13 + emacs/notmuch.el | 4 ++-- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/emacs/notmuch-draft.el b/emacs/notmuch-draft.el index 759e6c9e..283830ad 100644 --- a/emacs/notmuch-draft.el +++ b/emacs/notmuch-draft.el @@ -232,7 +232,8 @@ applied to newly inserted messages)." (draft (equal tags (notmuch-update-tags tags notmuch-draft-tags (when (or draft (yes-or-no-p "Message does not appear to be a draft: edit as new? ")) - (switch-to-buffer (get-buffer-create (concat "*notmuch-draft-" id "*"))) + (pop-to-buffer-same-window + (get-buffer-create (concat "*notmuch-draft-" id "*"))) (setq buffer-read-only nil) (erase-buffer) (let ((coding-system-for-read 'no-conversion)) diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index c127bba9..bb60a890 100644 --- a/emacs/notmuch-hello.el +++ b/emacs/notmuch-hello.el @@ -973,7 +973,7 @@ following: (let ((notmuch-hello-auto-refresh nil)) (if no-display (set-buffer "*notmuch-hello*") - (switch-to-buffer "*notmuch-hello*"))) + (pop-to-buffer-same-window "*notmuch-hello*"))) ;; Install auto-refresh hook (when notmuch-hello-auto-refresh (add-hook 'window-configuration-change-hook diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el index b0f2d28b..98d9c935 100644 --- a/emacs/notmuch-show.el +++ b/emacs/notmuch-show.el @@ -1241,7 +1241,7 @@ matched." (eval (car (get 'mm-inline-override-types 'standard-value (cons "application/*" mm-inline-override-types) mm-inline-override-types))) -(switch-to-buffer (get-buffer-create buffer-name)) +(pop-to-buffer-same-window (get-buffer-create buffer-name)) ;; No need to track undo information for this buffer. (setq buffer-undo-list t) (notmuch-show-mode) @@ -1998,7 +1998,7 @@ to show, nil otherwise." (let* ((id (notmuch-show-get-message-id)) (buf (get-buffer-create (concat "*notmuch-raw-" id "*"))) (inhibit-read-only t)) -(switch-to-buffer buf) +(pop-to-buffer-same-window buf) (erase-buffer) (let ((coding-system-for-read 'no-conversion)) (call-process notmuch-command nil t nil "show" "--format=raw" id)) @@ -2057,7 +2057,7 @@ message." (set-buffer-modified-p nil) (setq buffer-read-only t) (unless (zerop exit-code) - (switch-to-buffer-other-window buf) + (pop-to-buffer buf) (message (format "Command '%s' exited abnormally with code %d" shell-command exit-code @@ -2465,7 +2465,7 @@ If the part is displayed in an external application then close the new buffer." (let ((buf (get-buffer-create (generate-new-buffer-name (concat " *notmuch-internal-part*") -(switch-to-buffer buf) +(pop-to-buffer-same-window buf) (if (eq (mm-display-part handle) 'external) (kill-buffer buf) (goto-char (point-min)) diff --git a/emacs/notmuch-tree.el b/emacs/notmuch-tree.el index fbba4bb3..f36a6e72 100644 --- a/emacs/notmuch-tree.el +++ b/emacs/notmuch-tree.el @@ -543,9 +543,14 @@ NOT change the database." (setq notmuch-tree-message-window (split-window-vertically (/ (window-height) 4))) (with-selected-window notmuch-tree-message-window - ;; Since we are only displaying one message do not indent. - (let ((notmuch-show-indent-messages-width 0) - (notmuch-show-only-matching-messages t)) + (let (;; Since we are only displaying one message do not indent. + (notmuch-show-indent-messages-width 0) + (notmuch-show-only-matching-messages t) + ;; Ensure that `pop-to-buffer-same-window' uses the + ;; window we want it to use. + (display-buffer-overriding-action +'((display-buffer-same-window) + (inhibit-same-window . nil (setq buffer (notmuch-show id ;; We need the `let' as notmuch-tree-message-window is buffer local. (let ((window notmuch-tree-message-window)) @@ -1076,7 +1081,7 @@ The arguments