[PATCH v2] emacs: show: make buttons select window
authorMark Walters <markwalters1009@gmail.com>
Mon, 7 Jan 2013 21:07:20 +0000 (21:07 +0000)
committerW. Trevor King <wking@tremily.us>
Fri, 7 Nov 2014 17:53:02 +0000 (09:53 -0800)
25/d3246bda50785cc63ad660fe07364c739bf5f8 [new file with mode: 0644]

diff --git a/25/d3246bda50785cc63ad660fe07364c739bf5f8 b/25/d3246bda50785cc63ad660fe07364c739bf5f8
new file mode 100644 (file)
index 0000000..762e1a8
--- /dev/null
@@ -0,0 +1,181 @@
+Return-Path: <markwalters1009@gmail.com>\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 EBB15431FAF\r
+       for <notmuch@notmuchmail.org>; Mon,  7 Jan 2013 13:07:53 -0800 (PST)\r
+X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
+X-Spam-Flag: NO\r
+X-Spam-Score: 0.201\r
+X-Spam-Level: \r
+X-Spam-Status: No, score=0.201 tagged_above=-999 required=5\r
+       tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1,\r
+       FREEMAIL_ENVFROM_END_DIGIT=1, FREEMAIL_FROM=0.001,\r
+       RCVD_IN_DNSWL_LOW=-0.7] 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 ZPKN8Vq8ZXE3 for <notmuch@notmuchmail.org>;\r
+       Mon,  7 Jan 2013 13:07:53 -0800 (PST)\r
+Received: from mail-we0-f169.google.com (mail-we0-f169.google.com\r
+       [74.125.82.169]) (using TLSv1 with cipher RC4-SHA (128/128 bits))\r
+       (No client certificate requested)\r
+       by olra.theworths.org (Postfix) with ESMTPS id 16C8B431FAE\r
+       for <notmuch@notmuchmail.org>; Mon,  7 Jan 2013 13:07:52 -0800 (PST)\r
+Received: by mail-we0-f169.google.com with SMTP id t49so10749696wey.0\r
+       for <notmuch@notmuchmail.org>; Mon, 07 Jan 2013 13:07:51 -0800 (PST)\r
+DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;\r
+       h=x-received:from:to:cc:subject:date:message-id:x-mailer:in-reply-to\r
+       :references; bh=MU+UfucF2Eb5RQAEcssOyEUqlKpovFtQgmZgC1Jin0s=;\r
+       b=BfGBZrIy15xiruJ/fEClF06hQp7trCQhtwxzqfQZBDWueFKj6Sb+pCUmvjLKVRajqY\r
+       2LHHhBG0K/NTcK1Y0uFEU2VmUXgJTZ1WOnjbF5VjixSJPLqRDXidywrlFb8F2YRDecYK\r
+       tmRTr6x7OMYjStRiLdNsvdxZORaC9sKjkl+I8DDE/FY8Fcb/ewHedHfFhg+SMFWmZaxv\r
+       EAViikgZ0lDx1Ud9sua5tVDCU449cnjZjxS9ImV5mdxNkL+TcaF++x+3HkYL6+G8a75d\r
+       XK6l19GYSxXp30KxQ0JFurowCQrJfGNJBLczQwMO3PvcwBr9wAhjbC2KdzVj+FNWkTtx\r
+       Ld0A==\r
+X-Received: by 10.194.77.13 with SMTP id o13mr98163019wjw.58.1357592871846;\r
+       Mon, 07 Jan 2013 13:07:51 -0800 (PST)\r
+Received: from localhost (93-97-24-31.zone5.bethere.co.uk. [93.97.24.31])\r
+       by mx.google.com with ESMTPS id dm3sm13815777wib.9.2013.01.07.13.07.50\r
+       (version=TLSv1.2 cipher=RC4-SHA bits=128/128);\r
+       Mon, 07 Jan 2013 13:07:50 -0800 (PST)\r
+From: Mark Walters <markwalters1009@gmail.com>\r
+To: notmuch@notmuchmail.org\r
+Subject: [PATCH v2] emacs: show: make buttons select window\r
+Date: Mon,  7 Jan 2013 21:07:20 +0000\r
+Message-Id: <1357592840-31155-1-git-send-email-markwalters1009@gmail.com>\r
+X-Mailer: git-send-email 1.7.9.1\r
+In-Reply-To: <20130107202221.GL17581@mit.edu>\r
+References: <20130107202221.GL17581@mit.edu>\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: Mon, 07 Jan 2013 21:07:54 -0000\r
+\r
+Emacs has two button type objects: widgets (as used for saved searches\r
+in notmuch-hello) and buttons as used by parts/citations and id links\r
+in notmuch-show. These two behave subtly differently when clicked with\r
+the mouse: widgets select the window clicked before running the\r
+action, buttons do not.\r
+\r
+This patch makes all of these behave the same: clicking always selects\r
+the clicked window. It does this by defining a notmuch-button-type\r
+supertype that the other notmuch buttons can inherit from. This\r
+supertype binds the mouse-action to select the window and then\r
+activate the button.\r
+---\r
+\r
+This versions fixes most of the comments raised by Austin's review.\r
+The one change I didn't make was changing :supertype to 'supertype. In\r
+principle I agree with Austin but the : form is used for inheritance\r
+for other notmuch buttons in wash and crypto.\r
+\r
+Best wishes\r
+\r
+Mark\r
+\r
+\r
+\r
+\r
+ emacs/notmuch-crypto.el |    5 ++++-\r
+ emacs/notmuch-lib.el    |   15 +++++++++++++++\r
+ emacs/notmuch-show.el   |    4 +++-\r
+ emacs/notmuch-wash.el   |    3 ++-\r
+ 4 files changed, 24 insertions(+), 3 deletions(-)\r
+\r
+diff --git a/emacs/notmuch-crypto.el b/emacs/notmuch-crypto.el\r
+index 83e5d37..5233824 100644\r
+--- a/emacs/notmuch-crypto.el\r
++++ b/emacs/notmuch-crypto.el\r
+@@ -19,6 +19,8 @@\r
+ ;;\r
+ ;; Authors: Jameson Rollins <jrollins@finestructure.net>\r
\r
++(require 'notmuch-lib)\r
++\r
+ (defcustom notmuch-crypto-process-mime nil\r
+   "Should cryptographic MIME parts be processed?\r
\r
+@@ -76,7 +78,8 @@ mode."\r
+ (define-button-type 'notmuch-crypto-status-button-type\r
+   'action (lambda (button) (message (button-get button 'help-echo)))\r
+   'follow-link t\r
+-  'help-echo "Set notmuch-crypto-process-mime to process cryptographic mime parts.")\r
++  'help-echo "Set notmuch-crypto-process-mime to process cryptographic mime parts."\r
++  :supertype 'notmuch-button-type)\r
\r
+ (defun notmuch-crypto-insert-sigstatus-button (sigstatus from)\r
+   (let* ((status (plist-get sigstatus :status))\r
+diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el\r
+index 0407f8a..6836192 100644\r
+--- a/emacs/notmuch-lib.el\r
++++ b/emacs/notmuch-lib.el\r
+@@ -97,6 +97,21 @@ For example, if you wanted to remove an \"inbox\" tag and add an\r
+   :group 'notmuch-search\r
+   :group 'notmuch-show)\r
\r
++;; By default clicking on a button does not select the window\r
++;; containing the button (as opposed to clicking on a widget which\r
++;; does). This means that the button action is then executed in the\r
++;; current selected window which can cause problems if the button\r
++;; changes the buffer (e.g., id: links) or moves point.\r
++;;\r
++;; This provides a button type which overrides mouse-action so that\r
++;; the button's window is selected before the action is run. Other\r
++;; notmuch buttons can get the same behaviour by inheriting from this\r
++;; button type.\r
++(define-button-type 'notmuch-button-type\r
++  'mouse-action (lambda (button)\r
++                (select-window (posn-window (event-start last-input-event)))\r
++                (button-activate button)))\r
++\r
+ (defun notmuch-version ()\r
+   "Return a string with the notmuch version number."\r
+   (let ((long-string\r
+diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el\r
+index 5751d98..059194d 100644\r
+--- a/emacs/notmuch-show.el\r
++++ b/emacs/notmuch-show.el\r
+@@ -469,7 +469,8 @@ message at DEPTH in the current thread."\r
+   'action 'notmuch-show-part-button-default\r
+   'keymap 'notmuch-show-part-button-map\r
+   'follow-link t\r
+-  'face 'message-mml)\r
++  'face 'message-mml\r
++  :supertype 'notmuch-button-type)\r
\r
+ (defvar notmuch-show-part-button-map\r
+   (let ((map (make-sparse-keymap)))\r
+@@ -1075,6 +1076,7 @@ buttons for a corresponding notmuch search."\r
+       ;; Remove the overlay created by goto-address-mode\r
+       (remove-overlays (first link) (second link) 'goto-address t)\r
+       (make-text-button (first link) (second link)\r
++                        :type 'notmuch-button-type\r
+                         'action `(lambda (arg)\r
+                                    (notmuch-show ,(third link)))\r
+                         'follow-link t\r
+diff --git a/emacs/notmuch-wash.el b/emacs/notmuch-wash.el\r
+index d6db4fa..826b6f4 100644\r
+--- a/emacs/notmuch-wash.el\r
++++ b/emacs/notmuch-wash.el\r
+@@ -115,7 +115,8 @@ lower).")\r
+ (define-button-type 'notmuch-wash-button-invisibility-toggle-type\r
+   'action 'notmuch-wash-toggle-invisible-action\r
+   'follow-link t\r
+-  'face 'font-lock-comment-face)\r
++  'face 'font-lock-comment-face\r
++  :supertype 'notmuch-button-type)\r
\r
+ (define-button-type 'notmuch-wash-button-citation-toggle-type\r
+   'help-echo "mouse-1, RET: Show citation"\r
+-- \r
+1.7.9.1\r
+\r