unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
* [PATCH] emacs: Improved printing support.
  2010-11-11 12:57 Printing mail David Edmondson
@ 2010-11-12 12:53 ` David Edmondson
  0 siblings, 0 replies; 11+ messages in thread
From: David Edmondson @ 2010-11-12 12:53 UTC (permalink / raw)
  To: notmuch

---

More usable (I'm trying 'muttprint then evince').

 emacs/Makefile.local   |    3 +-
 emacs/notmuch-print.el |   75 ++++++++++++++++++++++++++++++++++++++++++++++++
 emacs/notmuch-show.el  |   51 ++++++++++++++++++++++++++++++++
 3 files changed, 128 insertions(+), 1 deletions(-)
 create mode 100644 emacs/notmuch-print.el

diff --git a/emacs/Makefile.local b/emacs/Makefile.local
index c5280f1..df87427 100644
--- a/emacs/Makefile.local
+++ b/emacs/Makefile.local
@@ -13,7 +13,8 @@ emacs_sources := \
 	$(dir)/notmuch-maildir-fcc.el \
 	$(dir)/notmuch-message.el \
 	$(dir)/coolj.el \
-	$(dir)/notmuch-lkml.el
+	$(dir)/notmuch-lkml.el \
+	$(dir)/notmuch-print.el
 
 emacs_images := \
 	$(dir)/notmuch-logo.png
diff --git a/emacs/notmuch-print.el b/emacs/notmuch-print.el
new file mode 100644
index 0000000..62e380c
--- /dev/null
+++ b/emacs/notmuch-print.el
@@ -0,0 +1,75 @@
+;; notmuch-print.el --- printing messages from notmuch.
+;;
+;; Copyright © David Edmondson
+;;
+;; This file is part of Notmuch.
+;;
+;; Notmuch is free software: you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; Notmuch is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with Notmuch.  If not, see <http://www.gnu.org/licenses/>.
+;;
+;; Authors: David Edmondson <dme@dme.org>
+
+(defcustom notmuch-print-mechanism 'notmuch-print-lpr
+  "How should printing be done?"
+  :group 'notmuch
+  :type '(choice
+	  (function :tag "Use lpr" notmuch-print-lpr)
+	  (function :tag "Use ps-print" notmuch-print-ps-print)
+	  (function :tag "Use ps-print then evince" notmuch-print-ps-print/evince)
+	  (function :tag "Use muttprint" notmuch-print-muttprint)
+	  (function :tag "Use muttprint then evince" notmuch-print-muttprint/evince)
+	  (function :tag "Using a custom function")))
+
+(defmacro notmuch-print-with-file (filename &rest body)
+  `(with-temp-buffer
+     (insert-file-contents ,filename)
+     (setq buffer-modified-p nil)
+     ,@body))
+
+(defun notmuch-print-lpr (filename)
+  (notmuch-print-with-file filename
+			   (lpr-buffer)))
+
+(defun notmuch-print-ps-print (filename)
+  (notmuch-print-with-file filename
+			   (ps-print-buffer)))
+
+(defun notmuch-print-ps-print/evince (filename)
+  (let ((ps-file (make-temp-file "notmuch")))
+    (notmuch-print-with-file filename
+			     (ps-print-buffer ps-file)
+			     (async-shell-command (concat "evince " ps-file)))))
+
+(defun notmuch-print-muttprint (filename)
+  (shell-command
+   (concat "muttprint "
+	   "--file " (shell-quote-argument filename) " "
+	   ;; Show the tags.
+	   "--printed-headers Date_To_From_CC_Newsgroups_*Subject*_/Tags/ ")))
+
+(defun notmuch-print-muttprint/evince (filename)
+  (let ((ps-file (make-temp-file "notmuch")))
+    (call-process-shell-command
+     (concat "muttprint "
+	     "--file " (shell-quote-argument filename) " "
+	     ;; Show the tags.
+	     "--printed-headers Date_To_From_CC_Newsgroups_*Subject*_/Tags/ "
+	     "--printer \"TO_FILE:" (shell-quote-argument ps-file) "\""))
+    (async-shell-command (concat "evince " ps-file))))
+
+(defun notmuch-print-message (filename)
+  (funcall notmuch-print-mechanism filename))
+
+;;
+
+(provide 'notmuch-print)
diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
index aa89cfd..002c2fd 100644
--- a/emacs/notmuch-show.el
+++ b/emacs/notmuch-show.el
@@ -32,6 +32,7 @@
 (require 'notmuch-query)
 (require 'notmuch-wash)
 (require 'notmuch-mua)
+(require 'notmuch-print)
 
 (declare-function notmuch-call-notmuch-process "notmuch" (&rest args))
 (declare-function notmuch-fontify-headers "notmuch" nil)
@@ -174,6 +175,51 @@ Set `notmuch-show-address-simplication' to:
       mm-handle (> (notmuch-count-attachments mm-handle) 1))))
   (message "Done"))
 
+(defun notmuch-show-with-message-as-text (fn)
+  "Apply function `fn' to a text representation of the current
+message."
+
+  ;; Remake the header to ensure that all information is available.
+  (let* ((to (notmuch-show-get-to))
+	 (cc (notmuch-show-get-cc))
+	 (from (notmuch-show-get-from))
+	 (subject (notmuch-show-get-subject))
+	 (date (notmuch-show-get-date))
+	 (tags (notmuch-show-get-tags))
+	 (depth (notmuch-show-get-depth))
+
+	 (header (concat
+		  "Subject: " subject "\n"
+		  "To: " to "\n"
+		  (if (not (string= cc ""))
+		      (concat "Cc: " cc "\n")
+		    "")
+		  "From: " from "\n"
+		  "Date: " date "\n"
+		  (if tags
+		      (concat "Tags: "
+			      (mapconcat '(lambda (tag) tag) tags ", ") "\n")
+		    "")))
+	 (all (buffer-substring (notmuch-show-message-top)
+				(notmuch-show-message-bottom)))
+
+	 (file (make-temp-file "notmuch")))
+    (with-temp-file file
+      (insert all)
+      (indent-rigidly (point-min) (point-max) (- depth))
+      ;; Remove the original header.
+      (goto-char (point-min))
+      (re-search-forward "^$" (point-max) nil)
+      (delete-region (point-min) (point))
+      (insert header))
+    (funcall fn file)
+    (delete-file file)))
+
+(defun notmuch-show-print-message ()
+  "Print the current message."
+  (interactive)
+  (notmuch-show-with-message-as-text 'notmuch-print-message))
+
 (defun notmuch-show-fontify-header ()
   (let ((face (cond
 	       ((looking-at "[Tt]o:")
@@ -530,6 +576,8 @@ current buffer, if possible."
     (plist-put msg :message-invis-spec message-invis-spec)
     (overlay-put (make-overlay body-start body-end) 'invisible message-invis-spec)
 
+    (plist-put msg :depth depth)
+
     ;; Save the properties for this message. Currently this saves the
     ;; entire message (augmented it with other stuff), which seems
     ;; like overkill. We might save a reduced subset (for example, not
@@ -831,6 +879,9 @@ All currently available key bindings:
 (defun notmuch-show-get-to ()
   (notmuch-show-get-header :To))
 
+(defun notmuch-show-get-depth ()
+  (notmuch-show-get-prop :depth))
+
 (defun notmuch-show-set-tags (tags)
   "Set the tags of the current message."
   (notmuch-show-set-prop :tags tags)
-- 
1.7.2.3

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

* [PATCH] emacs: Improved printing support.
@ 2011-12-30 10:28 David Edmondson
  2011-12-31 19:15 ` David Bremner
  2012-01-03 14:12 ` David Edmondson
  0 siblings, 2 replies; 11+ messages in thread
From: David Edmondson @ 2011-12-30 10:28 UTC (permalink / raw)
  To: notmuch

Add various functions to print notmuch messages and tie them together
with a simple frontend. No keybinding is currently made to encourage
paper saving.
---

Resurrecting an old patch.

 emacs/Makefile.local   |    3 +-
 emacs/notmuch-print.el |   75 ++++++++++++++++++++++++++++++++++++++++++++++++
 emacs/notmuch-show.el  |   51 ++++++++++++++++++++++++++++++++
 3 files changed, 128 insertions(+), 1 deletions(-)
 create mode 100644 emacs/notmuch-print.el

diff --git a/emacs/Makefile.local b/emacs/Makefile.local
index 0c58b82..4fee0e8 100644
--- a/emacs/Makefile.local
+++ b/emacs/Makefile.local
@@ -13,7 +13,8 @@ emacs_sources := \
 	$(dir)/notmuch-maildir-fcc.el \
 	$(dir)/notmuch-message.el \
 	$(dir)/notmuch-crypto.el \
-	$(dir)/coolj.el
+	$(dir)/coolj.el \
+	$(dir)/notmuch-print.el
 
 emacs_images := \
 	$(srcdir)/$(dir)/notmuch-logo.png
diff --git a/emacs/notmuch-print.el b/emacs/notmuch-print.el
new file mode 100644
index 0000000..70fb041
--- /dev/null
+++ b/emacs/notmuch-print.el
@@ -0,0 +1,75 @@
+;; notmuch-print.el --- printing messages from notmuch.
+;;
+;; Copyright © David Edmondson
+;;
+;; This file is part of Notmuch.
+;;
+;; Notmuch is free software: you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; Notmuch is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with Notmuch.  If not, see <http://www.gnu.org/licenses/>.
+;;
+;; Authors: David Edmondson <dme@dme.org>
+
+(defcustom notmuch-print-mechanism 'notmuch-print-lpr
+  "How should printing be done?"
+  :group 'notmuch
+  :type '(choice
+	  (function :tag "Use lpr" notmuch-print-lpr)
+	  (function :tag "Use ps-print" notmuch-print-ps-print)
+	  (function :tag "Use ps-print then evince" notmuch-print-ps-print/evince)
+	  (function :tag "Use muttprint" notmuch-print-muttprint)
+	  (function :tag "Use muttprint then evince" notmuch-print-muttprint/evince)
+	  (function :tag "Using a custom function")))
+
+(defmacro notmuch-print-with-file (filename &rest body)
+  `(with-temp-buffer
+     (insert-file-contents ,filename)
+     (set-buffer-modified-p nil)
+     ,@body))
+
+(defun notmuch-print-lpr (filename)
+  (notmuch-print-with-file filename
+			   (lpr-buffer)))
+
+(defun notmuch-print-ps-print (filename)
+  (notmuch-print-with-file filename
+			   (ps-print-buffer)))
+
+(defun notmuch-print-ps-print/evince (filename)
+  (let ((ps-file (make-temp-file "notmuch")))
+    (notmuch-print-with-file filename
+			     (ps-print-buffer ps-file)
+			     (async-shell-command (concat "evince " ps-file)))))
+
+(defun notmuch-print-muttprint (filename)
+  (shell-command
+   (concat "muttprint "
+	   "--file " (shell-quote-argument filename) " "
+	   ;; Show the tags.
+	   "--printed-headers Date_To_From_CC_Newsgroups_*Subject*_/Tags/ ")))
+
+(defun notmuch-print-muttprint/evince (filename)
+  (let ((ps-file (make-temp-file "notmuch")))
+    (call-process-shell-command
+     (concat "muttprint "
+	     "--file " (shell-quote-argument filename) " "
+	     ;; Show the tags.
+	     "--printed-headers Date_To_From_CC_Newsgroups_*Subject*_/Tags/ "
+	     "--printer \"TO_FILE:" (shell-quote-argument ps-file) "\""))
+    (async-shell-command (concat "evince " ps-file))))
+
+(defun notmuch-print-message (filename)
+  (funcall notmuch-print-mechanism filename))
+
+;;
+
+(provide 'notmuch-print)
diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
index 5502efd..5beadbc 100644
--- a/emacs/notmuch-show.el
+++ b/emacs/notmuch-show.el
@@ -34,6 +34,7 @@
 (require 'notmuch-wash)
 (require 'notmuch-mua)
 (require 'notmuch-crypto)
+(require 'notmuch-print)
 
 (declare-function notmuch-call-notmuch-process "notmuch" (&rest args))
 (declare-function notmuch-fontify-headers "notmuch" nil)
@@ -186,6 +187,51 @@ indentation."
       mm-handle (> (notmuch-count-attachments mm-handle) 1))))
   (message "Done"))
 
+(defun notmuch-show-with-message-as-text (fn)
+  "Apply function `fn' to a text representation of the current
+message."
+
+  ;; Remake the header to ensure that all information is available.
+  (let* ((to (notmuch-show-get-to))
+	 (cc (notmuch-show-get-cc))
+	 (from (notmuch-show-get-from))
+	 (subject (notmuch-show-get-subject))
+	 (date (notmuch-show-get-date))
+	 (tags (notmuch-show-get-tags))
+	 (depth (notmuch-show-get-depth))
+
+	 (header (concat
+		  "Subject: " subject "\n"
+		  "To: " to "\n"
+		  (if (not (string= cc ""))
+		      (concat "Cc: " cc "\n")
+		    "")
+		  "From: " from "\n"
+		  "Date: " date "\n"
+		  (if tags
+		      (concat "Tags: "
+			      (mapconcat '(lambda (tag) tag) tags ", ") "\n")
+		    "")))
+	 (all (buffer-substring (notmuch-show-message-top)
+				(notmuch-show-message-bottom)))
+
+	 (file (make-temp-file "notmuch")))
+    (with-temp-file file
+      (insert all)
+      (indent-rigidly (point-min) (point-max) (- depth))
+      ;; Remove the original header.
+      (goto-char (point-min))
+      (re-search-forward "^$" (point-max) nil)
+      (delete-region (point-min) (point))
+      (insert header))
+    (funcall fn file)
+    (delete-file file)))
+
+(defun notmuch-show-print-message ()
+  "Print the current message."
+  (interactive)
+  (notmuch-show-with-message-as-text 'notmuch-print-message))
+
 (defun notmuch-show-fontify-header ()
   (let ((face (cond
 	       ((looking-at "[Tt]o:")
@@ -760,6 +806,8 @@ current buffer, if possible."
       (overlay-put headers-overlay 'priority 10))
     (overlay-put (make-overlay body-start body-end) 'invisible message-invis-spec)
 
+    (plist-put msg :depth depth)
+
     ;; Save the properties for this message. Currently this saves the
     ;; entire message (augmented it with other stuff), which seems
     ;; like overkill. We might save a reduced subset (for example, not
@@ -1111,6 +1159,9 @@ Some useful entries are:
 (defun notmuch-show-get-to ()
   (notmuch-show-get-header :To))
 
+(defun notmuch-show-get-depth ()
+  (notmuch-show-get-prop :depth))
+
 (defun notmuch-show-set-tags (tags)
   "Set the tags of the current message."
   (notmuch-show-set-prop :tags tags)
-- 
1.7.7.3

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

* Re: [PATCH] emacs: Improved printing support.
  2011-12-30 10:28 [PATCH] emacs: Improved printing support David Edmondson
@ 2011-12-31 19:15 ` David Bremner
  2012-01-03 11:37   ` David Edmondson
  2012-01-03 14:12 ` David Edmondson
  1 sibling, 1 reply; 11+ messages in thread
From: David Bremner @ 2011-12-31 19:15 UTC (permalink / raw)
  To: David Edmondson, notmuch

On Fri, 30 Dec 2011 10:28:17 +0000, David Edmondson <dme@dme.org> wrote:
> Add various functions to print notmuch messages and tie them together
> with a simple frontend. No keybinding is currently made to encourage
> paper saving.

Hi David.

I started playing with this a bit.

print using muttprint doesn't seem to work for me, I get a message:

      "zsh:1: no matches found: Date_To_From_CC_Newsgroups_*Subject*_/Tags/" 

Too lazy to track that down so far.

I wonder if the header line for ps-print could be easily improved (say
by giving the buffer a suggestive name).

d

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

* Re: [PATCH] emacs: Improved printing support.
  2011-12-31 19:15 ` David Bremner
@ 2012-01-03 11:37   ` David Edmondson
  0 siblings, 0 replies; 11+ messages in thread
From: David Edmondson @ 2012-01-03 11:37 UTC (permalink / raw)
  To: David Bremner, notmuch

[-- Attachment #1: Type: text/plain, Size: 483 bytes --]

On Sat, 31 Dec 2011 15:15:36 -0400, David Bremner <david@tethera.net> wrote:
> print using muttprint doesn't seem to work for me, I get a message:
> 
>       "zsh:1: no matches found:
>       Date_To_From_CC_Newsgroups_*Subject*_/Tags/" 

zsh is appropriately fussy about unquoted wildcards. I'll send an
updated version.

> I wonder if the header line for ps-print could be easily improved (say
> by giving the buffer a suggestive name).

Good idea. Will look into it.

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

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

* [PATCH] emacs: Improved printing support.
  2011-12-30 10:28 [PATCH] emacs: Improved printing support David Edmondson
  2011-12-31 19:15 ` David Bremner
@ 2012-01-03 14:12 ` David Edmondson
  2012-01-16 11:30   ` David Edmondson
  2012-01-16 21:27   ` Aaron Ecay
  1 sibling, 2 replies; 11+ messages in thread
From: David Edmondson @ 2012-01-03 14:12 UTC (permalink / raw)
  To: notmuch

Add various functions to print notmuch messages and tie them together
with a simple frontend. No keybinding is currently made to encourage
paper saving.
---

Fix the lack of shell quoting for muttprint. Rename the ps-print
buffers to have a relevant name.

 emacs/Makefile.local   |    3 +-
 emacs/notmuch-print.el |   79 ++++++++++++++++++++++++++++++++++++++++++++++++
 emacs/notmuch-show.el  |   51 +++++++++++++++++++++++++++++++
 3 files changed, 132 insertions(+), 1 deletions(-)
 create mode 100644 emacs/notmuch-print.el

diff --git a/emacs/Makefile.local b/emacs/Makefile.local
index 0c58b82..4fee0e8 100644
--- a/emacs/Makefile.local
+++ b/emacs/Makefile.local
@@ -13,7 +13,8 @@ emacs_sources := \
 	$(dir)/notmuch-maildir-fcc.el \
 	$(dir)/notmuch-message.el \
 	$(dir)/notmuch-crypto.el \
-	$(dir)/coolj.el
+	$(dir)/coolj.el \
+	$(dir)/notmuch-print.el
 
 emacs_images := \
 	$(srcdir)/$(dir)/notmuch-logo.png
diff --git a/emacs/notmuch-print.el b/emacs/notmuch-print.el
new file mode 100644
index 0000000..d4b7ed4
--- /dev/null
+++ b/emacs/notmuch-print.el
@@ -0,0 +1,79 @@
+;; notmuch-print.el --- printing messages from notmuch.
+;;
+;; Copyright © David Edmondson
+;;
+;; This file is part of Notmuch.
+;;
+;; Notmuch is free software: you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; Notmuch is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with Notmuch.  If not, see <http://www.gnu.org/licenses/>.
+;;
+;; Authors: David Edmondson <dme@dme.org>
+
+(defcustom notmuch-print-mechanism 'notmuch-print-lpr
+  "How should printing be done?"
+  :group 'notmuch
+  :type '(choice
+	  (function :tag "Use lpr" notmuch-print-lpr)
+	  (function :tag "Use ps-print" notmuch-print-ps-print)
+	  (function :tag "Use ps-print then evince" notmuch-print-ps-print/evince)
+	  (function :tag "Use muttprint" notmuch-print-muttprint)
+	  (function :tag "Use muttprint then evince" notmuch-print-muttprint/evince)
+	  (function :tag "Using a custom function")))
+
+(defmacro notmuch-print-with-file (filename &rest body)
+  `(with-temp-buffer
+     (insert-file-contents ,filename)
+     (set-buffer-modified-p nil)
+     ,@body))
+
+(defun notmuch-print-lpr (filename msg)
+  (notmuch-print-with-file filename
+			   (lpr-buffer)))
+
+(defun notmuch-print-ps-print (filename msg)
+  (let ((subject (plist-get (notmuch-show-get-prop :headers msg) :Subject)))
+    (notmuch-print-with-file filename
+			     (rename-buffer subject t)
+			     (ps-print-buffer))))
+
+(defun notmuch-print-ps-print/evince (filename msg)
+  (let ((ps-file (make-temp-file "notmuch"))
+	(subject (plist-get (notmuch-show-get-prop :headers msg) :Subject)))
+    (notmuch-print-with-file filename
+			     (rename-buffer subject t)
+			     (ps-print-buffer ps-file)
+			     (async-shell-command (concat "evince " ps-file)))))
+
+(defun notmuch-print-muttprint (filename msg)
+  (shell-command
+   (concat "muttprint "
+	   "--file " (shell-quote-argument filename) " "
+	   ;; Show the tags.
+	   "--printed-headers 'Date_To_From_CC_Newsgroups_*Subject*_/Tags/'")))
+
+(defun notmuch-print-muttprint/evince (filename msg)
+  (let ((ps-file (make-temp-file "notmuch")))
+    (call-process-shell-command
+     (concat "muttprint "
+	     "--file " (shell-quote-argument filename) " "
+	     ;; Show the tags.
+	     "--printed-headers 'Date_To_From_CC_Newsgroups_*Subject*_/Tags/' "
+	     "--printer 'TO_FILE:" (shell-quote-argument ps-file) "'"))
+    (async-shell-command (concat "evince " ps-file))))
+
+(defun notmuch-print-message (filename msg)
+  (funcall notmuch-print-mechanism filename msg))
+
+;;
+
+(provide 'notmuch-print)
diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
index 5502efd..55ccfc5 100644
--- a/emacs/notmuch-show.el
+++ b/emacs/notmuch-show.el
@@ -34,6 +34,7 @@
 (require 'notmuch-wash)
 (require 'notmuch-mua)
 (require 'notmuch-crypto)
+(require 'notmuch-print)
 
 (declare-function notmuch-call-notmuch-process "notmuch" (&rest args))
 (declare-function notmuch-fontify-headers "notmuch" nil)
@@ -186,6 +187,51 @@ indentation."
       mm-handle (> (notmuch-count-attachments mm-handle) 1))))
   (message "Done"))
 
+(defun notmuch-show-with-message-as-text (fn)
+  "Apply function `fn' to a text representation of the current
+message."
+
+  ;; Remake the header to ensure that all information is available.
+  (let* ((to (notmuch-show-get-to))
+	 (cc (notmuch-show-get-cc))
+	 (from (notmuch-show-get-from))
+	 (subject (notmuch-show-get-subject))
+	 (date (notmuch-show-get-date))
+	 (tags (notmuch-show-get-tags))
+	 (depth (notmuch-show-get-depth))
+
+	 (header (concat
+		  "Subject: " subject "\n"
+		  "To: " to "\n"
+		  (if (not (string= cc ""))
+		      (concat "Cc: " cc "\n")
+		    "")
+		  "From: " from "\n"
+		  "Date: " date "\n"
+		  (if tags
+		      (concat "Tags: "
+			      (mapconcat '(lambda (tag) tag) tags ", ") "\n")
+		    "")))
+	 (all (buffer-substring (notmuch-show-message-top)
+				(notmuch-show-message-bottom)))
+
+	 (file (make-temp-file "notmuch")))
+    (with-temp-file file
+      (insert all)
+      (indent-rigidly (point-min) (point-max) (- depth))
+      ;; Remove the original header.
+      (goto-char (point-min))
+      (re-search-forward "^$" (point-max) nil)
+      (delete-region (point-min) (point))
+      (insert header))
+    (funcall fn file (notmuch-show-get-message-properties))
+    (delete-file file)))
+
+(defun notmuch-show-print-message ()
+  "Print the current message."
+  (interactive)
+  (notmuch-show-with-message-as-text 'notmuch-print-message))
+
 (defun notmuch-show-fontify-header ()
   (let ((face (cond
 	       ((looking-at "[Tt]o:")
@@ -760,6 +806,8 @@ current buffer, if possible."
       (overlay-put headers-overlay 'priority 10))
     (overlay-put (make-overlay body-start body-end) 'invisible message-invis-spec)
 
+    (plist-put msg :depth depth)
+
     ;; Save the properties for this message. Currently this saves the
     ;; entire message (augmented it with other stuff), which seems
     ;; like overkill. We might save a reduced subset (for example, not
@@ -1111,6 +1159,9 @@ Some useful entries are:
 (defun notmuch-show-get-to ()
   (notmuch-show-get-header :To))
 
+(defun notmuch-show-get-depth ()
+  (notmuch-show-get-prop :depth))
+
 (defun notmuch-show-set-tags (tags)
   "Set the tags of the current message."
   (notmuch-show-set-prop :tags tags)
-- 
1.7.7.3

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

* Re: [PATCH] emacs: Improved printing support.
  2012-01-03 14:12 ` David Edmondson
@ 2012-01-16 11:30   ` David Edmondson
  2012-01-16 21:27   ` Aaron Ecay
  1 sibling, 0 replies; 11+ messages in thread
From: David Edmondson @ 2012-01-16 11:30 UTC (permalink / raw)
  To: notmuch

[-- Attachment #1: Type: text/plain, Size: 426 bytes --]

On Tue,  3 Jan 2012 14:12:26 +0000, David Edmondson <dme@dme.org> wrote:
> Add various functions to print notmuch messages and tie them together
> with a simple frontend. No keybinding is currently made to encourage
> paper saving.

Could someone review my lisp please?

bremner suggested that a default keybinding to print messages would be
appropriate. I'd like to propose '#' (for which I'll send another patch
if agreed).

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

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

* Re: [PATCH] emacs: Improved printing support.
  2012-01-03 14:12 ` David Edmondson
  2012-01-16 11:30   ` David Edmondson
@ 2012-01-16 21:27   ` Aaron Ecay
  2012-01-17  9:14     ` David Edmondson
  2012-01-18  8:00     ` David Edmondson
  1 sibling, 2 replies; 11+ messages in thread
From: Aaron Ecay @ 2012-01-16 21:27 UTC (permalink / raw)
  To: David Edmondson, notmuch

I don’t have (easy access to) a printer, so I haven’t actually exercised
the printing functionality of this patch.

In general, the patch LGTM.  Specific comments below.

On Tue,  3 Jan 2012 14:12:26 +0000, David Edmondson <dme@dme.org> wrote:
> Add various functions to print notmuch messages and tie them together
> with a simple frontend. No keybinding is currently made to encourage
> paper saving.
> ---
> 
> Fix the lack of shell quoting for muttprint. Rename the ps-print
> buffers to have a relevant name.
> 
>  emacs/Makefile.local   |    3 +-
>  emacs/notmuch-print.el |   79 ++++++++++++++++++++++++++++++++++++++++++++++++
>  emacs/notmuch-show.el  |   51 +++++++++++++++++++++++++++++++
>  3 files changed, 132 insertions(+), 1 deletions(-)
>  create mode 100644 emacs/notmuch-print.el
> 
> diff --git a/emacs/Makefile.local b/emacs/Makefile.local

[...]

> --- /dev/null
> +++ b/emacs/notmuch-print.el
> @@ -0,0 +1,79 @@
> +;; notmuch-print.el --- printing messages from notmuch.
> +;;
> +;; Copyright © David Edmondson
> +;;
> +;; This file is part of Notmuch.
> +;;
> +;; Notmuch is free software: you can redistribute it and/or modify it
> +;; under the terms of the GNU General Public License as published by
> +;; the Free Software Foundation, either version 3 of the License, or
> +;; (at your option) any later version.
> +;;
> +;; Notmuch is distributed in the hope that it will be useful, but
> +;; WITHOUT ANY WARRANTY; without even the implied warranty of
> +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +;; General Public License for more details.
> +;;
> +;; You should have received a copy of the GNU General Public License
> +;; along with Notmuch.  If not, see <http://www.gnu.org/licenses/>.
> +;;
> +;; Authors: David Edmondson <dme@dme.org>
> +
> +(defcustom notmuch-print-mechanism 'notmuch-print-lpr
> +  "How should printing be done?"
> +  :group 'notmuch
> +  :type '(choice
> +	  (function :tag "Use lpr" notmuch-print-lpr)
> +	  (function :tag "Use ps-print" notmuch-print-ps-print)
> +	  (function :tag "Use ps-print then evince" notmuch-print-ps-print/evince)
> +	  (function :tag "Use muttprint" notmuch-print-muttprint)
> +	  (function :tag "Use muttprint then evince" notmuch-print-muttprint/evince)
> +	  (function :tag "Using a custom function")))
> +
> +(defmacro notmuch-print-with-file (filename &rest body)
> +  `(with-temp-buffer
> +     (insert-file-contents ,filename)
> +     (set-buffer-modified-p nil)
> +     ,@body))
> +
> +(defun notmuch-print-lpr (filename msg)
> +  (notmuch-print-with-file filename
> +			   (lpr-buffer)))
> +
> +(defun notmuch-print-ps-print (filename msg)
> +  (let ((subject (plist-get (notmuch-show-get-prop :headers msg) :Subject)))
> +    (notmuch-print-with-file filename
> +			     (rename-buffer subject t)
> +			     (ps-print-buffer))))
> +
> +(defun notmuch-print-ps-print/evince (filename msg)
> +  (let ((ps-file (make-temp-file "notmuch"))
> +	(subject (plist-get (notmuch-show-get-prop :headers msg) :Subject)))
> +    (notmuch-print-with-file filename
> +			     (rename-buffer subject t)
> +			     (ps-print-buffer ps-file)
> +			     (async-shell-command (concat "evince " ps-file)))))
> +
> +(defun notmuch-print-muttprint (filename msg)
> +  (shell-command
> +   (concat "muttprint "
> +	   "--file " (shell-quote-argument filename) " "
> +	   ;; Show the tags.
> +	   "--printed-headers 'Date_To_From_CC_Newsgroups_*Subject*_/Tags/'")))
> +
> +(defun notmuch-print-muttprint/evince (filename msg)
> +  (let ((ps-file (make-temp-file "notmuch")))
> +    (call-process-shell-command
> +     (concat "muttprint "
> +	     "--file " (shell-quote-argument filename) " "
> +	     ;; Show the tags.
> +	     "--printed-headers 'Date_To_From_CC_Newsgroups_*Subject*_/Tags/' "
> +	     "--printer 'TO_FILE:" (shell-quote-argument ps-file) "'"))
> +    (async-shell-command (concat "evince " ps-file))))
> +
> +(defun notmuch-print-message (filename msg)
> +  (funcall notmuch-print-mechanism filename msg))
> +
> +;;

The above is just a stray comment line, right?

> +
> +(provide 'notmuch-print)
> diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
> index 5502efd..55ccfc5 100644
> --- a/emacs/notmuch-show.el
> +++ b/emacs/notmuch-show.el
> @@ -34,6 +34,7 @@
>  (require 'notmuch-wash)
>  (require 'notmuch-mua)
>  (require 'notmuch-crypto)
> +(require 'notmuch-print)
>  
>  (declare-function notmuch-call-notmuch-process "notmuch" (&rest args))
>  (declare-function notmuch-fontify-headers "notmuch" nil)
> @@ -186,6 +187,51 @@ indentation."
>        mm-handle (> (notmuch-count-attachments mm-handle) 1))))
>    (message "Done"))
>  
> +(defun notmuch-show-with-message-as-text (fn)
> +  "Apply function `fn' to a text representation of the current
> +message."

I think the docstring should say what agrs get passed to ‘fn’.  Also,
function arguments should be referred to with capital letters, and the
first line should be a complete sentence.  I’d recommend “Apply FN to
(...the rest unchanged)” for brevity in the first line.

(For anyone who is curious, these and other conventions are documented
in section D.6 of the Elisp manual.)

> +
> +  ;; Remake the header to ensure that all information is available.
> +  (let* ((to (notmuch-show-get-to))
> +	 (cc (notmuch-show-get-cc))
> +	 (from (notmuch-show-get-from))
> +	 (subject (notmuch-show-get-subject))
> +	 (date (notmuch-show-get-date))
> +	 (tags (notmuch-show-get-tags))
> +	 (depth (notmuch-show-get-depth))
> +
> +	 (header (concat
> +		  "Subject: " subject "\n"
> +		  "To: " to "\n"
> +		  (if (not (string= cc ""))
> +		      (concat "Cc: " cc "\n")
> +		    "")
> +		  "From: " from "\n"
> +		  "Date: " date "\n"
> +		  (if tags
> +		      (concat "Tags: "
> +			      (mapconcat '(lambda (tag) tag) tags ", ") "\n")

#'identity instead of the lambda

> +		    "")))
> +	 (all (buffer-substring (notmuch-show-message-top)
> +				(notmuch-show-message-bottom)))
> +
> +	 (file (make-temp-file "notmuch")))
> +    (with-temp-file file
> +      (insert all)
> +      (indent-rigidly (point-min) (point-max) (- depth))
> +      ;; Remove the original header.
> +      (goto-char (point-min))
> +      (re-search-forward "^$" (point-max) nil)
> +      (delete-region (point-min) (point))
> +      (insert header))
> +    (funcall fn file (notmuch-show-get-message-properties))
> +    (delete-file file)))

Why does this function write to a file?  It seems that, of the print
methods, two (ps-print and lpr) don’t use the file at all.  One
(ps-print/evince) creates yet another file, without depending on the
first.  The other muttprint functions do use the file.  So:
- This function would be more general if it didn’t handle file-writing
  itself, but rather let each consumer of text-ified messages handle
  that if needed.
- It would be cleaner if print backends that don’t crucially depend on
  the existence of a file didn’t create one at all.  If muttprint can
  accept a message on stdin (it looks from the source like it can; it
  gives me some error message about Iconv Perl modules when I try to run
  it, so I can’t be sure), maybe writing to a file isn’t necessary at
  all.

> +
> +(defun notmuch-show-print-message ()
> +  "Print the current message."
> +  (interactive)
> +  (notmuch-show-with-message-as-text 'notmuch-print-message))
> +
>  (defun notmuch-show-fontify-header ()
>    (let ((face (cond
>  	       ((looking-at "[Tt]o:")
> @@ -760,6 +806,8 @@ current buffer, if possible."
>        (overlay-put headers-overlay 'priority 10))
>      (overlay-put (make-overlay body-start body-end) 'invisible message-invis-spec)
>  
> +    (plist-put msg :depth depth)
> +
>      ;; Save the properties for this message. Currently this saves the
>      ;; entire message (augmented it with other stuff), which seems
>      ;; like overkill. We might save a reduced subset (for example, not
> @@ -1111,6 +1159,9 @@ Some useful entries are:
>  (defun notmuch-show-get-to ()
>    (notmuch-show-get-header :To))
>  
> +(defun notmuch-show-get-depth ()
> +  (notmuch-show-get-prop :depth))
> +
>  (defun notmuch-show-set-tags (tags)
>    "Set the tags of the current message."
>    (notmuch-show-set-prop :tags tags)
> -- 
> 1.7.7.3
> 
> _______________________________________________
> notmuch mailing list
> notmuch@notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch

-- 
Aaron Ecay

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

* Re: [PATCH] emacs: Improved printing support.
  2012-01-16 21:27   ` Aaron Ecay
@ 2012-01-17  9:14     ` David Edmondson
  2012-01-18  8:00     ` David Edmondson
  1 sibling, 0 replies; 11+ messages in thread
From: David Edmondson @ 2012-01-17  9:14 UTC (permalink / raw)
  To: Aaron Ecay; +Cc: notmuch

[-- Attachment #1: Type: text/plain, Size: 2377 bytes --]

On Mon, 16 Jan 2012 16:27:06 -0500, Aaron Ecay <aaronecay@gmail.com> wrote:
> > +;;
> 
> The above is just a stray comment line, right?

I tend to use them as spacers, but, sure.

> > +(defun notmuch-show-with-message-as-text (fn)
> > +  "Apply function `fn' to a text representation of the current
> > +message."
> 
> I think the docstring should say what agrs get passed to ‘fn’.  Also,
> function arguments should be referred to with capital letters, and the
> first line should be a complete sentence.  I’d recommend “Apply FN to
> (...the rest unchanged)” for brevity in the first line.
> 
> (For anyone who is curious, these and other conventions are documented
> in section D.6 of the Elisp manual.)

Will fix.
> > +		      (concat "Tags: "
> > +			      (mapconcat '(lambda (tag) tag) tags ", ") "\n")
> 
> #'identity instead of the lambda

/me slaps head. What was I thinking?

> > +	 (all (buffer-substring (notmuch-show-message-top)
> > +				(notmuch-show-message-bottom)))
> > +
> > +	 (file (make-temp-file "notmuch")))
> > +    (with-temp-file file
> > +      (insert all)
> > +      (indent-rigidly (point-min) (point-max) (- depth))
> > +      ;; Remove the original header.
> > +      (goto-char (point-min))
> > +      (re-search-forward "^$" (point-max) nil)
> > +      (delete-region (point-min) (point))
> > +      (insert header))
> > +    (funcall fn file (notmuch-show-get-message-properties))
> > +    (delete-file file)))
> 
> Why does this function write to a file?  It seems that, of the print
> methods, two (ps-print and lpr) don’t use the file at all.  One
> (ps-print/evince) creates yet another file, without depending on the
> first.  The other muttprint functions do use the file.  So:
> - This function would be more general if it didn’t handle file-writing
>   itself, but rather let each consumer of text-ified messages handle
>   that if needed.
> - It would be cleaner if print backends that don’t crucially depend on
>   the existence of a file didn’t create one at all.  If muttprint can
>   accept a message on stdin (it looks from the source like it can; it
>   gives me some error message about Iconv Perl modules when I try to run
>   it, so I can’t be sure), maybe writing to a file isn’t necessary at
>   all.

I'll rework it, thanks for the review!

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

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

* [PATCH] emacs: Improved printing support.
  2012-01-16 21:27   ` Aaron Ecay
  2012-01-17  9:14     ` David Edmondson
@ 2012-01-18  8:00     ` David Edmondson
  2012-01-18  8:49       ` Aaron Ecay
  2012-01-21 13:14       ` David Bremner
  1 sibling, 2 replies; 11+ messages in thread
From: David Edmondson @ 2012-01-18  8:00 UTC (permalink / raw)
  To: notmuch

Add various functions to print notmuch messages and tie them together
with a simple frontend.

Add a binding ('#') in `notmuch-show-mode' to print the current
message.
---

Updates based on Aaron's review - the comments were very useful in
improving things - thanks!

Add a keybinding to `notmuch-show-mode'.

 emacs/Makefile.local   |    3 +-
 emacs/notmuch-print.el |   85 ++++++++++++++++++++++++++++++++++++++++++++++++
 emacs/notmuch-show.el  |   53 ++++++++++++++++++++++++++++++
 3 files changed, 140 insertions(+), 1 deletions(-)
 create mode 100644 emacs/notmuch-print.el

diff --git a/emacs/Makefile.local b/emacs/Makefile.local
index 0c58b82..4fee0e8 100644
--- a/emacs/Makefile.local
+++ b/emacs/Makefile.local
@@ -13,7 +13,8 @@ emacs_sources := \
 	$(dir)/notmuch-maildir-fcc.el \
 	$(dir)/notmuch-message.el \
 	$(dir)/notmuch-crypto.el \
-	$(dir)/coolj.el
+	$(dir)/coolj.el \
+	$(dir)/notmuch-print.el
 
 emacs_images := \
 	$(srcdir)/$(dir)/notmuch-logo.png
diff --git a/emacs/notmuch-print.el b/emacs/notmuch-print.el
new file mode 100644
index 0000000..77f10bb
--- /dev/null
+++ b/emacs/notmuch-print.el
@@ -0,0 +1,85 @@
+;; notmuch-print.el --- printing messages from notmuch.
+;;
+;; Copyright © David Edmondson
+;;
+;; This file is part of Notmuch.
+;;
+;; Notmuch is free software: you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; Notmuch is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with Notmuch.  If not, see <http://www.gnu.org/licenses/>.
+;;
+;; Authors: David Edmondson <dme@dme.org>
+
+(defcustom notmuch-print-mechanism 'notmuch-print-lpr
+  "How should printing be done?"
+  :group 'notmuch
+  :type '(choice
+	  (function :tag "Use lpr" notmuch-print-lpr)
+	  (function :tag "Use ps-print" notmuch-print-ps-print)
+	  (function :tag "Use ps-print then evince" notmuch-print-ps-print/evince)
+	  (function :tag "Use muttprint" notmuch-print-muttprint)
+	  (function :tag "Use muttprint then evince" notmuch-print-muttprint/evince)
+	  (function :tag "Using a custom function")))
+
+;; Utility functions:
+
+(defun notmuch-print-run-evince (file)
+  "View FILE using 'evince'."
+  (start-process "evince" nil "evince" file))
+
+(defun notmuch-print-run-muttprint (&optional output)
+  "Pass the contents of the current buffer to 'muttprint'.
+
+Optional OUTPUT allows passing a list of flags to muttprint."
+  (apply #'call-process-region (point-min) (point-max)
+	 ;; Reads from stdin.
+	 "muttprint"
+	 nil nil nil
+	 ;; Show the tags.
+	 "--printed-headers" "Date_To_From_CC_Newsgroups_*Subject*_/Tags/"
+	 output))
+
+;; User-visible functions:
+
+(defun notmuch-print-lpr (msg)
+  "Print a message buffer using lpr."
+  (lpr-buffer))
+
+(defun notmuch-print-ps-print (msg)
+  "Print a message buffer using the ps-print package."
+  (let ((subject (plist-get (notmuch-show-get-prop :headers msg) :Subject)))
+    (rename-buffer subject t)
+    (ps-print-buffer)))
+
+(defun notmuch-print-ps-print/evince (msg)
+  "Preview a message buffer using ps-print and evince."
+  (let ((ps-file (make-temp-file "notmuch"))
+	(subject (plist-get (notmuch-show-get-prop :headers msg) :Subject)))
+    (rename-buffer subject t)
+    (ps-print-buffer ps-file)
+    (notmuch-print-run-evince ps-file)))
+
+(defun notmuch-print-muttprint (msg)
+  "Print a message using muttprint."
+  (notmuch-print-run-muttprint))
+ 
+(defun notmuch-print-muttprint/evince (msg)
+  "Preview a message buffer using muttprint and evince."
+  (let ((ps-file (make-temp-file "notmuch")))
+    (notmuch-print-run-muttprint (list "--printer" (concat "TO_FILE:" ps-file)))
+    (notmuch-print-run-evince ps-file)))
+
+(defun notmuch-print-message (msg)
+  "Print a message using the user-selected mechanism."
+  (funcall notmuch-print-mechanism msg))
+
+(provide 'notmuch-print)
diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
index 797f94b..db25565 100644
--- a/emacs/notmuch-show.el
+++ b/emacs/notmuch-show.el
@@ -34,6 +34,7 @@
 (require 'notmuch-wash)
 (require 'notmuch-mua)
 (require 'notmuch-crypto)
+(require 'notmuch-print)
 
 (declare-function notmuch-call-notmuch-process "notmuch" (&rest args))
 (declare-function notmuch-fontify-headers "notmuch" nil)
@@ -186,6 +187,52 @@ indentation."
       mm-handle (> (notmuch-count-attachments mm-handle) 1))))
   (message "Done"))
 
+(defun notmuch-show-with-message-as-text (fn)
+  "Apply FN to a text representation of the current message.
+
+FN is called with one argument, the message properties. It should
+operation on the contents of the current buffer."
+
+  ;; Remake the header to ensure that all information is available.
+  (let* ((to (notmuch-show-get-to))
+	 (cc (notmuch-show-get-cc))
+	 (from (notmuch-show-get-from))
+	 (subject (notmuch-show-get-subject))
+	 (date (notmuch-show-get-date))
+	 (tags (notmuch-show-get-tags))
+	 (depth (notmuch-show-get-depth))
+
+	 (header (concat
+		  "Subject: " subject "\n"
+		  "To: " to "\n"
+		  (if (not (string= cc ""))
+		      (concat "Cc: " cc "\n")
+		    "")
+		  "From: " from "\n"
+		  "Date: " date "\n"
+		  (if tags
+		      (concat "Tags: "
+			      (mapconcat #'identity tags ", ") "\n")
+		    "")))
+	 (all (buffer-substring (notmuch-show-message-top)
+				(notmuch-show-message-bottom)))
+
+	 (props (notmuch-show-get-message-properties)))
+    (with-temp-buffer
+      (insert all)
+      (indent-rigidly (point-min) (point-max) (- depth))
+      ;; Remove the original header.
+      (goto-char (point-min))
+      (re-search-forward "^$" (point-max) nil)
+      (delete-region (point-min) (point))
+      (insert header)
+      (funcall fn props))))
+
+(defun notmuch-show-print-message ()
+  "Print the current message."
+  (interactive)
+  (notmuch-show-with-message-as-text 'notmuch-print-message))
+
 (defun notmuch-show-fontify-header ()
   (let ((face (cond
 	       ((looking-at "[Tt]o:")
@@ -757,6 +804,8 @@ current buffer, if possible."
       (overlay-put headers-overlay 'priority 10))
     (overlay-put (make-overlay body-start body-end) 'invisible message-invis-spec)
 
+    (plist-put msg :depth depth)
+
     ;; Save the properties for this message. Currently this saves the
     ;; entire message (augmented it with other stuff), which seems
     ;; like overkill. We might save a reduced subset (for example, not
@@ -947,6 +996,7 @@ thread id.  If a prefix is given, crypto processing is toggled."
 	(define-key map " " 'notmuch-show-advance-and-archive)
 	(define-key map (kbd "M-RET") 'notmuch-show-open-or-close-all)
 	(define-key map (kbd "RET") 'notmuch-show-toggle-message)
+	(define-key map "#" 'notmuch-show-print-message)
 	map)
       "Keymap for \"notmuch show\" buffers.")
 (fset 'notmuch-show-mode-map notmuch-show-mode-map)
@@ -1107,6 +1157,9 @@ Some useful entries are:
 (defun notmuch-show-get-to ()
   (notmuch-show-get-header :To))
 
+(defun notmuch-show-get-depth ()
+  (notmuch-show-get-prop :depth))
+
 (defun notmuch-show-set-tags (tags)
   "Set the tags of the current message."
   (notmuch-show-set-prop :tags tags)
-- 
1.7.7.3

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

* Re: [PATCH] emacs: Improved printing support.
  2012-01-18  8:00     ` David Edmondson
@ 2012-01-18  8:49       ` Aaron Ecay
  2012-01-21 13:14       ` David Bremner
  1 sibling, 0 replies; 11+ messages in thread
From: Aaron Ecay @ 2012-01-18  8:49 UTC (permalink / raw)
  To: David Edmondson, notmuch

On Wed, 18 Jan 2012 08:00:21 +0000, David Edmondson <dme@dme.org> wrote:
> Add various functions to print notmuch messages and tie them together
> with a simple frontend.
> 
> Add a binding ('#') in `notmuch-show-mode' to print the current
> message.
> ---
> 
> Updates based on Aaron's review - the comments were very useful in
> improving things - thanks!

You’re welcome!  The patch LGTM.

-- 
Aaron Ecay

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

* Re: [PATCH] emacs: Improved printing support.
  2012-01-18  8:00     ` David Edmondson
  2012-01-18  8:49       ` Aaron Ecay
@ 2012-01-21 13:14       ` David Bremner
  1 sibling, 0 replies; 11+ messages in thread
From: David Bremner @ 2012-01-21 13:14 UTC (permalink / raw)
  To: David Edmondson, notmuch

On Wed, 18 Jan 2012 08:00:21 +0000, David Edmondson <dme@dme.org> wrote:
> Add various functions to print notmuch messages and tie them together
> with a simple frontend.

pushed, with one whitespace correction,

d

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

end of thread, other threads:[~2012-01-21 13:14 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-12-30 10:28 [PATCH] emacs: Improved printing support David Edmondson
2011-12-31 19:15 ` David Bremner
2012-01-03 11:37   ` David Edmondson
2012-01-03 14:12 ` David Edmondson
2012-01-16 11:30   ` David Edmondson
2012-01-16 21:27   ` Aaron Ecay
2012-01-17  9:14     ` David Edmondson
2012-01-18  8:00     ` David Edmondson
2012-01-18  8:49       ` Aaron Ecay
2012-01-21 13:14       ` David Bremner
  -- strict thread matches above, loose matches on Subject: below --
2010-11-11 12:57 Printing mail David Edmondson
2010-11-12 12:53 ` [PATCH] emacs: Improved printing support David Edmondson

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).