unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
* [PATCH v2] emacs: insert quotable parts in reply as they are displayed in show view
@ 2013-08-27 19:50 Jani Nikula
  2013-08-27 20:14 ` Tomi Ollila
  2013-08-29 15:53 ` Jani Nikula
  0 siblings, 2 replies; 6+ messages in thread
From: Jani Nikula @ 2013-08-27 19:50 UTC (permalink / raw)
  To: notmuch

In reply, insert quotable parts using notmuch-show-insert-bodypart
instead of calling notmuch-mm-display-part-inline directly to render
the quoted parts as they are rendered in show view.

The notable change is that replies to text/calendar parts quote the
pretty printed output of icalendar-import-buffer rather than the ugly
raw vcalendar.
---
 emacs/notmuch-mua.el  |   13 ++++++++++---
 emacs/notmuch-show.el |   18 +++++++++++++-----
 2 files changed, 23 insertions(+), 8 deletions(-)

diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el
index 2baae5f..c3aca80 100644
--- a/emacs/notmuch-mua.el
+++ b/emacs/notmuch-mua.el
@@ -28,6 +28,8 @@
 
 (eval-when-compile (require 'cl))
 
+(declare-function notmuch-show-insert-bodypart "notmuch-show" (msg part depth &optional hide))
+
 ;;
 
 (defcustom notmuch-mua-send-hook '(notmuch-mua-message-send-hook)
@@ -130,9 +132,11 @@ list."
 (defun notmuch-mua-insert-quotable-part (message part)
   (save-restriction
     (narrow-to-region (point) (point))
-    (notmuch-mm-display-part-inline message part (plist-get part :id)
-				    (plist-get part :content-type)
-				    notmuch-show-process-crypto)
+    ;; We don't want hooks, such as notmuch-wash-*, to be run on the
+    ;; quotable part.
+    (let ((notmuch-show-insert-text/plain-hook nil))
+      ;; Show the part but do not add buttons.
+      (notmuch-show-insert-bodypart message part 0 'no-buttons))
     (goto-char (point-max))))
 
 ;; There is a bug in emacs 23's message.el that results in a newline
@@ -219,6 +223,9 @@ list."
   (goto-char (point-max))
   (push-mark)
   (message-goto-body)
+
+  ;; Display message from the beginning if possible.
+  (recenter (- (line-number-at-pos) 1))
   (set-buffer-modified-p nil))
 
 (defun notmuch-mua-forward-message ()
diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
index 2896aae..904b98e 100644
--- a/emacs/notmuch-show.el
+++ b/emacs/notmuch-show.el
@@ -844,7 +844,11 @@ message at DEPTH in the current thread."
 (defun notmuch-show-insert-bodypart (msg part depth &optional hide)
   "Insert the body part PART at depth DEPTH in the current thread.
 
-If HIDE is non-nil then initially hide this part."
+HIDE determines whether to show or hide the part and the button
+as follows: If HIDE is nil, show the part and the button. If HIDE
+is t, hide the part initially and show the button. If HIDE is
+'no-buttons, show the part but do not add any buttons (this is
+useful for quoting in replies)."
 
   (let* ((content-type (downcase (plist-get part :content-type)))
 	 (mime-type (or (and (string= content-type "application/octet-stream")
@@ -854,15 +858,19 @@ If HIDE is non-nil then initially hide this part."
 			content-type))
 	 (nth (plist-get part :id))
 	 (beg (point))
-	 ;; We omit the part button for the first (or only) part if this is text/plain.
-	 (button (unless (and (string= mime-type "text/plain") (<= nth 1))
+	 ;; Hide the part initially if HIDE is t.
+	 (show-part (not (equal hide t)))
+	 ;; We omit the part button for the first (or only) part if
+	 ;; this is text/plain, or HIDE is 'no-buttons.
+	 (button (unless (or (equal hide 'no-buttons)
+			     (and (string= mime-type "text/plain") (<= nth 1)))
 		   (notmuch-show-insert-part-header nth mime-type content-type (plist-get part :filename))))
 	 (content-beg (point)))
 
     ;; Store the computed mime-type for later use (e.g. by attachment handlers).
     (plist-put part :computed-type mime-type)
 
-    (if (not hide)
+    (if show-part
         (notmuch-show-insert-bodypart-internal msg part mime-type nth depth button)
       (button-put button :notmuch-lazy-part
                   (list msg part mime-type nth depth button)))
@@ -875,7 +883,7 @@ If HIDE is non-nil then initially hide this part."
       (insert "\n"))
     ;; We do not create the overlay for hidden (lazy) parts until
     ;; they are inserted.
-    (if (not hide)
+    (if show-part
 	(notmuch-show-create-part-overlays button content-beg (point))
       (save-excursion
 	(notmuch-show-toggle-part-invisibility button)))
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] emacs: insert quotable parts in reply as they are displayed in show view
  2013-08-27 19:50 [PATCH v2] emacs: insert quotable parts in reply as they are displayed in show view Jani Nikula
@ 2013-08-27 20:14 ` Tomi Ollila
  2013-08-29 15:53 ` Jani Nikula
  1 sibling, 0 replies; 6+ messages in thread
From: Tomi Ollila @ 2013-08-27 20:14 UTC (permalink / raw)
  To: Jani Nikula, notmuch

On Tue, Aug 27 2013, Jani Nikula <jani@nikula.org> wrote:

> In reply, insert quotable parts using notmuch-show-insert-bodypart
> instead of calling notmuch-mm-display-part-inline directly to render
> the quoted parts as they are rendered in show view.
>
> The notable change is that replies to text/calendar parts quote the
> pretty printed output of icalendar-import-buffer rather than the ugly
> raw vcalendar.
> ---

Good stuff, I put this to test (in all of my 3 hosts I run notmuch-emacs)

Vcalendars render fine. Have to find some html-only mail...

The first line 'From:' is outside the top of the window for me -- have
to play with recenter or something a bit...

Tomi


>  emacs/notmuch-mua.el  |   13 ++++++++++---
>  emacs/notmuch-show.el |   18 +++++++++++++-----
>  2 files changed, 23 insertions(+), 8 deletions(-)
>
> diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el
> index 2baae5f..c3aca80 100644
> --- a/emacs/notmuch-mua.el
> +++ b/emacs/notmuch-mua.el
> @@ -28,6 +28,8 @@
>  
>  (eval-when-compile (require 'cl))
>  
> +(declare-function notmuch-show-insert-bodypart "notmuch-show" (msg part depth &optional hide))
> +
>  ;;
>  
>  (defcustom notmuch-mua-send-hook '(notmuch-mua-message-send-hook)
> @@ -130,9 +132,11 @@ list."
>  (defun notmuch-mua-insert-quotable-part (message part)
>    (save-restriction
>      (narrow-to-region (point) (point))
> -    (notmuch-mm-display-part-inline message part (plist-get part :id)
> -				    (plist-get part :content-type)
> -				    notmuch-show-process-crypto)
> +    ;; We don't want hooks, such as notmuch-wash-*, to be run on the
> +    ;; quotable part.
> +    (let ((notmuch-show-insert-text/plain-hook nil))
> +      ;; Show the part but do not add buttons.
> +      (notmuch-show-insert-bodypart message part 0 'no-buttons))
>      (goto-char (point-max))))
>  
>  ;; There is a bug in emacs 23's message.el that results in a newline
> @@ -219,6 +223,9 @@ list."
>    (goto-char (point-max))
>    (push-mark)
>    (message-goto-body)
> +
> +  ;; Display message from the beginning if possible.
> +  (recenter (- (line-number-at-pos) 1))
>    (set-buffer-modified-p nil))
>  
>  (defun notmuch-mua-forward-message ()
> diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
> index 2896aae..904b98e 100644
> --- a/emacs/notmuch-show.el
> +++ b/emacs/notmuch-show.el
> @@ -844,7 +844,11 @@ message at DEPTH in the current thread."
>  (defun notmuch-show-insert-bodypart (msg part depth &optional hide)
>    "Insert the body part PART at depth DEPTH in the current thread.
>  
> -If HIDE is non-nil then initially hide this part."
> +HIDE determines whether to show or hide the part and the button
> +as follows: If HIDE is nil, show the part and the button. If HIDE
> +is t, hide the part initially and show the button. If HIDE is
> +'no-buttons, show the part but do not add any buttons (this is
> +useful for quoting in replies)."
>  
>    (let* ((content-type (downcase (plist-get part :content-type)))
>  	 (mime-type (or (and (string= content-type "application/octet-stream")
> @@ -854,15 +858,19 @@ If HIDE is non-nil then initially hide this part."
>  			content-type))
>  	 (nth (plist-get part :id))
>  	 (beg (point))
> -	 ;; We omit the part button for the first (or only) part if this is text/plain.
> -	 (button (unless (and (string= mime-type "text/plain") (<= nth 1))
> +	 ;; Hide the part initially if HIDE is t.
> +	 (show-part (not (equal hide t)))
> +	 ;; We omit the part button for the first (or only) part if
> +	 ;; this is text/plain, or HIDE is 'no-buttons.
> +	 (button (unless (or (equal hide 'no-buttons)
> +			     (and (string= mime-type "text/plain") (<= nth 1)))
>  		   (notmuch-show-insert-part-header nth mime-type content-type (plist-get part :filename))))
>  	 (content-beg (point)))
>  
>      ;; Store the computed mime-type for later use (e.g. by attachment handlers).
>      (plist-put part :computed-type mime-type)
>  
> -    (if (not hide)
> +    (if show-part
>          (notmuch-show-insert-bodypart-internal msg part mime-type nth depth button)
>        (button-put button :notmuch-lazy-part
>                    (list msg part mime-type nth depth button)))
> @@ -875,7 +883,7 @@ If HIDE is non-nil then initially hide this part."
>        (insert "\n"))
>      ;; We do not create the overlay for hidden (lazy) parts until
>      ;; they are inserted.
> -    (if (not hide)
> +    (if show-part
>  	(notmuch-show-create-part-overlays button content-beg (point))
>        (save-excursion
>  	(notmuch-show-toggle-part-invisibility button)))
> -- 
> 1.7.10.4
>
> _______________________________________________
> notmuch mailing list
> notmuch@notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v2] emacs: insert quotable parts in reply as they are displayed in show view
  2013-08-27 19:50 [PATCH v2] emacs: insert quotable parts in reply as they are displayed in show view Jani Nikula
  2013-08-27 20:14 ` Tomi Ollila
@ 2013-08-29 15:53 ` Jani Nikula
  2013-08-30 16:49   ` Mark Walters
  1 sibling, 1 reply; 6+ messages in thread
From: Jani Nikula @ 2013-08-29 15:53 UTC (permalink / raw)
  To: notmuch; +Cc: Tomi Ollila

In reply, insert quotable parts using notmuch-show-insert-bodypart
instead of calling notmuch-mm-display-part-inline directly to render
the quoted parts as they are rendered in show view.

The notable change is that replies to text/calendar parts quote the
pretty printed output of icalendar-import-buffer rather than the ugly
raw vcalendar.

---

v2: use (narrow-to-region (point-min) (point)) in
notmuch-mua-insert-quotable-part instead of adding the ugly recenter
in notmuch-mua-reply. Thanks to Austin and Mark for figuring this out.
---
 emacs/notmuch-mua.el  |   12 ++++++++----
 emacs/notmuch-show.el |   18 +++++++++++++-----
 2 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el
index 2baae5f..e7cc94e 100644
--- a/emacs/notmuch-mua.el
+++ b/emacs/notmuch-mua.el
@@ -28,6 +28,8 @@
 
 (eval-when-compile (require 'cl))
 
+(declare-function notmuch-show-insert-bodypart "notmuch-show" (msg part depth &optional hide))
+
 ;;
 
 (defcustom notmuch-mua-send-hook '(notmuch-mua-message-send-hook)
@@ -129,10 +131,12 @@ list."
 
 (defun notmuch-mua-insert-quotable-part (message part)
   (save-restriction
-    (narrow-to-region (point) (point))
-    (notmuch-mm-display-part-inline message part (plist-get part :id)
-				    (plist-get part :content-type)
-				    notmuch-show-process-crypto)
+    (narrow-to-region (point-min) (point))
+    ;; We don't want hooks, such as notmuch-wash-*, to be run on the
+    ;; quotable part.
+    (let ((notmuch-show-insert-text/plain-hook nil))
+      ;; Show the part but do not add buttons.
+      (notmuch-show-insert-bodypart message part 0 'no-buttons))
     (goto-char (point-max))))
 
 ;; There is a bug in emacs 23's message.el that results in a newline
diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
index 2896aae..904b98e 100644
--- a/emacs/notmuch-show.el
+++ b/emacs/notmuch-show.el
@@ -844,7 +844,11 @@ message at DEPTH in the current thread."
 (defun notmuch-show-insert-bodypart (msg part depth &optional hide)
   "Insert the body part PART at depth DEPTH in the current thread.
 
-If HIDE is non-nil then initially hide this part."
+HIDE determines whether to show or hide the part and the button
+as follows: If HIDE is nil, show the part and the button. If HIDE
+is t, hide the part initially and show the button. If HIDE is
+'no-buttons, show the part but do not add any buttons (this is
+useful for quoting in replies)."
 
   (let* ((content-type (downcase (plist-get part :content-type)))
 	 (mime-type (or (and (string= content-type "application/octet-stream")
@@ -854,15 +858,19 @@ If HIDE is non-nil then initially hide this part."
 			content-type))
 	 (nth (plist-get part :id))
 	 (beg (point))
-	 ;; We omit the part button for the first (or only) part if this is text/plain.
-	 (button (unless (and (string= mime-type "text/plain") (<= nth 1))
+	 ;; Hide the part initially if HIDE is t.
+	 (show-part (not (equal hide t)))
+	 ;; We omit the part button for the first (or only) part if
+	 ;; this is text/plain, or HIDE is 'no-buttons.
+	 (button (unless (or (equal hide 'no-buttons)
+			     (and (string= mime-type "text/plain") (<= nth 1)))
 		   (notmuch-show-insert-part-header nth mime-type content-type (plist-get part :filename))))
 	 (content-beg (point)))
 
     ;; Store the computed mime-type for later use (e.g. by attachment handlers).
     (plist-put part :computed-type mime-type)
 
-    (if (not hide)
+    (if show-part
         (notmuch-show-insert-bodypart-internal msg part mime-type nth depth button)
       (button-put button :notmuch-lazy-part
                   (list msg part mime-type nth depth button)))
@@ -875,7 +883,7 @@ If HIDE is non-nil then initially hide this part."
       (insert "\n"))
     ;; We do not create the overlay for hidden (lazy) parts until
     ;; they are inserted.
-    (if (not hide)
+    (if show-part
 	(notmuch-show-create-part-overlays button content-beg (point))
       (save-excursion
 	(notmuch-show-toggle-part-invisibility button)))
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] emacs: insert quotable parts in reply as they are displayed in show view
  2013-08-29 15:53 ` Jani Nikula
@ 2013-08-30 16:49   ` Mark Walters
  2013-08-30 17:18     ` Austin Clements
  2013-09-01 14:54     ` Mark Walters
  0 siblings, 2 replies; 6+ messages in thread
From: Mark Walters @ 2013-08-30 16:49 UTC (permalink / raw)
  To: Jani Nikula, notmuch; +Cc: Tomi Ollila


> In reply, insert quotable parts using notmuch-show-insert-bodypart
> instead of calling notmuch-mm-display-part-inline directly to render
> the quoted parts as they are rendered in show view.
>
> The notable change is that replies to text/calendar parts quote the
> pretty printed output of icalendar-import-buffer rather than the ugly
> raw vcalendar.

I slightly worry that some text-properties or similar from notmuch-show
could make their way into the reply buffer: in particular it would be
very bad if any invisible character made it into the buffer. I don't
think this is actually a problem currently but just in case (and to
avoid future problems) how about the following on top of the parent
patch?

Best wishes

Mark

---
 emacs/notmuch-mua.el |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el
index e7cc94e..9e4a232 100644
--- a/emacs/notmuch-mua.el
+++ b/emacs/notmuch-mua.el
@@ -134,9 +134,11 @@ list."
     (narrow-to-region (point-min) (point))
     ;; We don't want hooks, such as notmuch-wash-*, to be run on the
     ;; quotable part.
-    (let ((notmuch-show-insert-text/plain-hook nil))
-      ;; Show the part but do not add buttons.
-      (notmuch-show-insert-bodypart message part 0 'no-buttons))
+    (insert (with-temp-buffer
+	      (let ((notmuch-show-insert-text/plain-hook nil))
+		;; Show the part but do not add buttons.
+		(notmuch-show-insert-bodypart message part 0 'no-buttons))
+	      (buffer-substring-no-properties (point-min) (point-max))))
     (goto-char (point-max))))
 
 ;; There is a bug in emacs 23's message.el that results in a newline
-- 
1.7.9.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] emacs: insert quotable parts in reply as they are displayed in show view
  2013-08-30 16:49   ` Mark Walters
@ 2013-08-30 17:18     ` Austin Clements
  2013-09-01 14:54     ` Mark Walters
  1 sibling, 0 replies; 6+ messages in thread
From: Austin Clements @ 2013-08-30 17:18 UTC (permalink / raw)
  To: Mark Walters; +Cc: Tomi Ollila, notmuch

Quoth Mark Walters on Aug 30 at  5:49 pm:
> 
> > In reply, insert quotable parts using notmuch-show-insert-bodypart
> > instead of calling notmuch-mm-display-part-inline directly to render
> > the quoted parts as they are rendered in show view.
> >
> > The notable change is that replies to text/calendar parts quote the
> > pretty printed output of icalendar-import-buffer rather than the ugly
> > raw vcalendar.
> 
> I slightly worry that some text-properties or similar from notmuch-show
> could make their way into the reply buffer: in particular it would be
> very bad if any invisible character made it into the buffer. I don't
> think this is actually a problem currently but just in case (and to
> avoid future problems) how about the following on top of the parent
> patch?

I haven't tested this, but I like the idea.  It won't actually help
with invisible text (though we could fix that in the future if
necessary), but there are plenty of other properties and overlays you
wouldn't want bleeding into the reply buffer.  This puts a clear wall
between the potentially interactive but read-only show output and the
plain but editable reply text.

> Best wishes
> 
> Mark
> 
> ---
>  emacs/notmuch-mua.el |    8 +++++---
>  1 files changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el
> index e7cc94e..9e4a232 100644
> --- a/emacs/notmuch-mua.el
> +++ b/emacs/notmuch-mua.el
> @@ -134,9 +134,11 @@ list."
>      (narrow-to-region (point-min) (point))
>      ;; We don't want hooks, such as notmuch-wash-*, to be run on the
>      ;; quotable part.
> -    (let ((notmuch-show-insert-text/plain-hook nil))
> -      ;; Show the part but do not add buttons.
> -      (notmuch-show-insert-bodypart message part 0 'no-buttons))
> +    (insert (with-temp-buffer
> +	      (let ((notmuch-show-insert-text/plain-hook nil))
> +		;; Show the part but do not add buttons.
> +		(notmuch-show-insert-bodypart message part 0 'no-buttons))
> +	      (buffer-substring-no-properties (point-min) (point-max))))
>      (goto-char (point-max))))
>  
>  ;; There is a bug in emacs 23's message.el that results in a newline

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] emacs: insert quotable parts in reply as they are displayed in show view
  2013-08-30 16:49   ` Mark Walters
  2013-08-30 17:18     ` Austin Clements
@ 2013-09-01 14:54     ` Mark Walters
  1 sibling, 0 replies; 6+ messages in thread
From: Mark Walters @ 2013-09-01 14:54 UTC (permalink / raw)
  To: Jani Nikula, notmuch; +Cc: Tomi Ollila


Here is a slightly better (I think) version of this. If we use a
temp-buffer we don't need the narrowing or point movement as the insert
buffer-string should get that right.

Best wishes

Mark

From d0925d374411cf5031832f4d72b6fb5d21a45b21 Mon Sep 17 00:00:00 2001
From: Mark Walters <markwalters1009@gmail.com>
Date: Fri, 30 Aug 2013 17:43:46 +0100
Subject: [PATCH] tweak

---
 emacs/notmuch-mua.el |   17 +++++++++--------
 1 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el
index e7cc94e..ff8149b 100644
--- a/emacs/notmuch-mua.el
+++ b/emacs/notmuch-mua.el
@@ -130,14 +130,15 @@ list."
 	  collect part))
 
 (defun notmuch-mua-insert-quotable-part (message part)
-  (save-restriction
-    (narrow-to-region (point-min) (point))
-    ;; We don't want hooks, such as notmuch-wash-*, to be run on the
-    ;; quotable part.
-    (let ((notmuch-show-insert-text/plain-hook nil))
-      ;; Show the part but do not add buttons.
-      (notmuch-show-insert-bodypart message part 0 'no-buttons))
-    (goto-char (point-max))))
+  ;; We don't want text properties leaking from the show renderer into
+  ;; the reply so we use a temp buffer. Also we don't want hooks, such
+  ;; as notmuch-wash-*, to be run on the quotable part so we set
+  ;; notmuch-show-insert-text/plain-hook to nil.
+  (insert (with-temp-buffer
+	    (let ((notmuch-show-insert-text/plain-hook nil))
+	      ;; Show the part but do not add buttons.
+	      (notmuch-show-insert-bodypart message part 0 'no-buttons))
+	    (buffer-substring-no-properties (point-min) (point-max)))))
 
 ;; There is a bug in emacs 23's message.el that results in a newline
 ;; not being inserted after the References header, so the next header
-- 
1.7.9.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2013-09-01 14:54 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-08-27 19:50 [PATCH v2] emacs: insert quotable parts in reply as they are displayed in show view Jani Nikula
2013-08-27 20:14 ` Tomi Ollila
2013-08-29 15:53 ` Jani Nikula
2013-08-30 16:49   ` Mark Walters
2013-08-30 17:18     ` Austin Clements
2013-09-01 14:54     ` Mark Walters

Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.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).