Re: [PATCH] emacs: add stash support for git send-email command line

2014-10-30 Thread David Edmondson
On Wed, Oct 29 2014, Jani Nikula wrote:
 +(defun notmuch-show-stash-git-send-email ()
 +  Copy From/To/Cc/Message-Id of current message to kill-ring in a form 
 suitable for pasting to git send-email command line.
 +  (interactive)
 +  (notmuch-common-do-stash
 +   (concat
 +(notmuch-show-stash-git-helper (message-tokenize-header 
 (notmuch-show-get-from)) --to=)
 +(notmuch-show-stash-git-helper (message-tokenize-header 
 (notmuch-show-get-to)) --to=)
 +(notmuch-show-stash-git-helper (message-tokenize-header 
 (notmuch-show-get-cc)) --cc=)
 +(concat --in-reply-to=\ (notmuch-show-get-message-id t) \

 ...this would have to use something like:

   (mapconcat 'identity (list
  (notmuch-show-stash-git-helper (message-tokenize-header 
 (notmuch-show-get-from)) --to=)
  (notmuch-show-stash-git-helper (message-tokenize-header 
 (notmuch-show-get-to)) --to=)
  (notmuch-show-stash-git-helper (message-tokenize-header 
 (notmuch-show-get-cc)) --cc=)
  (concat --in-reply-to=\ (notmuch-show-get-message-id 
 t) \))
   )

 to separate the chunks (untested).

 The last  has to be   to separate the elements,

Of course.

 but this brings another small wrinkle: if one of the headers is
 missing, typically Cc:, it will be nil in the list, and mapconcat adds
 spaces both sides of that, i.e. double space. Any ideas how to fix
 that?

I suppose a collecting loop would do it.

 Do the leading and trailing spaces really matter?

 Does aesthetically displeasing count? Because message-tokenize-header
 splits using , but headers typically have ,  between addresses, the
 end result will practically always have --to= u...@example.com without
 the trimming.

The trimming is fine, really.
___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch


Re: [PATCH] emacs: add stash support for git send-email command line

2014-10-29 Thread Tomi Ollila
On Wed, Oct 29 2014, David Edmondson d...@dme.org wrote:

 [lines dropped -- no way to open ;)]
 space. Maybe that's because you need it in the following function to
 separate the from/to/cc elements? That kind of interaction between the
 two functions is icky.
 [lines dropped -- no way to open ;)]
 to separate the chunks (untested).
 [lines dropped -- no way to open ;)]

 (Domo: Look, I managed to write 'separate', twice!)

:D

Tomi


 +
  ;; Interactive part functions and their helpers
  
  (defun notmuch-show-generate-part-buffer (message-id nth)
 -- 
 2.1.1
___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch


Re: [PATCH] emacs: add stash support for git send-email command line

2014-10-29 Thread Jani Nikula
On Wed, 29 Oct 2014, David Edmondson d...@dme.org wrote:
 On Tue, Oct 28 2014, Jani Nikula wrote:
 Stash From/To/Cc as --to/--to/--cc, respectively, and Message-Id as
 --in-reply-to, suitable for pasting to git send-email command line.
 ---
  emacs/notmuch-show.el | 25 +
  1 file changed, 25 insertions(+)

 diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
 index a9974826e824..328c93ba0584 100644
 --- a/emacs/notmuch-show.el
 +++ b/emacs/notmuch-show.el
 @@ -1274,6 +1274,7 @@ reset based on the original query.
  (define-key map t 'notmuch-show-stash-to)
  (define-key map l 'notmuch-show-stash-mlarchive-link)
  (define-key map L 'notmuch-show-stash-mlarchive-link-and-go)
 +(define-key map G 'notmuch-show-stash-git-send-email)
  (define-key map ? 'notmuch-subkeymap-help)
  map)
Submap for stash commands)
 @@ -2125,6 +2126,30 @@ the user (see 
 `notmuch-show-stash-mlarchive-link-alist').
(notmuch-show-stash-mlarchive-link mla)
(browse-url (current-kill 0 t)))
  
 +(defun notmuch-show-stash-git-helper (addresses prefix)
 +  Escape, trim, and add PREFIX to each address in list of ADDRESSES.
 +  (when addresses
 +(mapconcat (lambda (x)
 + (concat prefix \
 + ;; escape double-quotes
 + (replace-regexp-in-string
 +  \ \
 +  ;; trim leading and trailing spaces
 +  (replace-regexp-in-string
 +   \\(^ *\\| *$\\) 
 +   x)) \ ))
 +   addresses )))

 This doesn't seem quite right. You leave a spurious trailing
 space. Maybe that's because you need it in the following function to
 separate the from/to/cc elements? That kind of interaction between the
 two functions is icky.

Agreed, thanks for pointing it out.

 There's no need to test `addresses' at the head of the list - mapconcat
 is fine with nil.

 How about:

 (defun notmuch-show-stash-git-helper (addresses prefix)
   Escape, trim, and add PREFIX to each address in list of ADDRESSES.
   (mapconcat (lambda (x)
  (concat prefix \
  ;; escape double-quotes
  (replace-regexp-in-string
   \ \
   ;; trim leading and trailing spaces
   (replace-regexp-in-string
\\(^ *\\| *$\\) 
x)) \))
addresses  ))

 This would remove the trailing space, so...

 +
 +(defun notmuch-show-stash-git-send-email ()
 +  Copy From/To/Cc/Message-Id of current message to kill-ring in a form 
 suitable for pasting to git send-email command line.
 +  (interactive)
 +  (notmuch-common-do-stash
 +   (concat
 +(notmuch-show-stash-git-helper (message-tokenize-header 
 (notmuch-show-get-from)) --to=)
 +(notmuch-show-stash-git-helper (message-tokenize-header 
 (notmuch-show-get-to)) --to=)
 +(notmuch-show-stash-git-helper (message-tokenize-header 
 (notmuch-show-get-cc)) --cc=)
 +(concat --in-reply-to=\ (notmuch-show-get-message-id t) \

 ...this would have to use something like:

   (mapconcat 'identity (list
   (notmuch-show-stash-git-helper (message-tokenize-header 
 (notmuch-show-get-from)) --to=)
   (notmuch-show-stash-git-helper (message-tokenize-header 
 (notmuch-show-get-to)) --to=)
   (notmuch-show-stash-git-helper (message-tokenize-header 
 (notmuch-show-get-cc)) --cc=)
   (concat --in-reply-to=\ (notmuch-show-get-message-id 
 t) \))
)

 to separate the chunks (untested).

The last  has to be   to separate the elements, but this brings
another small wrinkle: if one of the headers is missing, typically Cc:,
it will be nil in the list, and mapconcat adds spaces both sides of
that, i.e. double space. Any ideas how to fix that?

 Could you avoid the double-quote quoting by using single quotes inside
 the strings?

The addresses may contain both single quotes and double quotes, so
escaping either of them seems like the only option.

 Do the leading and trailing spaces really matter?

Does aesthetically displeasing count? Because message-tokenize-header
splits using , but headers typically have ,  between addresses, the
end result will practically always have --to= u...@example.com without
the trimming.

Thanks for the helpful review; I'm not much of a lisp coder...

BR,
Jani.



 (Domo: Look, I managed to write 'separate', twice!)

 +
  ;; Interactive part functions and their helpers
  
  (defun notmuch-show-generate-part-buffer (message-id nth)
 -- 
 2.1.1

 ___
 notmuch mailing list
 notmuch@notmuchmail.org
 http://notmuchmail.org/mailman/listinfo/notmuch
___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch