unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
* [PATCH] emacs: Add notmuch-address.el for address completion using notmuch
@ 2010-04-22  9:03 David Edmondson
  2010-04-22 14:47 ` Dirk Hohndel
  2010-04-24  0:49 ` Carl Worth
  0 siblings, 2 replies; 17+ messages in thread
From: David Edmondson @ 2010-04-22  9:03 UTC (permalink / raw)
  To: notmuch

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 4232 bytes --]

A tool `notmuch-addresses' is required to produce addresses which
match a query string. An example of a suitable script can be found in
the git repository at
    http://jkr.acm.jhu.edu/git/notmuch_addresses.git
There are no doubt others.
---
 emacs/Makefile.local     |    3 +-
 emacs/notmuch-address.el |   91 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 93 insertions(+), 1 deletions(-)
 create mode 100644 emacs/notmuch-address.el

diff --git a/emacs/Makefile.local b/emacs/Makefile.local
index e5013b3..7537c3d 100644
--- a/emacs/Makefile.local
+++ b/emacs/Makefile.local
@@ -8,7 +8,8 @@ emacs_sources := \
 	$(dir)/notmuch-show.el \
 	$(dir)/notmuch-wash.el \
 	$(dir)/notmuch-hello.el \
-	$(dir)/notmuch-mua.el
+	$(dir)/notmuch-mua.el \
+	$(dir)/notmuch-address.el
 
 emacs_images := \
 	$(dir)/notmuch-logo.png
diff --git a/emacs/notmuch-address.el b/emacs/notmuch-address.el
new file mode 100644
index 0000000..69a52a2
--- /dev/null
+++ b/emacs/notmuch-address.el
@@ -0,0 +1,91 @@
+;; notmuch-address.el --- address completion with 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>
+
+(require 'message)
+
+;;
+
+(defcustom notmuch-address-command "notmuch-addresses"
+  "The command which generates possible addresses. It must take a
+single argument and output a list of possible matches, one per
+line."
+  :type 'string
+  :group 'notmuch)
+
+(defvar notmuch-address-message-alist-member
+  '("^\\(Resent-\\)?\\(To\\|B?Cc\\|Reply-To\\|From\\|Mail-Followup-To\\|Mail-Copies-To\\):"
+	      . notmuch-address-expand-name))
+
+(defvar notmuch-address-history nil)
+
+(defun notmuch-address-message-insinuate ()
+  (if (not (memq notmuch-address-message-alist-member message-completion-alist))
+      (setq message-completion-alist
+	    (push notmuch-address-message-alist-member message-completion-alist))))
+
+(defun notmuch-address-options (original)
+  (process-lines notmuch-address-command original))
+
+(defun notmuch-address-expand-name ()
+  (let* ((end (point))
+	 (beg (save-excursion
+		(re-search-backward "\\(\\`\\|[\n:,]\\)[ \t]*")
+		(goto-char (match-end 0))
+		(point)))
+	 (orig (buffer-substring-no-properties beg end))
+	 (completion-ignore-case t)
+	 (options (notmuch-address-options orig))
+	 (chosen (if (eq (length options) 1)
+		     (car options)
+		   (completing-read "Address: " (cdr options) nil nil (car options)
+				    'notmuch-address-history))))
+    (when chosen
+      (push chosen notmuch-address-history)
+      (delete-region beg end)
+      (insert chosen))))
+
+;; Copied from `w3m-which-command'.
+(defun notmuch-address-locate-command (command)
+  "Return non-nil if `command' is an executable either on
+`exec-path' or an absolute pathname."
+  (when (stringp command)
+    (if (and (file-name-absolute-p command)
+	     (file-executable-p command))
+	command
+      (setq command (file-name-nondirectory command))
+      (catch 'found-command
+	(let (bin)
+	  (dolist (dir exec-path)
+	    (setq bin (expand-file-name command dir))
+	    (when (or (and (file-executable-p bin)
+			   (not (file-directory-p bin)))
+		      (and (file-executable-p (setq bin (concat bin ".exe")))
+			   (not (file-directory-p bin))))
+	      (throw 'found-command bin))))))))
+
+;; If we can find the program specified by `notmuch-address-command',
+;; insinuate ourselves into `message-mode'.
+(when (notmuch-address-locate-command notmuch-address-command)
+  (notmuch-address-message-insinuate))
+
+;;
+
+(provide 'notmuch-address)
-- 
1.7.0

^ permalink raw reply related	[flat|nested] 17+ messages in thread
* Re: [PATCH] emacs: Add notmuch-address.el for address completion using notmuch
@ 2010-04-22 11:08 Sebastian Spaeth
  0 siblings, 0 replies; 17+ messages in thread
From: Sebastian Spaeth @ 2010-04-22 11:08 UTC (permalink / raw)
  To: Notmuch development list

On 2010-04-22, David Edmondson wrote:
> A tool `notmuch-addresses' is required to produce addresses which
> match a query string. An example of a suitable script can be found in
> the git repository at
>     http://jkr.acm.jhu.edu/git/notmuch_addresses.git
> There are no doubt others.

no doubt :-).

This works great, the only "disadvantage" is that it will disable bbdb
and eudc by default if a notmuch-addresses binary is available. I think
that is a reasonable assumption.

Is it really necessary to try to append ".exe"? Even Windows users
should be able to provide the full binary name if asked for it
(especially when using emacs on Windows).

in any case:

Signed-off: Sebastian Spaeth <Sebastian@SSpaeth.de>

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

end of thread, other threads:[~2010-04-26 18:40 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-04-22  9:03 [PATCH] emacs: Add notmuch-address.el for address completion using notmuch David Edmondson
2010-04-22 14:47 ` Dirk Hohndel
2010-04-24  0:49 ` Carl Worth
2010-04-26 10:48   ` [PATCH] emacs: Automatically load "notmuch-address" David Edmondson
2010-04-26 10:49   ` [PATCH] emacs: Add notmuch-address.el for address completion using notmuch David Edmondson
2010-04-26 11:29     ` Sebastian Spaeth
2010-04-26 11:41       ` David Edmondson
2010-04-26 15:21     ` Carl Worth
2010-04-26 16:25       ` [PATCH] emacs: Tell the user how many addresses matched when completing dme
2010-04-26 16:27       ` [PATCH] emacs: Add notmuch-address.el for address completion using notmuch David Edmondson
2010-04-26 18:03         ` Carl Worth
2010-04-26 18:20           ` David Edmondson
2010-04-26 18:40             ` Carl Worth
2010-04-26 16:28       ` David Edmondson
2010-04-26 16:40         ` Dirk Hohndel
2010-04-26 18:08         ` Carl Worth
  -- strict thread matches above, loose matches on Subject: below --
2010-04-22 11:08 Sebastian Spaeth

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