branch: master commit 100bd2130b6963bbdcb0bec346abee2d9e2d829e Author: Andrew Schwartzmeyer <and...@schwartzmeyer.com> Commit: Andrew Schwartzmeyer <and...@schwartzmeyer.com>
counsel.el (counsel-M-x): Optionally expand aliases Added support via `counsel-M-x-transformer` to show the expansion of an alias in a manner similar to how keybindings are shown. For example, if `rb` is aliased to `revert-buffer`, and bound to `C-c r`, `M-x rb` will show `rb (revert-buffer) (C-c r)`. Currently the expansion is in the same font as the command, which looks nice, but it would be easy to add support for a custom face. The boolean `counsel-alias-expand` was introduced to enable or disable this functionality, with it defaulting to non-nil. --- counsel.el | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/counsel.el b/counsel.el index 97423ec..ee78d9f 100644 --- a/counsel.el +++ b/counsel.el @@ -748,22 +748,30 @@ With prefix arg MODE a query for the symbol help mode is offered." "Face used by `counsel-M-x' for key bindings." :group 'ivy-faces) +(defcustom counsel-alias-expand t + "When non-nil, show the expansion of aliases in `counsel-M-x'." + :type 'boolean + :group 'ivy) + (defun counsel-M-x-transformer (cmd) "Return CMD annotated with its active key binding, if any." - (let ((key (where-is-internal (intern cmd) nil t))) - (if (not key) - cmd - ;; Prefer `<f2>' over `C-x 6' where applicable - (let ((i (cl-search [?\C-x ?6] key))) - (when i - (let ((dup (vconcat (substring key 0 i) [f2] (substring key (+ i 2)))) - (map (current-global-map))) - (when (equal (lookup-key map key) - (lookup-key map dup)) - (setq key dup))))) - (setq key (key-description key)) - (put-text-property 0 (length key) 'face 'counsel-key-binding key) - (format "%s (%s)" cmd key)))) + (let ((alias (symbol-function (intern cmd))) + (key (where-is-internal (intern cmd) nil t))) + (concat cmd + (when (and (symbolp alias) counsel-alias-expand) + (format " (%s)" alias)) + (when key + ;; Prefer `<f2>' over `C-x 6' where applicable + (let ((i (cl-search [?\C-x ?6] key))) + (when i + (let ((dup (vconcat (substring key 0 i) [f2] (substring key (+ i 2)))) + (map (current-global-map))) + (when (equal (lookup-key map key) + (lookup-key map dup)) + (setq key dup))))) + (setq key (key-description key)) + (put-text-property 0 (length key) 'face 'counsel-key-binding key) + (format " (%s)" key))))) (defvar amx-initialized) (defvar amx-cache)