Re: [PATCH v2] emacs: Use pop-to-buffer-same-window rather than switch-to-buffer

2020-08-22 Thread Sean Whitton
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

2020-08-22 Thread David Bremner
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

2020-08-22 Thread Tomi Ollila
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

2020-08-15 Thread David Bremner
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

2020-08-11 Thread Sean Whitton
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