A collection of opinionated Transient-based keyboard-driven user interfaces for various built-in Emacs modes.
Casual is organized into different user interface (UI) libraries tuned for different modes. Different user interfaces for the following modes are supported:
Agenda (Elisp library: casual-agenda
)
An interface for Org Agenda to help you plan your day.
Bookmarks (Elisp library: casual-bookmarks
)
An interface for editing your bookmark collection.
Calc (Elisp library: casual-calc
)
An interface for Emacs Calc, an embarrasingly feature-rich calculator.
Calendar (Elisp library: casual-calendar
)
An interface for Calendar & Diary.
Dired (Elisp library: casual-dired
)
An interface for the venerable file manager Dired.
EditKit (Elisp library: casual-editkit
)
A cornucopia of interfaces for the different editing features (e.g. marking, copying, killing, duplicating, transforming, deleting) of Emacs. Included are interfaces for rectangle, register, macro, and project commands.
IBuffer (Elisp library: casual-ibuffer
)
An interface for the Info documentation system.
Info (Elisp library: casual-info
)
An interface for the Info documentation system.
I-Search (Elisp library: casual-isearch
)
An interface for the many commands supported by I-Search.
Re-Builder (Elisp library: casual-re-builder
)
An interface for the Emacs regular expression tool.
Users can choose any or all of the user interfaces made available by Casual at their pleasure.
Emacs has many commands that are easy to forget if not used frequently. Menus are a user interface (UI) affordance that offers discoverability and recognition. While menus are commonly associated with mouse-driven UI, the inclusion of Transient in Emacs core allows for building a keyboard-driven menu UI. Transient menus are appealing to users who prefer keyboard-driven workflows.
That said, Casual has no aims to be a mutually exclusive user interface. All existing user interfaces to commands (keybinding, mini-buffer prompt, mouse menus) are still available to the user.
- To provide a keyboard-driven menu UI toolkit for common Emacs commands.
- To allow for casual discovery and use of infrequently used Emacs commands.
- To be a frequently used interface to the modes Casual does support.
- Full coverage of all Emacs commands. Casual is not intended to be a power user tool nor is it intended to be a replacement for mouse-driven menus. Casual has no intent to exhaustively cover all modes available in Emacs with keyboard-driven menus.
- Strict adherence to Emacs command naming. While Casual is mostly in alignment with Emacs command naming, there are cases where it will make an opinionated change if the name is deemed too vague or idiomatic.
- No intention is made by Casual to help on-board users to the existing default bindings of a mode, nor to cater to users who already know them. That said, many existing default Emacs bindings are replicated in Casual. Such correspondence should be considered incidental.
- UX Stability (for now). Given that Casual is early in its life-cycle, expect changes to its user experience in terms of menu hierarchy and keybinding choices in future releases.
Editorially, all design decisions for Casual are ultimately the opinion of Charles Y. Choi. People comfortable with this are invited to use Casual at their discretion.
Casual requires usage of
- Emacs ≥ 29.1
Casual has been verified with the following configuration.
- Emacs 29.4 (macOS 14.5, Ubuntu Linux 22.04.4 LTS)
Standard installation of the casual
package is via MELPA distribution.
Configuration of a particular Casual user interface is performed per mode. Go to the Install section for a mode of interest below for guidance on its configuration.
If you have been using an earlier version 1.x of Casual, thank you. Please use the following guidance:
Before installing Casual, you should update all of your existing Casual packages. This is most easily done via the package menu buffer. After updating your packages, install the casual
package.
Migrate your existing Casual packages from 1.x to 2.x by running the following commands:
M-x load-library casual
M-x casual-upgrade-base-to-version-2
Any Casual v1.x packages that have been superseded by this package will be uninstalled.
While not necessary, it is recommended to run M-x package-autoremove
to purge any dangling dependent packages. Cautious readers can choose to audit any packages that are targeted to be removed.
For version 2.x going forward, I (Charles Choi) have decided to not offer any documented guidance on using use-package
to configure Casual due my lack of expertise in using it. I leave it to more skilled readers to determine how to best use use-package for their configuration. Please also note that this is not a prohibition on using use-package
with Casual. I am simply admitting that I don’t know how to use it.
That said, if you have used :ensure t
to install a superseded package, you must remove that configuration. After doing so, please follow the above instructions for installing casual
.
Casual requires a recent installation of Transient 0.6.0+ from either ELPA or MELPA. If your version of Emacs is ≤ 30 but also includes Transient as a built-in package, you will need to set the customizable variable package-install-upgrade-built-in
to t
to enable updating it via package.el
. Set this variable and proceed with installing Casual. Alternately invoking package-install
with a prefix (C-u
) will temporarily coerce the update of dependent built-in packages (example: C-u M-x package-install
casual
).
If you already have the latest version of Magit installed (via non-GNU ELPA or MELPA), you can bypass the above instruction as Magit already includes the Transient package as a dependency.
As Casual is new, we are looking for early adopters! Your feedback is welcome as it will likely impact Casual’s evolution, particularly with regards to UI.
Casual is built using Transient menus and as such adopts its default behavior.
Each menu item has a key and a label. The key is what is typed by the user to select the menu item. A key can be prefixed with a meta (M-) or control (C-) key.
Transient supports nested menus. Exiting a menu can be done in two ways:
C-g
will exit the current sub-menu and return you back to its parent menu.C-q
will exit you completely from a Transient menu stack.
If a mouse is available, a menu item can be selected by moving the mouse cursor over its label and pressing down button 1.
Pressing the ?
key or C-h
will toggle help for all the menu items. Press the key of interest to get help for it.
When a Transient menu is raised, a prefix argument (C-u
) and an optional argument can be entered before selecting a menu item.
For users who wish to help contribute to Casual or personally customize it for their own usage, please read the developer documentation.
If you enjoy using Casual, consider making a modest financial contribution to help support its development and maintenance.
While the package casual
focuses on user interfaces for built-in Emacs modes, there are other third party packages which receive the “Casual” treatment. Two such packages are:
- Casual Avy (Elisp package:
casual-avy
)- An interface for the highly capable Avy navigation package.
- Casual Symbol Overlay (Elisp package:
casual-symbol-overlay
)- An interface for the Symbol Overlay package.
Users interested in getting all current and future Casual interfaces for both built-in and third party packages should install Casual Suite, which includes all of the above packages including casual
.
A heartfelt thanks to all the contributors to Transient, Magit, Org Mode, and Emacs. This package would not be possible without your efforts.