Return-Path: X-Original-To: notmuch@notmuchmail.org Delivered-To: notmuch@notmuchmail.org Received: from localhost (localhost [127.0.0.1]) by olra.theworths.org (Postfix) with ESMTP id CF7AB429E57 for ; Sat, 26 Oct 2013 14:04:58 -0700 (PDT) X-Virus-Scanned: Debian amavisd-new at olra.theworths.org X-Spam-Flag: NO X-Spam-Score: 0.201 X-Spam-Level: X-Spam-Status: No, score=0.201 tagged_above=-999 required=5 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_ENVFROM_END_DIGIT=1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled Received: from olra.theworths.org ([127.0.0.1]) by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 48Nrk3-MgERl for ; Sat, 26 Oct 2013 14:04:53 -0700 (PDT) Received: from mail-we0-f179.google.com (mail-we0-f179.google.com [74.125.82.179]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (No client certificate requested) by olra.theworths.org (Postfix) with ESMTPS id AFE23429E47 for ; Sat, 26 Oct 2013 14:04:47 -0700 (PDT) Received: by mail-we0-f179.google.com with SMTP id w61so5062816wes.24 for ; Sat, 26 Oct 2013 14:04:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=+yXaox7AUCm5wiR6xrev3R5WVdGZ2LBVWcjywzsciYg=; b=dhzUMmXv9fPcAvBgxCLwvXABr4R6Bg7aQhgg69ccNK2GAG52MS58I60WFhSKk44R8x 2fWGzsdHbpzibMRiA9GQVTY2cyxsjL0pD15xvvINempMKtfWcpXuG7U6e5MaJRhb7KK/ +enfSDK01qrPQobsMhln/dStMl19JokdEqn72066z1yDganIJHHm82gBcr44sE70Eu8B 6QTcdDJWckRwcc04+tS6SpWZp7y9KmXbfra4A0IrqqT0z3RcOw5B7CsWj/P+ilqPmm7N OiM25MlFtzz4juOOCBRMPc23FYybftO12pUgJmhfXmM+YLOgDqL9dAV4c8iLdjbkG3x2 URgg== X-Received: by 10.180.182.15 with SMTP id ea15mr3440104wic.16.1382821486349; Sat, 26 Oct 2013 14:04:46 -0700 (PDT) Received: from localhost (93-97-24-31.zone5.bethere.co.uk. [93.97.24.31]) by mx.google.com with ESMTPSA id ev4sm19391972wib.7.2013.10.26.14.04.45 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Sat, 26 Oct 2013 14:04:46 -0700 (PDT) From: Mark Walters To: notmuch@notmuchmail.org Subject: [PATCH 2/4] emacs: help: remove duplicate bindings Date: Sat, 26 Oct 2013 22:04:37 +0100 Message-Id: <1382821479-23384-3-git-send-email-markwalters1009@gmail.com> X-Mailer: git-send-email 1.7.9.1 In-Reply-To: <1382821479-23384-1-git-send-email-markwalters1009@gmail.com> References: <1382821479-23384-1-git-send-email-markwalters1009@gmail.com> X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 26 Oct 2013 21:04:59 -0000 If the user (or a mode) overrides a keybinding from the common keymap in one of the modes then both help lines appear in the help screen even though only one of the is applicable. Fix this by checking if we already have that key binding. We do this by constructing an list of (key . docstring) pairs so it is easy to check if we have already had that binding. Then the actual print help routine changes these pairs into strings "key \t docstring" --- emacs/notmuch.el | 38 ++++++++++++++++++++++---------------- 1 files changed, 22 insertions(+), 16 deletions(-) diff --git a/emacs/notmuch.el b/emacs/notmuch.el index f98f8cf..b9db9ba 100644 --- a/emacs/notmuch.el +++ b/emacs/notmuch.el @@ -141,11 +141,12 @@ This is basically just `format-kbd-macro' but we also convert ESC to M-." (concat desc " ")))) (defun notmuch-describe-keymap (keymap ua-keys &optional prefix tail) - "Return a list of strings, each describing one binding in KEYMAP. + "Return a list of cons cells, each describing one binding in KEYMAP. -Each string gives a human-readable description of the key and a -one-line description of the bound function. See `notmuch-help' -for an overview of how this documentation is extracted. +Each cons cell consists of a string giving a human-readable +description of the key, and a one-line description of the bound +function. See `notmuch-help' for an overview of how this +documentation is extracted. UA-KEYS should be a key sequence bound to `universal-argument'. It will be used to describe bindings of commands that support a @@ -158,19 +159,23 @@ prefix argument. PREFIX and TAIL are used internally." (notmuch-describe-keymap binding ua-keys (notmuch-prefix-key-description key) tail))) (t - (unless (not binding) - (when (and ua-keys (symbolp binding) - (get binding 'notmuch-prefix-doc)) - ;; Documentation for prefixed command - (let ((ua-desc (key-description ua-keys))) - (push (concat ua-desc " " prefix (format-kbd-macro (vector key)) - "\t" (get binding 'notmuch-prefix-doc)) - tail))) - ;; Documentation for command - (push (concat prefix (format-kbd-macro (vector key)) "\t" + (let ((key-string (concat prefix (format-kbd-macro (vector key))))) + ;; We don't include documentation if the key-binding is + ;; over-ridden. Note, over-riding a binding + ;; automatically hides the prefixed version too. + (unless (or (assoc key-string tail) (not binding)) + (when (and ua-keys (symbolp binding) + (get binding 'notmuch-prefix-doc)) + ;; Documentation for prefixed command + (let ((ua-desc (key-description ua-keys))) + (push (cons (concat ua-desc " " prefix (format-kbd-macro (vector key))) + (get binding 'notmuch-prefix-doc)) + tail))) + ;; Documentation for command + (push (cons key-string (or (and (symbolp binding) (get binding 'notmuch-doc)) (notmuch-documentation-first-line binding))) - tail))))) + tail)))))) keymap) tail) @@ -181,7 +186,8 @@ prefix argument. PREFIX and TAIL are used internally." (let* ((keymap-name (substring doc (match-beginning 1) (match-end 1))) (keymap (symbol-value (intern keymap-name))) (ua-keys (where-is-internal 'universal-argument keymap t)) - (desc-list (notmuch-describe-keymap keymap ua-keys)) + (desc-alist (notmuch-describe-keymap keymap ua-keys)) + (desc-list (mapcar (lambda (arg) (concat (car arg) "\t" (cdr arg))) desc-alist)) (desc (mapconcat #'identity desc-list "\n"))) (setq doc (replace-match desc 1 1 doc))) (setq beg (match-end 0))) -- 1.7.9.1