emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master f516b84 09/21: Add which-key-enable-extended-define-key cu


From: Justin Burkett
Subject: [elpa] master f516b84 09/21: Add which-key-enable-extended-define-key customization option
Date: Mon, 8 Jan 2018 22:46:55 -0500 (EST)

branch: master
commit f516b84eab1e307d3ffaa181324dca12c3951936
Author: Justin Burkett <address@hidden>
Commit: Justin Burkett <address@hidden>

    Add which-key-enable-extended-define-key customization option
    
    Adds supporting which-key--process-define-key-args.
    
    The docstring for the option is
    
    Advise `define-key' to make which-key aware of definitions of the form
    
      (define-key KEYMAP KEY '("DESCRIPTION" . DEF))
    
    With the advice, this definition will have the side effect of creating a
    replacement in `which-key-replacement-alist' that replaces DEF with 
DESCRIPTION
    when the key sequence ends in KEY. Using a cons cell like this is a valid
    definition for `define-key'. All this does is to make which-key aware of it.
    
    Since many higher level keybinding functions use `define-key' internally, 
this
    will affect most if not all of those as well.
    
    This variable must be set before loading which-key.
---
 which-key.el | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/which-key.el b/which-key.el
index e0c0356..22bed08 100644
--- a/which-key.el
+++ b/which-key.el
@@ -476,6 +476,24 @@ it."
   :group 'which-key
   :type 'boolean)
 
+(defcustom which-key-enable-extended-define-key nil
+  "Advise `define-key' to make which-key aware of definitions of the form
+
+  \(define-key KEYMAP KEY '(\"DESCRIPTION\" . DEF))
+
+With the advice, this definition will have the side effect of
+creating a replacement in `which-key-replacement-alist' that
+replaces DEF with DESCRIPTION when the key sequence ends in
+KEY. Using a cons cell like this is a valid definition for
+`define-key'. All this does is to make which-key aware of it.
+
+Since many higher level keybinding functions use `define-key'
+internally, this will affect most if not all of those as well.
+
+This variable must be set before loading which-key."
+  :group 'which-key
+  :type 'boolean)
+
 ;; Hooks
 (defcustom which-key-init-buffer-hook '()
   "Hook run when which-key buffer is initialized."
@@ -890,6 +908,24 @@ If AT-ROOT is non-nil the binding is also placed at the 
root of MAP."
        (which-key-define-key-recursively df key def t)))
    map))
 
+(defun which-key--process-define-key-args (keymap key def)
+  "When DEF takes the form (\"DESCRIPTION\". DEF), add an entry
+to `which-key-replacement-alist' so that this binding is replaced
+in which-key with DESCRIPTION. This function is meant to be used
+as :before advice for `define-key'."
+  (when (and (consp def)
+             (stringp (car def))
+             (symbolp (cdr def))
+             (cdr def))
+    (let ((key-desc (regexp-quote (key-description key))))
+      (push (cons (cons (format "%s\\'" key-desc)
+                        (format "\\`%s\\'" (symbol-name (cdr def))))
+                  (cons nil (car def)))
+            which-key-replacement-alist))))
+
+(when which-key-enable-extended-define-key
+  (advice-add #'define-key :before #'which-key--process-define-key-args))
+
 ;;; Functions for computing window sizes
 
 (defun which-key--text-width-to-total (text-width)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]