Re: [PATCH v2] emacs: show: make buttons select window
authorAustin Clements <amdragon@MIT.EDU>
Mon, 7 Jan 2013 21:20:08 +0000 (16:20 +1900)
committerW. Trevor King <wking@tremily.us>
Fri, 7 Nov 2014 17:53:02 +0000 (09:53 -0800)
cd/5f1ea1ad5d923c7bf9413dd3c8aa9794706741 [new file with mode: 0644]

diff --git a/cd/5f1ea1ad5d923c7bf9413dd3c8aa9794706741 b/cd/5f1ea1ad5d923c7bf9413dd3c8aa9794706741
new file mode 100644 (file)
index 0000000..99bae12
--- /dev/null
@@ -0,0 +1,196 @@
+Return-Path: <amdragon@mit.edu>\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 28F2E431FAF\r
+       for <notmuch@notmuchmail.org>; Mon,  7 Jan 2013 13:20:19 -0800 (PST)\r
+X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
+X-Spam-Flag: NO\r
+X-Spam-Score: -0.7\r
+X-Spam-Level: \r
+X-Spam-Status: No, score=-0.7 tagged_above=-999 required=5\r
+       tests=[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 L1q3r1sDa6+T for <notmuch@notmuchmail.org>;\r
+       Mon,  7 Jan 2013 13:20:18 -0800 (PST)\r
+Received: from dmz-mailsec-scanner-1.mit.edu (DMZ-MAILSEC-SCANNER-1.MIT.EDU\r
+       [18.9.25.12])\r
+       by olra.theworths.org (Postfix) with ESMTP id 4524C431FAE\r
+       for <notmuch@notmuchmail.org>; Mon,  7 Jan 2013 13:20:18 -0800 (PST)\r
+X-AuditID: 1209190c-b7fa86d000001d37-9e-50eb3c111241\r
+Received: from mailhub-auth-3.mit.edu ( [18.9.21.43])\r
+       by dmz-mailsec-scanner-1.mit.edu (Symantec Messaging Gateway) with SMTP\r
+       id 81.8E.07479.11C3BE05; Mon,  7 Jan 2013 16:20:17 -0500 (EST)\r
+Received: from outgoing.mit.edu (OUTGOING-AUTH.MIT.EDU [18.7.22.103])\r
+       by mailhub-auth-3.mit.edu (8.13.8/8.9.2) with ESMTP id r07LKAZK029031; \r
+       Mon, 7 Jan 2013 16:20:11 -0500\r
+Received: from awakening.csail.mit.edu (awakening.csail.mit.edu [18.26.4.91])\r
+       (authenticated bits=0)\r
+       (User authenticated as amdragon@ATHENA.MIT.EDU)\r
+       by outgoing.mit.edu (8.13.6/8.12.4) with ESMTP id r07LK8PD003845\r
+       (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT);\r
+       Mon, 7 Jan 2013 16:20:09 -0500 (EST)\r
+Received: from amthrax by awakening.csail.mit.edu with local (Exim 4.80)\r
+       (envelope-from <amdragon@mit.edu>)\r
+       id 1TsK76-00010G-Go; Mon, 07 Jan 2013 16:20:08 -0500\r
+Date: Mon, 7 Jan 2013 16:20:08 -0500\r
+From: Austin Clements <amdragon@MIT.EDU>\r
+To: Mark Walters <markwalters1009@gmail.com>\r
+Subject: Re: [PATCH v2] emacs: show: make buttons select window\r
+Message-ID: <20130107212008.GM17581@mit.edu>\r
+References: <20130107202221.GL17581@mit.edu>\r
+       <1357592840-31155-1-git-send-email-markwalters1009@gmail.com>\r
+MIME-Version: 1.0\r
+Content-Type: text/plain; charset=us-ascii\r
+Content-Disposition: inline\r
+In-Reply-To: <1357592840-31155-1-git-send-email-markwalters1009@gmail.com>\r
+User-Agent: Mutt/1.5.21 (2010-09-15)\r
+X-Brightmail-Tracker:\r
+ H4sIAAAAAAAAA+NgFvrHIsWRmVeSWpSXmKPExsUixCmqrSto8zrA4PgjA4vVc3ksrt+cyezA\r
+       5LFz1l12j2erbjEHMEVx2aSk5mSWpRbp2yVwZTTuWMFUsEa14tGh3UwNjHPkuhg5OSQETCR2\r
+       Xm1mgbDFJC7cW88GYgsJ7GOUODzHG8Jezyjx5JUNhH2BSeLZFYUuRi4gewmjxK6lPawgCRYB\r
+       FYlNv68ygdhsAhoS2/YvZwSxRQR0JG4fWsAOYjMLSEt8+90MVMPBISxgL/H2gy5ImBeoZOf6\r
+       2+wgYSGBHInVDyogwoISJ2c+YYHo1JK48e8lWCfIlOX/OEDCnAJeEjMuHgK7WBTogCknt7FN\r
+       YBSahaR7FpLuWQjdCxiZVzHKpuRW6eYmZuYUpybrFicn5uWlFuka6uVmluilppRuYgQHsyTP\r
+       DsY3B5UOMQpwMCrx8F4weBUgxJpYVlyZe4hRkoNJSZR3leXrACG+pPyUyozE4oz4otKc1OJD\r
+       jBIczEoivN8eAJXzpiRWVqUW5cOkpDlYlMR5L6fc9BcSSE8sSc1OTS1ILYLJynBwKEnwRloD\r
+       DRUsSk1PrUjLzClBSDNxcIIM5wEa3glSw1tckJhbnJkOkT/FqCglztsLkhAASWSU5sH1wpLN\r
+       K0ZxoFeEeTNAqniAiQqu+xXQYCagwamPn4MMLklESEk1MHpksziKTV813WV1wE7XH2wscdxf\r
+       vjvdTD5oI7sqWCX4MN9fv1T5j0LdL030Z8Ut49NcKb7JZuut14vbpX4dPblCNDp0u37cEqci\r
+       1oOL25vecOuWl9Rvdfx/cpm1v3LM7JyGpv0n1G/Kvtm35danjsbakEmHZvb8bMjV8dow6db/\r
+       KfPmySkW9CqxFGckGmoxFxUnAgB4DGOWEQMAAA==\r
+Cc: notmuch@notmuchmail.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: Mon, 07 Jan 2013 21:20:19 -0000\r
+\r
+LGTM.\r
+\r
+Quoth Mark Walters on Jan 07 at  9:07 pm:\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