diff --git a/ace-window.el b/ace-window.el index 046e5a2..f9bb391 100644 --- a/ace-window.el +++ b/ace-window.el @@ -260,28 +260,33 @@ LEAF is (PT . WND)." (force-mode-line-update)) (defvar aw-dispatch-alist - '((?x aw-delete-window " Ace - Delete Window") - (?m aw-swap-window " Ace - Swap Window") - (?M aw-move-window " Ace - Move Window") - (?j aw-switch-buffer-in-window " Ace - Select Buffer") + '((?x aw-delete-window "Delete Window") + (?m aw-swap-window "Swap Window") + (?M aw-move-window "Move Window") + (?j aw-switch-buffer-in-window "Select Buffer") (?n aw-flip-window) - (?c aw-split-window-fair " Ace - Split Fair Window") - (?v aw-split-window-vert " Ace - Split Vert Window") - (?b aw-split-window-horz " Ace - Split Horz Window") - (?i delete-other-windows " Ace - Delete Other Windows") + (?c aw-split-window-fair "Split Fair Window") + (?v aw-split-window-vert "Split Vert Window") + (?b aw-split-window-horz "Split Horz Window") + (?i delete-other-windows "Delete Other Windows") (?o delete-other-windows)) "List of actions for `aw-dispatch-default'.") +(defun aw--dispatch-action (char) + "Return item from `aw-dispatch-alist' matching CHAR." + (assoc char aw-dispatch-alist)) + (defun aw-dispatch-default (char) "Perform an action depending on CHAR." - (let ((val (cdr (assoc char aw-dispatch-alist)))) - (if val - (if (and (car val) (cadr val)) - (prog1 (setq aw-action (car val)) - (aw-set-mode-line (cadr val))) - (funcall (car val)) - (throw 'done 'exit)) - (avy-handler-default char)))) + (let ((action (aw--dispatch-action char))) + (cl-destructuring-bind (_key fn &optional description) (aw--dispatch-action char) + (if action + (if (and fn description) + (prog1 (setq aw-action fn) + (aw-set-mode-line (format " Ace - %s" description))) + (funcall fn) + (throw 'done 'exit)) + (avy-handler-default char))))) (defun aw-select (mode-line &optional action) "Return a selected other window.