summaryrefslogblamecommitdiffstats
path: root/2024/talks/casual.md
blob: b940d859089bb3dfc71173e06464dffb93ff9296 (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!
- Q: Is there a way to update a part of a transient menu?
  - A: menus can be refreshed
    - But that refreshes the whole menu
    - Okay, I thought so.  I've been calling (transient-setup) in transient infixes where required, but occasionally it's slow.  And in every case it throws away the values of all the other infixes that have been set
## Notes and feedback

- You can also use the menu from the keyboard with F10 and arrow keys. I turn the menu off, but I sometimes use it anyway with F10.
- is that fvwm?
- I disagree that searching for stuff in menus is easier than remembering commands. It's probably easier to learn, but not easier to use once you know them.
  - worst of all: searching in a hierarchical effing hamburger
  - Hamburger menus make sense on extremely small screens, not on other screens.
  - yeah, I don't think updates are that granular
- 2 hour Calc talk when?
- I'm really wowed by your talk
- this was such a great talk
- I want casual support for more modes :) guess I need to do that, then
- The enthusiasm around casual always surprises me, because all the stuff is documented and easy to find if you read the manual and use the help system :(
  - and can remember it all! with casual, you don't *need* to
  - (and in time, use will nail it into an aging memory)
  - I don't use casual, but the obvious problem with the manual/help system is that you still have to memorize it all
  - Even if it just means memorizing that it exists in the first place
  - yeah. I use org like a savage because I only need it a few times a month and I can only remember about 5% of its capabilities...
  - and I bet most people are like that for most modes they only use occasionally.
  - You can look a lot of commands up using apropos, you don't need to memorise everything?
  - But I also set transient-show-popup to nil
  - apropos is so *clumsy* compared to transient though
  - there's a nice benefit to having it there and callable by one more keystroke
  - but then I grew up with WordStar and have long missed its menu/keybinding stuff
  - Consider less commonly used commands like transpose-region or repunctuate-sentences.  How would the user think to even look for commands that do these things?  If they do remember, then they have to look up the keybindings every time they use them until it becomes muscle memory.  For rarely used commands like these it might never become muscle memory.
- But a question of mine is do you use and make use of transient-default-level?
- There's a repunctuate-sentences?!
  - Case in point.  if repunctuate-sentences was in the casual editkit menu on text operations there would be no discovery or memorization issue.
  - Yes, it is very useful when arguing for double-spacing.
  - oooh, useful! I'm a newbie though, only been using emacs since 1992 so of course I hadn't discovered that yet :)
  - in my case, overriding my single-space muscle memory when contributing to double-space-end GNU projects :)
- that's a little like why I want some kind of embark/cmap thing too, so I can have friendly menus that are scoped to the type of thing at point
- to the extent post-its still serve a function for much simpler things for most people, contextual surfacing of what's possible serves (and not the firehose, the select few) makes similar sense to me.
- I want to push back on the point that Transient gives you discoverability for free.  Perhaps I am too much of a zoomer, but a big menu with a lot of options is just too much information at once for me.  The irony is that I often cannot use isearch/occur to search the text buffer as one would expect from Emacs to.
  - Similarly, I do find that with my embark menus, I occasionally use C-h to then search for a command with completion
  - I'm with you on the disadvantages of transient -- it breaks the unspoken Emacs contract of treating every buffer the same.  But that's unrelated to the fact that it helps many people with the discoverability and memorization issues.
  - I think the poweruser vs casual user optimization was answered in the naming choice by Charles :)
  - doesn't vertico also break this unspoken contract, karthik?
  - For me that speaks to a deeper contradiction in Emacs..
  - yes :( I much prefer vertico's predecessor for that reason, but it's dead :(
  - to a much lesser extent.  The minibuffer prompt itself works like a regular buffer
- if casual is not dedicated to powerusers, it's unfortunate that it does not help its users to become powerusers by disagreeing with some key bindings, i.e. it has different bindings from default emacs
  - that argument wouldn't go far with the Doom/Spacemacs people though, with their "non-default" default bindings and such
- I played around with an experiment to write a small alternative to Casual that would re-use my quick-help "framework" to extract recommended bindings from the current keymap.
- NullNix: i mean, for vertico, this is just the default. you can easily tell vertico to use a buffer instead.
- You can isearch inside the minibuffer prompt when using Vertico for instance
  - can you?! new feature in the last year, perhaps? will look again
  - not the first time my ignorance has torpedoed me
  - ok i agree with your latest point but still minibuffer is different than other normal buffers imho :)
  - Why is it different?  The minibuffer is just a buffer, no reason it should break the Emacs contract.
  - Vertico does not take over the "event loop" like transient does -- not sure how to describe this correctly.  So most Emacs commands will work from inside Vertico, especially once you enable recursive-minibuffers
  - I meant you can run regular emacs commands on the prompt "line" in the minibuffer when using Vertico
- mct looks interesting...
- karthik: M-x C-s does not behave like i-search in a normal buffer for me, using vertico
- +1 for edebug, that would be great
- wonders about gud and gdb interfaces -- would definitely benefit
- (poke has already gained a transient menu system :) )
- Doesn't Ediff present a help buffer at the bottom?
- yes, but it's so small it's easily overlooked on modern big screens
- yes, ironically ediff has an anemic one already, and I don't see people criticizing it
  - Heh, modern screens means big, right?  On the other hand, on non-modern screens (small) transient buffers take over too much of the screen :)
  - honestly I wonder if I should rejig ediff to use transient :)
  - I can recommend (setopt ediff-window-setup-function 'ediff-setup-windows-plain)!
- yeah, did that a loong time ago, but most people haven't...
- The memory and cognitively impaired if merely due to aging thank you Charles, that's not just you
- hear hear
- there are also menus :)
- If you use Avy, try using an Avy command when running find-file using Vertico.  You'll see Avy jump candidates in the current text of the minibuffer prompt, and you can jump there.
- Indeed, but Charles addressed this in clarification of where Casual stands in the design space (vs menus, M-x, etc), namely context-specific keyboard-driven interactive use where some toggling of args can stick while you build a command (i.e. Transient)
  - menus are also context-specific actually
  - that said, I agree that transient is an alternative interface with various advantages
  - it is just not the only way to learn Emacs commands
  - And menus are also keyboard driven, as M-x tmm-menubar shows
  - Indeed, I just wanted to point out that if ever Transient fills an interesting/useful point in design space, so those its generalized application to other modes (vs Magit)
- that said, I agree that transient is an alternative interface with various advantages
- it is just not the only way to learn Emacs commands
- And menus are also keyboard driven, as M-x tmm-menubar shows
- time for a keyboard upgrade, i can't be bothered to type C-c c or M-x anymore either
- YouTube comment: Great presentation! I've been using Casual since it arrived and have been very happy with it; it makes working with emacs much easier. I now also create transients for commands I use, neatly grouped in categories. Transients: life saver.
- YouTube comment: 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 direction. I do have a few thoughts, though:
  - Q: 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"]]