{"id":13646470,"url":"https://github.com/mrkkrp/ace-popup-menu","last_synced_at":"2025-08-21T18:04:20.064Z","repository":{"id":34591809,"uuid":"38539108","full_name":"mrkkrp/ace-popup-menu","owner":"mrkkrp","description":"Replace GUI popup menu in Emacs with something more efficient","archived":false,"fork":false,"pushed_at":"2025-03-20T10:24:16.000Z","size":97,"stargazers_count":85,"open_issues_count":1,"forks_count":7,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-03-31T04:07:10.139Z","etag":null,"topics":["avy","emacs","popup-menu"],"latest_commit_sha":null,"homepage":null,"language":"Emacs Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mrkkrp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-07-04T15:51:54.000Z","updated_at":"2025-03-20T10:24:13.000Z","dependencies_parsed_at":"2024-01-14T10:00:22.357Z","dependency_job_id":"3d81179a-b2ce-4816-95f1-c3f5fafe50d3","html_url":"https://github.com/mrkkrp/ace-popup-menu","commit_stats":{"total_commits":75,"total_committers":5,"mean_commits":15.0,"dds":"0.22666666666666668","last_synced_commit":"3dbb3836b364326e551d5cbfe6978eee7b80b8d2"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrkkrp%2Face-popup-menu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrkkrp%2Face-popup-menu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrkkrp%2Face-popup-menu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrkkrp%2Face-popup-menu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mrkkrp","download_url":"https://codeload.github.com/mrkkrp/ace-popup-menu/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247595335,"owners_count":20963943,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["avy","emacs","popup-menu"],"created_at":"2024-08-02T01:02:56.562Z","updated_at":"2025-04-07T05:16:14.286Z","avatar_url":"https://github.com/mrkkrp.png","language":"Emacs Lisp","funding_links":[],"categories":["Emacs Lisp"],"sub_categories":[],"readme":"# Ace Popup Menu\n\n[![License GPL 3](https://img.shields.io/badge/license-GPL_3-green.svg)](http://www.gnu.org/licenses/gpl-3.0.txt)\n[![MELPA](https://melpa.org/packages/ace-popup-menu-badge.svg)](https://melpa.org/#/ace-popup-menu)\n[![CI](https://github.com/mrkkrp/ace-popup-menu/actions/workflows/ci.yaml/badge.svg)](https://github.com/mrkkrp/ace-popup-menu/actions/workflows/ci.yaml)\n\n![Ace Popup Menu](https://raw.githubusercontent.com/mrkkrp/ace-popup-menu/gh-pages/ace-popup-menu.png)\n\nThis package allows its users to replace the GUI popup menu (created by\n`x-popup-menu` by default) with a little textual window. In this window,\nmenu items are displayed and labeled with one or two letters.\n\n## Installation\n\nThe package is available via MELPA, so you can just type `M-x\npackage-install RET ace-popup-menu RET`.\n\nIf you would like to install the package manually, download or clone it and\nput on Emacs' `load-path`. Then you can require it in your init file like\nthis:\n\n```emacs-lisp\n(require 'ace-popup-menu)\n```\n\n## Usage\n\nIn order to replace the standard behavior of `x-popup-menu`, activate\n`ace-popup-menu-mode` in your configuration file, like this:\n\n```emacs-lisp\n(ace-popup-menu-mode 1)\n```\n\nYou can toggle/activate it either interactively or programmaticaly. The mode\nfollows all usual Emacs Lisp conventions for minor modes, except it's always\nglobal. See the documentation for `ace-popup-menu-mode` for more\ninformation.\n\nYou can use the enhanced menu directly via `ace-popup-menu`, too. To use it\nyou don't need to enable the minor mode. See documentation of the function\nfor detailed information.\n\n## With Flyspell\n\nA popular use case for this package is in conjunction with Flyspell. I\npersonally use the following function for quick correction of misspellings:\n\n```emacs-lisp\n(defun mk-flyspell-correct-previous (\u0026optional words)\n  \"Correct word before point, reach distant words.\n\nWORDS words at maximum are traversed backward until a misspelled\nword is found.  If the argument WORDS is not specified, traverse\n12 words by default.\n\nReturn T if a misspelled word is found and NIL otherwise.  Never\nmove the point.\"\n  (interactive \"P\")\n  (let* ((delta (- (point-max) (point)))\n         (counter (string-to-number (or words \"12\")))\n         (result\n          (catch 'result\n            (while (\u003e= counter 0)\n              (when (cl-some #'flyspell-overlay-p\n                             (overlays-at (point)))\n                (flyspell-correct-word-before-point)\n                (throw 'result t))\n              (backward-word 1)\n              (setq counter (1- counter))\n              nil))))\n    (goto-char (- (point-max) delta))\n    result))\n```\n\nIt works nicely with `ace-popup-menu-mode` enabled.\n\n## Customization\n\nYou can ask Ace Popup Menu to show headers of individual panes (they are not\nshown in the original GUI popup menu):\n\n```emacs-lisp\n(setq ace-popup-menu-show-pane-header t)\n```\n\nThis variable can be changed via the customization interface as well.\n\nThis package is built on top of\n[`avy-menu`](https://github.com/mrkkrp/avy-menu), see its customization\nsettings if you wish to change appearance of the menu itself.\n\n## Limitations\n\nHere is something you may want to know:\n\n* The original `x-popup-menu` can take `menu` argument in the form of a\n  keymap or a list of keymaps. This is currently not supported. If you run\n  into a situation when this breaks something, please [open an\n  issue](https://github.com/mrkkrp/ace-popup-menu/issues). Describe how to\n  reproduce your problem and I'll try to fix it.\n\n* Some packages, such as `flyspell`, may test if they work under X-window\n  system and refuse to call `x-popup-menu` if they think it's unavailable.\n  There is nothing I can do about it, so it may be hard to use Ace Popup\n  Menu in terminal, even though it's perfectly capable of functioning there.\n\n* Currently only horizontal format of menu items is available. This is\n  because it's much easier to implement. This should not be a problem,\n  though.\n\n## License\n\nCopyright © 2015–present Mark Karpov\n\nDistributed under GNU GPL, version 3.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrkkrp%2Face-popup-menu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrkkrp%2Face-popup-menu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrkkrp%2Face-popup-menu/lists"}