blob: 60cd63ac5ca55c05b10485832fca03615dc559ee (
plain) (
tree)
|
|
[[!meta title="Re-imagining the Emacs User Experience with Casual Suite"]]
[[!meta copyright="Copyright © 2024 Charles Choi"]]
[[!inline pages="internal(2024/info/casual-nav)" raw="yes"]]
<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
<!-- You can manually edit this file to update the abstract, add links, etc. --->
# Re-imagining the Emacs User Experience with Casual Suite
Charles Choi (he/him) - Pronunciation: Che, IRC: kickingvegas, <http://yummymelon.com/devnull/> , Mastodon: <https://sfba.social/@kickingvegas>
[[!inline pages="internal(2024/info/casual-before)" raw="yes"]]
To date, the predominant interaction model for Emacs has been to use keybindings or the mini-buffer prompt to issue commands. These commands are drawn from a vast ecosystem of packages (both core and third party) designed to extend Emacs. When these commands are used in aggregate, the aforementioned interaction model places a high cognitive load on the user. It also sets a very steep learning curve for Emacs.
The inclusion of the Transient model package in Emacs facilitates a different interaction model using keyboard-driven menu interfaces. Menu interfaces excel at discovery and recognition, neither of which are well supported with keybindings and a prompt. Menu interfaces also can be made contextual to allow the user to focus on a task at hand.
Casual Suite is a personal effort to re-imagine the Emacs user experience by using keyboard-driven Transient menus as its primary interaction model.
This talk describes Casual Suite, detailing its implementation and operation.
About the speaker:
Charles Choi has been an Emacs user since 1989 but did not get around to learning Elisp until 2022. He possesses formal knowledge of computers with a Ph.D. in Computer Engineering received from the University of Virginia in 1997. He is from and continues to live in San Francisco.
# Discussion
## Questions and answers
- Q: I wonder whether casual can only be used with the packages you
mentioned or whether it can be used with whatever package you like?
e.g., can I use causal with AUCTeX?
- A: More the latter; can the questioner clarify the question?
- People are free to fork and iterate over casual
- transient.el already has mechanism for modifying an existing
transient to redefine the bindings over the definition
- Q: \[related to the previous\] Are there any patterns emerging, such
that it would seem possible to 1) systematize 2) automate(?) the
mapping of mode commands to keyboard-driven menus? Possibly even
have an auto casual wrapper for an uncovered mode?
- A:
- Q: Does Casual have a log where you can see what commands were
invoked? This is always available via M-x view-lossage or via
command-log-mode, but I\'m wondering if it can do for Emacs commands
what Magit\'s process buffer (\$) does for learning Git commands.
(Leo just spoke about this.)
- A: That just works. (But try keycast-log-mode instead of
view-lossage.)
- Q: Is there a setting to close menu after executing command?
- A:
- Q: What modes are you working on at the moment for casual / are excited to explore?
- A:
- Q: Why not improve which-key (which seems to be included in Emacs 30
by default) to accommodate for your very slight differences instead
of reinventing the same thing from scratch in an incompatible way?
- \@majorgnu on YouTube: This is great! Emacs\'s plethora of powerful
functionality really needs a better way to surface itself to users
and this is a great step in that dirrection. I do have a few
thoughts, though:
- Is there a convenient way for a user in a transient to get more
information about a menu entries? Specifically: the normal
keybindings (if available) and command documentation.
- It could be useful to gather and display statistics about menu
usage. Imagine being able to generate a personalized keybinding
cheat sheet with the menu items you use the most!
[[!inline pages="internal(2024/info/casual-after)" raw="yes"]]
[[!inline pages="internal(2024/info/casual-nav)" raw="yes"]]
|