summaryrefslogtreecommitdiffstats
path: root/2024/talks/casual.md
blob: 60cd63ac5ca55c05b10485832fca03615dc559ee (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
[[!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"]]