[PATCH] emacs: use the originating buffer's working directory for pipe

2014-03-01 Thread Jani Nikula
Currently notmuch-show-pipe-message runs the command in the working
directory of the *notmuch-pipe* buffer if it exists, and the current
buffer's working directory (which is inherited to the new
*notmuch-pipe* buffer) otherwise. This is all very surprising to the
user, and it's difficult to know or change where the command will be
run.

Always use the current show buffer's working directory for piping. The
user can check that with M-x pwd and change it with M-x cd. This is
consistent with notmuch-show-pipe-part.

---

Mark also suggested printing the working directory in the prompt for
the command to pipe to, but when I tried it I thought the prompt
became too crowded with that. It's also less important now that the
current buffer's working directory is used consistently.
---
 emacs/notmuch-show.el | 6 +-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
index 88752f171930..b8782ddb632e 100644
--- a/emacs/notmuch-show.el
+++ b/emacs/notmuch-show.el
@@ -1781,10 +1781,14 @@ message."
   (setq shell-command
(concat notmuch-command " show --format=raw "
(shell-quote-argument (notmuch-show-get-message-id)) " | " 
command)))
-(let ((buf (get-buffer-create (concat "*notmuch-pipe*"
+(let ((cwd default-directory)
+ (buf (get-buffer-create (concat "*notmuch-pipe*"
   (with-current-buffer buf
(setq buffer-read-only nil)
(erase-buffer)
+   ;; Use the originating buffer's working directory instead of
+   ;; that of the pipe buffer.
+   (cd cwd)
(let ((exit-code (call-process-shell-command shell-command nil buf)))
  (goto-char (point-max))
  (set-buffer-modified-p nil)
-- 
1.8.5.3



[DRAFT PATCH] notmuch new: do not ignore '.notmuch' in non-toplevel directories

2014-03-01 Thread Rob Browning
Mark Walters  writes:

> An alternative would be to ignore any .notmuch path with a xapian
> sub-directory. This would mean if a user indexed some subset of their
> mail before trying to index the whole thing they wouldn't accidentally
> index the old xapian database. 

If you wanted to be fairly careful, perhaps test for
exists(".notmuch/.xapian/flintlock" or ".notmuch/.xapian/iamchert"), or
some other very specific test.

> I think the above was suggested by rlb on irc but I don't think it got
> any reply. 

Not sure.  Though I'm wondering if I may have suggested we could add a
notmuch specific token file, i.e. .notmuch/this-really-is-a-notmuch-dir,
which lead to someone else suggesting we could just use .xapian.

Of course broadly speaking, ".xapian" might be a legitimate maildir too,
but ".notmuch/.xapian" seems fairly unlikely.

In any case, while I might prefer a very narrow test (as long as it
wasn't unduly expensive), all of the proposed solutions would have
handled my situation.

Thanks
-- 
Rob Browning
rlb @defaultvalue.org and @debian.org
GPG as of 2011-07-10 E6A9 DA3C C9FD 1FF8 C676 D2C4 C0F0 39E9 ED1B 597A
GPG as of 2002-11-03 14DD 432F AE39 534D B592 F9A0 25C8 D377 8C7E 73A4


[DRAFT PATCH] notmuch new: do not ignore '.notmuch' in non-toplevel directories

2014-03-01 Thread Mark Walters

An alternative would be to ignore any .notmuch path with a xapian
sub-directory. This would mean if a user indexed some subset of their
mail before trying to index the whole thing they wouldn't accidentally
index the old xapian database. 

Alternatively we could just view the above as user error. (If a user
wanted to have an index for a sub-directory they would have to use
excludes to exclude that index from the full-directory index).

Best wishes

Mark

I think the above was suggested by rlb on irc but I don't think it got
any reply. 



On Sun, 23 Feb 2014, Jani Nikula  wrote:
> On Sun, 23 Feb 2014, Tomi Ollila  wrote:
>> So that users may have email in subdir/.notmuch directories.
>> ---
>>
>> Compiles, current tests pass. might ignore database_path/.notmuch and
>> might descent into database_path/.../.notmuch :D
>>
>> Tomi
>>
>>
>>  notmuch-new.c | 18 ++
>>  1 file changed, 10 insertions(+), 8 deletions(-)
>>
>> diff --git a/notmuch-new.c b/notmuch-new.c
>> index 8529fdd..b17bd75 100644
>> --- a/notmuch-new.c
>> +++ b/notmuch-new.c
>> @@ -344,7 +344,8 @@ add_file (notmuch_database_t *notmuch, const char 
>> *filename,
>>  static notmuch_status_t
>>  add_files (notmuch_database_t *notmuch,
>> const char *path,
>> -   add_files_state_t *state)
>> +   add_files_state_t *state,
>> +   int dirlevel)
>
> I think this is ugly and makes the interface harder to use for indexing
> arbitrary paths.
>
> Instead, I suggest
>
> diff --git a/notmuch-new.c b/notmuch-new.c
> index 8529fdd3eac7..20bc33fca4bd 100644
> --- a/notmuch-new.c
> +++ b/notmuch-new.c
> @@ -469,7 +469,8 @@ add_files (notmuch_database_t *notmuch,
>   if (strcmp (entry->d_name, ".") == 0 ||
>   strcmp (entry->d_name, "..") == 0 ||
>   (is_maildir && strcmp (entry->d_name, "tmp") == 0) ||
> - strcmp (entry->d_name, ".notmuch") == 0)
> + (strcmp (entry->d_name, ".notmuch") == 0 &&
> +  strcmp (path, notmuch_database_get_path (notmuch)) == 0))
>   continue;
>  
>   next = talloc_asprintf (notmuch, "%s/%s", path, entry->d_name);
>
> And similarly in count_files(), with the root db path passed as first
> argument (as the db is not open yet).
>
>
> BR,
> Jani.
>
>
>
>>  {
>>  DIR *dir = NULL;
>>  struct dirent *entry = NULL;
>> @@ -469,11 +470,11 @@ add_files (notmuch_database_t *notmuch,
>>  if (strcmp (entry->d_name, ".") == 0 ||
>>  strcmp (entry->d_name, "..") == 0 ||
>>  (is_maildir && strcmp (entry->d_name, "tmp") == 0) ||
>> -strcmp (entry->d_name, ".notmuch") == 0)
>> +(dirlevel == 0 && strcmp (entry->d_name, ".notmuch") == 0))
>>  continue;
>>  
>>  next = talloc_asprintf (notmuch, "%s/%s", path, entry->d_name);
>> -status = add_files (notmuch, next, state);
>> +status = add_files (notmuch, next, state, dirlevel + 1);
>>  if (status) {
>>  ret = status;
>>  goto DONE;
>> @@ -702,7 +703,8 @@ stop_progress_printing_timer (void)
>>   * initialized to zero by the top-level caller before calling
>>   * count_files). */
>>  static void
>> -count_files (const char *path, int *count, add_files_state_t *state)
>> +count_files (const char *path, int *count, add_files_state_t *state,
>> + int dirlevel)
>>  {
>>  struct dirent *entry = NULL;
>>  char *next;
>> @@ -725,7 +727,7 @@ count_files (const char *path, int *count, 
>> add_files_state_t *state)
>>   */
>>  if (strcmp (entry->d_name, ".") == 0 ||
>>  strcmp (entry->d_name, "..") == 0 ||
>> -strcmp (entry->d_name, ".notmuch") == 0 ||
>> +(dirlevel == 0 && strcmp (entry->d_name, ".notmuch") == 0) ||
>>  _entry_in_ignore_list (entry->d_name, state))
>>  {
>>  if (state->debug && _entry_in_ignore_list (entry->d_name, state))
>> @@ -750,7 +752,7 @@ count_files (const char *path, int *count, 
>> add_files_state_t *state)
>>  fflush (stdout);
>>  }
>>  } else if (entry_type == S_IFDIR) {
>> -count_files (next, count, state);
>> +count_files (next, count, state, dirlevel + 1);
>>  }
>>  
>>  free (next);
>> @@ -962,7 +964,7 @@ notmuch_new_command (notmuch_config_t *config, int argc, 
>> char *argv[])
>>  int count;
>>  
>>  count = 0;
>> -count_files (db_path, , _files_state);
>> +count_files (db_path, , _files_state, 0);
>>  if (interrupted)
>>  return EXIT_FAILURE;
>>  
>> @@ -1021,7 +1023,7 @@ notmuch_new_command (notmuch_config_t *config, int 
>> argc, char *argv[])
>>  timer_is_active = TRUE;
>>  }
>>  
>> -ret = add_files (notmuch, db_path, _files_state);
>> +ret = add_files (notmuch, db_path, _files_state, 0);
>>  if (ret)
>>  goto DONE;
>>  
>> -- 
>> 1.8.4.2
>>
>> ___
>> notmuch mailing list
>> notmuch at notmuchmail.org
>> http://notmuchmail.org/mailman/listinfo/notmuch
> 

[PATCH v2] emacs: Simplify and fix `notmuch-mua-prompt-for-sender'

2014-03-01 Thread Mark Walters

This version is fine (thanks!). And the patch looks good to me too +1.

Best wishes

Mark


On Thu, 27 Feb 2014, Austin Clements  wrote:
> `notmuch-mua-prompt-for-sender' is over-engineered and often wrong.
> It attempts to detect when all identities have the same name and
> specialize the prompt to just the email address part.  However, to do
> this it uses `mail-extract-address-components', which is meant for
> displaying email addresses, not general-purpose parsing, and hence
> performs many canonicalizations that can interfere with this use.  For
> example, configuring notmuch-identities to ("Austin
> "), will cause `notmuch-mua-prompt-for-sender' to
> lose the name part entirely and return " ".
>
> This patch rewrites `notmuch-mua-prompt-for-sender' to simply prompt
> for a full identity when notmuch-identities is configured, or to
> prompt for a sender address when it isn't.
>
> The original code also did several strange things, like using `eval'
> and specifying that this function was interactive.  As a side-effect,
> this patch fixes these problems.  And it adds a docstring.
> ---
>
> Mark, is this better?
>
> emacs/notmuch-mua.el | 37 +
>  1 file changed, 13 insertions(+), 24 deletions(-)
>
> diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el
> index f2df770..b16a10e 100644
> --- a/emacs/notmuch-mua.el
> +++ b/emacs/notmuch-mua.el
> @@ -286,30 +286,19 @@ the From: header is already filled in by notmuch."
>(ad-activate 'ido-completing-read)))
>  
>  (defun notmuch-mua-prompt-for-sender ()
> -  (interactive)
> -  (let (name addresses one-name-only)
> -;; If notmuch-identities is non-nil, check if there is a fixed user name.
> -(if notmuch-identities
> - (let ((components (mapcar 'mail-extract-address-components 
> notmuch-identities)))
> -   (setq name  (caar components)
> - addresses (mapcar 'cadr components)
> - one-name-only (eval
> -(cons 'and
> -  (mapcar (lambda (identity)
> -(string-equal name (car 
> identity)))
> -  components)
> -  ;; If notmuch-identities is nil, use values from the notmuch 
> configuration file.
> -  (setq name  (notmuch-user-name)
> - addresses (cons (notmuch-user-primary-email) 
> (notmuch-user-other-email))
> - one-name-only t))
> -;; Now prompt the user, either for an email address only or for a full 
> identity.
> -(if one-name-only
> - (let ((address
> -(ido-completing-read (concat "Sender address for " name ": ") 
> addresses
> - nil nil nil 'notmuch-mua-sender-history 
> (car addresses
> -   (concat name " <" address ">"))
> -  (ido-completing-read "Send mail From: " notmuch-identities
> -nil nil nil 'notmuch-mua-sender-history (car 
> notmuch-identities)
> +  "Prompt for a sender from the user's configured identities."
> +  (if notmuch-identities
> +  (ido-completing-read "Send mail from: " notmuch-identities
> +nil nil nil 'notmuch-mua-sender-history
> +(car notmuch-identities))
> +(let* ((name (notmuch-user-name))
> +(addrs (cons (notmuch-user-primary-email)
> + (notmuch-user-other-email)))
> +(address
> + (ido-completing-read (concat "Sender address for " name ": ") addrs
> +  nil nil nil 'notmuch-mua-sender-history
> +  (car addrs
> +  (concat name " <" address ">"
>  
>  (put 'notmuch-mua-new-mail 'notmuch-prefix-doc "... and prompt for sender")
>  (defun notmuch-mua-new-mail ( prompt-for-sender)
> -- 
> 1.8.4.rc3


Re: [PATCH v2] emacs: Simplify and fix `notmuch-mua-prompt-for-sender'

2014-03-01 Thread Mark Walters

This version is fine (thanks!). And the patch looks good to me too +1.

Best wishes

Mark


On Thu, 27 Feb 2014, Austin Clements amdra...@mit.edu wrote:
 `notmuch-mua-prompt-for-sender' is over-engineered and often wrong.
 It attempts to detect when all identities have the same name and
 specialize the prompt to just the email address part.  However, to do
 this it uses `mail-extract-address-components', which is meant for
 displaying email addresses, not general-purpose parsing, and hence
 performs many canonicalizations that can interfere with this use.  For
 example, configuring notmuch-identities to (Austin
 aus...@example.com), will cause `notmuch-mua-prompt-for-sender' to
 lose the name part entirely and return  aus...@example.com.

 This patch rewrites `notmuch-mua-prompt-for-sender' to simply prompt
 for a full identity when notmuch-identities is configured, or to
 prompt for a sender address when it isn't.

 The original code also did several strange things, like using `eval'
 and specifying that this function was interactive.  As a side-effect,
 this patch fixes these problems.  And it adds a docstring.
 ---

 Mark, is this better?

 emacs/notmuch-mua.el | 37 +
  1 file changed, 13 insertions(+), 24 deletions(-)

 diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el
 index f2df770..b16a10e 100644
 --- a/emacs/notmuch-mua.el
 +++ b/emacs/notmuch-mua.el
 @@ -286,30 +286,19 @@ the From: header is already filled in by notmuch.
(ad-activate 'ido-completing-read)))
  
  (defun notmuch-mua-prompt-for-sender ()
 -  (interactive)
 -  (let (name addresses one-name-only)
 -;; If notmuch-identities is non-nil, check if there is a fixed user name.
 -(if notmuch-identities
 - (let ((components (mapcar 'mail-extract-address-components 
 notmuch-identities)))
 -   (setq name  (caar components)
 - addresses (mapcar 'cadr components)
 - one-name-only (eval
 -(cons 'and
 -  (mapcar (lambda (identity)
 -(string-equal name (car 
 identity)))
 -  components)
 -  ;; If notmuch-identities is nil, use values from the notmuch 
 configuration file.
 -  (setq name  (notmuch-user-name)
 - addresses (cons (notmuch-user-primary-email) 
 (notmuch-user-other-email))
 - one-name-only t))
 -;; Now prompt the user, either for an email address only or for a full 
 identity.
 -(if one-name-only
 - (let ((address
 -(ido-completing-read (concat Sender address for  name : ) 
 addresses
 - nil nil nil 'notmuch-mua-sender-history 
 (car addresses
 -   (concat name   address ))
 -  (ido-completing-read Send mail From:  notmuch-identities
 -nil nil nil 'notmuch-mua-sender-history (car 
 notmuch-identities)
 +  Prompt for a sender from the user's configured identities.
 +  (if notmuch-identities
 +  (ido-completing-read Send mail from:  notmuch-identities
 +nil nil nil 'notmuch-mua-sender-history
 +(car notmuch-identities))
 +(let* ((name (notmuch-user-name))
 +(addrs (cons (notmuch-user-primary-email)
 + (notmuch-user-other-email)))
 +(address
 + (ido-completing-read (concat Sender address for  name : ) addrs
 +  nil nil nil 'notmuch-mua-sender-history
 +  (car addrs
 +  (concat name   address 
  
  (put 'notmuch-mua-new-mail 'notmuch-prefix-doc ... and prompt for sender)
  (defun notmuch-mua-new-mail (optional prompt-for-sender)
 -- 
 1.8.4.rc3
___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch


Re: [DRAFT PATCH] notmuch new: do not ignore '.notmuch' in non-toplevel directories

2014-03-01 Thread Mark Walters

An alternative would be to ignore any .notmuch path with a xapian
sub-directory. This would mean if a user indexed some subset of their
mail before trying to index the whole thing they wouldn't accidentally
index the old xapian database. 

Alternatively we could just view the above as user error. (If a user
wanted to have an index for a sub-directory they would have to use
excludes to exclude that index from the full-directory index).

Best wishes

Mark

I think the above was suggested by rlb on irc but I don't think it got
any reply. 



On Sun, 23 Feb 2014, Jani Nikula j...@nikula.org wrote:
 On Sun, 23 Feb 2014, Tomi Ollila tomi.oll...@iki.fi wrote:
 So that users may have email in subdir/.notmuch directories.
 ---

 Compiles, current tests pass. might ignore database_path/.notmuch and
 might descent into database_path/.../.notmuch :D

 Tomi


  notmuch-new.c | 18 ++
  1 file changed, 10 insertions(+), 8 deletions(-)

 diff --git a/notmuch-new.c b/notmuch-new.c
 index 8529fdd..b17bd75 100644
 --- a/notmuch-new.c
 +++ b/notmuch-new.c
 @@ -344,7 +344,8 @@ add_file (notmuch_database_t *notmuch, const char 
 *filename,
  static notmuch_status_t
  add_files (notmuch_database_t *notmuch,
 const char *path,
 -   add_files_state_t *state)
 +   add_files_state_t *state,
 +   int dirlevel)

 I think this is ugly and makes the interface harder to use for indexing
 arbitrary paths.

 Instead, I suggest

 diff --git a/notmuch-new.c b/notmuch-new.c
 index 8529fdd3eac7..20bc33fca4bd 100644
 --- a/notmuch-new.c
 +++ b/notmuch-new.c
 @@ -469,7 +469,8 @@ add_files (notmuch_database_t *notmuch,
   if (strcmp (entry-d_name, .) == 0 ||
   strcmp (entry-d_name, ..) == 0 ||
   (is_maildir  strcmp (entry-d_name, tmp) == 0) ||
 - strcmp (entry-d_name, .notmuch) == 0)
 + (strcmp (entry-d_name, .notmuch) == 0 
 +  strcmp (path, notmuch_database_get_path (notmuch)) == 0))
   continue;
  
   next = talloc_asprintf (notmuch, %s/%s, path, entry-d_name);

 And similarly in count_files(), with the root db path passed as first
 argument (as the db is not open yet).


 BR,
 Jani.



  {
  DIR *dir = NULL;
  struct dirent *entry = NULL;
 @@ -469,11 +470,11 @@ add_files (notmuch_database_t *notmuch,
  if (strcmp (entry-d_name, .) == 0 ||
  strcmp (entry-d_name, ..) == 0 ||
  (is_maildir  strcmp (entry-d_name, tmp) == 0) ||
 -strcmp (entry-d_name, .notmuch) == 0)
 +(dirlevel == 0  strcmp (entry-d_name, .notmuch) == 0))
  continue;
  
  next = talloc_asprintf (notmuch, %s/%s, path, entry-d_name);
 -status = add_files (notmuch, next, state);
 +status = add_files (notmuch, next, state, dirlevel + 1);
  if (status) {
  ret = status;
  goto DONE;
 @@ -702,7 +703,8 @@ stop_progress_printing_timer (void)
   * initialized to zero by the top-level caller before calling
   * count_files). */
  static void
 -count_files (const char *path, int *count, add_files_state_t *state)
 +count_files (const char *path, int *count, add_files_state_t *state,
 + int dirlevel)
  {
  struct dirent *entry = NULL;
  char *next;
 @@ -725,7 +727,7 @@ count_files (const char *path, int *count, 
 add_files_state_t *state)
   */
  if (strcmp (entry-d_name, .) == 0 ||
  strcmp (entry-d_name, ..) == 0 ||
 -strcmp (entry-d_name, .notmuch) == 0 ||
 +(dirlevel == 0  strcmp (entry-d_name, .notmuch) == 0) ||
  _entry_in_ignore_list (entry-d_name, state))
  {
  if (state-debug  _entry_in_ignore_list (entry-d_name, state))
 @@ -750,7 +752,7 @@ count_files (const char *path, int *count, 
 add_files_state_t *state)
  fflush (stdout);
  }
  } else if (entry_type == S_IFDIR) {
 -count_files (next, count, state);
 +count_files (next, count, state, dirlevel + 1);
  }
  
  free (next);
 @@ -962,7 +964,7 @@ notmuch_new_command (notmuch_config_t *config, int argc, 
 char *argv[])
  int count;
  
  count = 0;
 -count_files (db_path, count, add_files_state);
 +count_files (db_path, count, add_files_state, 0);
  if (interrupted)
  return EXIT_FAILURE;
  
 @@ -1021,7 +1023,7 @@ notmuch_new_command (notmuch_config_t *config, int 
 argc, char *argv[])
  timer_is_active = TRUE;
  }
  
 -ret = add_files (notmuch, db_path, add_files_state);
 +ret = add_files (notmuch, db_path, add_files_state, 0);
  if (ret)
  goto DONE;
  
 -- 
 1.8.4.2

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

[PATCH] emacs: use the originating buffer's working directory for pipe

2014-03-01 Thread Jani Nikula
Currently notmuch-show-pipe-message runs the command in the working
directory of the *notmuch-pipe* buffer if it exists, and the current
buffer's working directory (which is inherited to the new
*notmuch-pipe* buffer) otherwise. This is all very surprising to the
user, and it's difficult to know or change where the command will be
run.

Always use the current show buffer's working directory for piping. The
user can check that with M-x pwd and change it with M-x cd. This is
consistent with notmuch-show-pipe-part.

---

Mark also suggested printing the working directory in the prompt for
the command to pipe to, but when I tried it I thought the prompt
became too crowded with that. It's also less important now that the
current buffer's working directory is used consistently.
---
 emacs/notmuch-show.el | 6 +-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
index 88752f171930..b8782ddb632e 100644
--- a/emacs/notmuch-show.el
+++ b/emacs/notmuch-show.el
@@ -1781,10 +1781,14 @@ message.
   (setq shell-command
(concat notmuch-command  show --format=raw 
(shell-quote-argument (notmuch-show-get-message-id))  |  
command)))
-(let ((buf (get-buffer-create (concat *notmuch-pipe*
+(let ((cwd default-directory)
+ (buf (get-buffer-create (concat *notmuch-pipe*
   (with-current-buffer buf
(setq buffer-read-only nil)
(erase-buffer)
+   ;; Use the originating buffer's working directory instead of
+   ;; that of the pipe buffer.
+   (cd cwd)
(let ((exit-code (call-process-shell-command shell-command nil buf)))
  (goto-char (point-max))
  (set-buffer-modified-p nil)
-- 
1.8.5.3

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


Re: [DRAFT PATCH] notmuch new: do not ignore '.notmuch' in non-toplevel directories

2014-03-01 Thread Rob Browning
Mark Walters markwalters1...@gmail.com writes:

 An alternative would be to ignore any .notmuch path with a xapian
 sub-directory. This would mean if a user indexed some subset of their
 mail before trying to index the whole thing they wouldn't accidentally
 index the old xapian database. 

If you wanted to be fairly careful, perhaps test for
exists(.notmuch/.xapian/flintlock or .notmuch/.xapian/iamchert), or
some other very specific test.

 I think the above was suggested by rlb on irc but I don't think it got
 any reply. 

Not sure.  Though I'm wondering if I may have suggested we could add a
notmuch specific token file, i.e. .notmuch/this-really-is-a-notmuch-dir,
which lead to someone else suggesting we could just use .xapian.

Of course broadly speaking, .xapian might be a legitimate maildir too,
but .notmuch/.xapian seems fairly unlikely.

In any case, while I might prefer a very narrow test (as long as it
wasn't unduly expensive), all of the proposed solutions would have
handled my situation.

Thanks
-- 
Rob Browning
rlb @defaultvalue.org and @debian.org
GPG as of 2011-07-10 E6A9 DA3C C9FD 1FF8 C676 D2C4 C0F0 39E9 ED1B 597A
GPG as of 2002-11-03 14DD 432F AE39 534D B592 F9A0 25C8 D377 8C7E 73A4
___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch