[PATCH 5/5] completion: complete addresses in from:/to: search terms
[notmuch-archives.git] / 52 / 94465b4ce67113dde9a57510872854413486fa
diff --git a/52/94465b4ce67113dde9a57510872854413486fa b/52/94465b4ce67113dde9a57510872854413486fa
new file mode 100644 (file)
index 0000000..fe0ae6b
--- /dev/null
@@ -0,0 +1,134 @@
+Return-Path: <jani@nikula.org>\r
+X-Original-To: notmuch@notmuchmail.org\r
+Delivered-To: notmuch@notmuchmail.org\r
+Received: from localhost (localhost [127.0.0.1])\r
+       by olra.theworths.org (Postfix) with ESMTP id 978A6431FD2\r
+       for <notmuch@notmuchmail.org>; Tue, 27 Jan 2015 11:48:35 -0800 (PST)\r
+X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
+X-Spam-Flag: NO\r
+X-Spam-Score: 1.738\r
+X-Spam-Level: *\r
+X-Spam-Status: No, score=1.738 tagged_above=-999 required=5\r
+       tests=[DNS_FROM_AHBL_RHSBL=2.438, RCVD_IN_DNSWL_LOW=-0.7]\r
+       autolearn=disabled\r
+Received: from olra.theworths.org ([127.0.0.1])\r
+       by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
+       with ESMTP id AwuNpSZFspjv for <notmuch@notmuchmail.org>;\r
+       Tue, 27 Jan 2015 11:48:32 -0800 (PST)\r
+Received: from mail-we0-f177.google.com (mail-we0-f177.google.com\r
+       [74.125.82.177]) (using TLSv1 with cipher RC4-SHA (128/128 bits))\r
+       (No client certificate requested)\r
+       by olra.theworths.org (Postfix) with ESMTPS id 29F11431FD9\r
+       for <notmuch@notmuchmail.org>; Tue, 27 Jan 2015 11:48:18 -0800 (PST)\r
+Received: by mail-we0-f177.google.com with SMTP id l61so16823263wev.8\r
+       for <notmuch@notmuchmail.org>; Tue, 27 Jan 2015 11:48:16 -0800 (PST)\r
+X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;\r
+       d=1e100.net; s=20130820;\r
+       h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\r
+       :references;\r
+       bh=nVNvqY03ODraSJk5c24gwxvw3/U7rRdhTJQQ6EKwvGE=;\r
+       b=c6QwIBM1s7KGNsdMKN1/eyLRaWp8LLgnBJ/I3RzGyoWSQyH9LHSXEF1tSycugL+Bnm\r
+       eq+aqZUDioPLzHgVvN3+Lt7LitGWawsKjXMkw581y+/0koETDX5We3ILagb3dAB5D/e3\r
+       u1vjFlVSAslTmlRL2ZS/njCpHCFIUtSXAWzST7alyygQ8oaNHd0wVBy5bklKl2URzpcO\r
+       UR5TfUEZa+bnZ4Veo13WaVeZuTMn/l/El9SSdKPKr5DepRwJt+6cYGuWduL2F5V8sjQM\r
+       iOZFJN0dO8cPAdkTzgihnP5c4EspB5gwIzVUmtRF2qpqTps0PdhhHyd7VNMSMIstOeA4\r
+       NTEw==\r
+X-Gm-Message-State:\r
+ ALoCoQmvvpl6RvPEhjUausb07QM/x80BD06Q3FQfDRRvYC7/xC/CnMJhiv9DX0veyz8KCd4wi3Vj\r
+X-Received: by 10.194.190.162 with SMTP id gr2mr1249168wjc.13.1422388095900;\r
+       Tue, 27 Jan 2015 11:48:15 -0800 (PST)\r
+Received: from localhost (mobile-internet-5d6ab0-235.dhcp.inet.fi.\r
+       [93.106.176.235])\r
+       by mx.google.com with ESMTPSA id v7sm19439267wib.5.2015.01.27.11.48.14\r
+       (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\r
+       Tue, 27 Jan 2015 11:48:15 -0800 (PST)\r
+From: Jani Nikula <jani@nikula.org>\r
+To: notmuch@notmuchmail.org\r
+Subject: [PATCH 5/5] completion: complete addresses in from:/to: search terms\r
+Date: Tue, 27 Jan 2015 21:48:18 +0200\r
+Message-Id: <1422388098-16333-5-git-send-email-jani@nikula.org>\r
+X-Mailer: git-send-email 2.1.4\r
+In-Reply-To: <1422388098-16333-1-git-send-email-jani@nikula.org>\r
+References: <1422388098-16333-1-git-send-email-jani@nikula.org>\r
+X-BeenThere: notmuch@notmuchmail.org\r
+X-Mailman-Version: 2.1.13\r
+Precedence: list\r
+List-Id: "Use and development of the notmuch mail system."\r
+       <notmuch.notmuchmail.org>\r
+List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
+       <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
+List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
+List-Post: <mailto:notmuch@notmuchmail.org>\r
+List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
+List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
+       <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
+X-List-Received-Date: Tue, 27 Jan 2015 19:48:36 -0000\r
+\r
+Use the new notmuch address command to do completion for addresses in\r
+from: and to:.\r
+\r
+---\r
+\r
+This patch is more of an RFC. The to: completion is sloooow because\r
+typically there are more matches to begin with, and then producing the\r
+results requires reading the messages. Maybe it would be better to use\r
+the same mechanism as from: for both, even if it's not accurate for\r
+to:?\r
+---\r
+ completion/notmuch-completion.bash | 30 +++++++++++++++++++++++++-----\r
+ 1 file changed, 25 insertions(+), 5 deletions(-)\r
+\r
+diff --git a/completion/notmuch-completion.bash b/completion/notmuch-completion.bash\r
+index e0498903f22f..db49294fc58c 100644\r
+--- a/completion/notmuch-completion.bash\r
++++ b/completion/notmuch-completion.bash\r
+@@ -27,10 +27,30 @@\r
+ # on completion.\r
+ #\r
\r
+-_notmuch_user_emails()\r
++# $1: current input of the form prefix:partialinput, where prefix is\r
++# to or from.\r
++_notmuch_email()\r
+ {\r
+-    notmuch config get user.primary_email\r
+-    notmuch config get user.other_email\r
++    local output prefix cur\r
++\r
++    prefix="${1%%:*}"\r
++    cur="${1#*:}"\r
++\r
++    # Cut the input to be completed at punctuation because\r
++    # (apparently) Xapian does not support the trailing wildcard '*'\r
++    # operator for input with punctuation. We let compgen handle the\r
++    # extra filtering required.\r
++    cur="${cur%%[^a-zA-Z0-9]*}"\r
++\r
++    case "$prefix" in\r
++      to) output=recipients;;\r
++      from) output=sender;;\r
++      *) return;;\r
++    esac\r
++\r
++    # Only emit plain, lower case, unique addresses.\r
++    notmuch address --output=$output $prefix:"${cur}*" | \\r
++      sed 's/[^<]*<\([^>]*\)>/\1/' | tr "[:upper:]" "[:lower:]" | sort -u\r
+ }\r
\r
+ _notmuch_search_terms()\r
+@@ -44,10 +64,10 @@ _notmuch_search_terms()\r
+           COMPREPLY=( $(compgen -P "tag:" -W "`notmuch search --output=tags \*`" -- ${cur##tag:}) )\r
+           ;;\r
+       to:*)\r
+-          COMPREPLY=( $(compgen -P "to:" -W "`_notmuch_user_emails`" -- ${cur##to:}) )\r
++          COMPREPLY=( $(compgen -P "to:" -W "`_notmuch_email ${cur}`" -- ${cur##to:}) )\r
+           ;;\r
+       from:*)\r
+-          COMPREPLY=( $(compgen -P "from:" -W "`_notmuch_user_emails`" -- ${cur##from:}) )\r
++          COMPREPLY=( $(compgen -P "from:" -W "`_notmuch_email ${cur}`" -- ${cur##from:}) )\r
+           ;;\r
+       path:*)\r
+           local path=`notmuch config get database.path`\r
+-- \r
+2.1.4\r
+\r