disproject 
- Description
- Dispatch project commands with Transient
- Latest
- disproject-2.2.0.0.20260114.143840.tar (.sig), 2026-Jan-14, 340 KiB
- Maintainer
- Alvin Hsu <aurtzy@gmail.com>
- Website
- https://github.com/aurtzy/disproject
- Browse ELPA's repository
- CGit or Gitweb
- Badge
- Manual
- disproject
To install this package from Emacs, use package-install or list-packages.
Full description
1. Disproject
Disproject is a GNU Emacs package that implements Transient menus for managing and interacting with project files. It aims to provide a featureful, yet extensible interface from which users can intuitively dispatch commands on projects.
Some of its notable features include:
- a main menu with access to many of the built-in project library's commands and other project-aware commands;
- auto-detection of current project as the default project to act on from the menu;
- options for switching to other projects from the menu in order to execute commands elsewhere;
- a menu for finding common "special" project files, like the dir-locals file;
- a menu for custom project-local suffix commands;
- and display-buffer override options, to control where commands should display buffers to.
An Info manual is included with this program under the name disproject, which
can also be viewed in the Org format at doc/disproject.html.
This package was inspired by the project-switch-project command, from the
built-in project library. Users may also draw similarities to the Projectile
library's projectile-commander.
See images for more screenshots of Disproject menus.
1.1. Installation
1.1.1. MELPA
Disproject is available in MELPA and MELPA Stable. See Getting Started instructions for using MELPA.
1.1.2. Guix
Disproject is also available as a GNU Guix package.
The stable version can be found in the (gnu packages emacs-xyz) module under
the name emacs-disproject. It may be installed in the user profile like so:
guix install emacs-disproject
Alternatively, one may use the package definition in ./guix.scm to install a
development version of Disproject from the repository. For example, to install
in the user profile, run the following in this repository's root directory:
guix package --install-from-file=guix.scm
1.2. Usage
Disproject is usable out of the box. After it is loaded, the only command that
needs to be known is disproject-dispatch, which opens a transient interface -
referred to as the "main menu" - with access to a collection of commands that
the user can choose from to execute on projects.
The following configuration is a suggested minimal setup that can be added to the user's init file:
(use-package disproject
;; Replace `project-prefix-map' with `disproject-dispatch'.
:bind ( :map ctl-x-map
("p" . disproject-dispatch)))
See the manual for more information on using and configuring Disproject.
News
# -*- mode: org -*- * Changelog ** Unreleased ** [[https://github.com/aurtzy/disproject/tree/v2.2.0][2.2.0]] - 2025-10-03 This version introduces two new (customizable) menus: one for selecting ~display-buffer~ overrides to apply to suffix commands, and another for finding common project files, dubbed "special files". An Info user manual has also been written to provide documentation on using and customizing Disproject, and should now be distributed with this package. *** Added - Add ~disproject-display-buffer-action-suffix~ class and ~disproject-display-buffer-action-set~ suffix command. These facilities provide a means of generating suffix commands that set ~display-buffer~ action overrides. - Add ~disproject-display-buffer-action-dispatch~ prefix command, bound to =,= in the main menu. This provides a new menu with some out-of-the-box commands (implemented with ~disproject-display-buffer-action-set~) for managing the ~display-buffer~ override. Replaces transient switch =--prefer-other-window=, although the other-window override is set to =o= to preserve the =,o= key sequence. - Add ~disproject-find-special-file-suffix~ class and ~disproject-find-special-file~ suffix command, which provide a means of creating suffixes that find "special files" in projects. - Add ~disproject-find-dir-locals-file~ and ~disproject-find-dir-locals-2-file~ suffix commands, bound to =l= and =L= (respectively) in ~disproject-find-special-file-dispatch~. These supersede ~disproject-dir-locals~. - Add ~disproject-find-special-file-dispatch~ prefix, bound to =l= in the main menu (replacing ~disproject-dir-locals~). - Add ~disproject-find-special-file-suffixes~ variable for customizing ~disproject-find-special-file-dispatch~. By default, it includes suffixes for finding dir-locals files and a transient switch that enables using ~customize-dirlocals~ (added in Emacs 30.1) to open them with the Customize interface ([[https://github.com/aurtzy/disproject/issues/10][#10]]). - Add ~disproject-global-header-group~ transient group, which inserts the selected-project header and "Global options" section. - Include ~disproject-global-header-group~ in ~disproject-custom-dispatch~ and ~disproject-find-special-file-dispatch~. This makes the "Global options" section available in these menus. - Add a user manual. *** Changed - Bump transient dependency version to 0.9.2. - Force-enable ~switch-to-buffer-obey-display-actions~ when a ~display-buffer~ override is set. - Set =transient= slot to t for ~disproject-switch-project*~ commands in suffix definitions. - Rename ~disproject-find-line~ description "line occurrence" to "line in buffers". - Show ~disproject-magit-todos-list~ if the magit-todos library is available, as opposed to only showing it when the library is loaded. This permits using the command as an autoload. - Set advice slots for relevant transient groups to ~disproject-with-env-apply~. This makes it no longer necessary to use project environment functions for project-aware commands when adding to those transient groups. - Rename ~disproject-commands~ customization group to ~disproject-swappable-commands~. - Set the last transient group class for ~disproject-dispatch~ to ~transient-row~. *** Deprecated - Deprecate ~disproject-scope-prefer-other-window?~ method. - Deprecate ~disproject-dir-locals~. ** [[https://github.com/aurtzy/disproject/tree/v2.1.0][2.1.0]] - 2025-05-29 In addition to a few new commands, +this version notably adds support for Transient version 0.9.0++ (the breaking change was found to be [[https://github.com/magit/transient/discussions/389][an unintentional bug]]). *** Added - Re-add note about reserved keys in ~disproject-custom-suffixes~ documentation, which was accidentally removed. The reserved keys are still the same as before. - Add ~disproject-query-replace-regexp~ suffix command, bound to =r= in main menu ([[https://github.com/aurtzy/disproject/pull/7][#7]]). ... ...