This package allows its users to replace the GUI popup menu (created by
x-popup-menu
by default) with a little textual window. In this window,
menu items are displayed and labeled with one or two letters.
The package is available via MELPA, so you can just type M-x package-install RET ace-popup-menu RET
.
If you would like to install the package manually, download or clone it and
put on Emacs' load-path
. Then you can require it in your init file like
this:
(require 'ace-popup-menu)
In order to replace the standard behavior of x-popup-menu
, activate
ace-popup-menu-mode
in your configuration file, like this:
(ace-popup-menu-mode 1)
You can toggle/activate it either interactively or programmaticaly. The mode
follows all usual Emacs Lisp conventions for minor modes, except it's always
global. See the documentation for ace-popup-menu-mode
for more
information.
You can use the enhanced menu directly via ace-popup-menu
, too. To use it
you don't need to enable the minor mode. See documentation of the function
for detailed information.
A popular use case for this package is in conjunction with Flyspell. I personally use the following function for quick correction of misspellings:
(defun mk-flyspell-correct-previous (&optional words)
"Correct word before point, reach distant words.
WORDS words at maximum are traversed backward until a misspelled
word is found. If the argument WORDS is not specified, traverse
12 words by default.
Return T if a misspelled word is found and NIL otherwise. Never
move the point."
(interactive "P")
(let* ((delta (- (point-max) (point)))
(counter (string-to-number (or words "12")))
(result
(catch 'result
(while (>= counter 0)
(when (cl-some #'flyspell-overlay-p
(overlays-at (point)))
(flyspell-correct-word-before-point)
(throw 'result t))
(backward-word 1)
(setq counter (1- counter))
nil))))
(goto-char (- (point-max) delta))
result))
It works nicely with ace-popup-menu-mode
enabled.
You can ask Ace Popup Menu to show headers of individual panes (they are not shown in the original GUI popup menu):
(setq ace-popup-menu-show-pane-header t)
This variable can be changed via the customization interface as well.
This package is built on top of
avy-menu
, see its customization
settings if you wish to change appearance of the menu itself.
Here is something you may want to know:
-
The original
x-popup-menu
can takemenu
argument in the form of a keymap or a list of keymaps. This is currently not supported. If you run into a situation when this breaks something, please open an issue. Describe how to reproduce your problem and I'll try to fix it. -
Some packages, such as
flyspell
, may test if they work under X-window system and refuse to callx-popup-menu
if they think it's unavailable. There is nothing I can do about it, so it may be hard to use Ace Popup Menu in terminal, even though it's perfectly capable of functioning there. -
Currently only horizontal format of menu items is available. This is because it's much easier to implement. This should not be a problem, though.
Copyright © 2015–present Mark Karpov
Distributed under GNU GPL, version 3.