diff options
Diffstat (limited to '')
-rw-r--r-- | 2024/info/casual-after.md | 75 |
1 files changed, 19 insertions, 56 deletions
diff --git a/2024/info/casual-after.md b/2024/info/casual-after.md index dcb00363..24d64e34 100644 --- a/2024/info/casual-after.md +++ b/2024/info/casual-after.md @@ -1,13 +1,10 @@ <!-- Automatically generated by emacsconf-publish-after-page --> -<div class="transcript transcript-mainVideo"><a name="casual-mainVideo-transcript"></a> -# Transcript +<div class="transcript transcript-mainVideo"><a name="casual-mainVideo-transcript"></a><h1>Transcript</h1> -[[!template new="1" text="""introduction""" start="00:00:00.000" video="mainVideo-casual" id="subtitle"]] - -[[!template text="""Hello, my name is Charles Choi and welcome to my talk:""" start="00:00:00.000" video="mainVideo-casual" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""introduction""" start="00:00:00.000" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Hello, my name is Charles Choi and welcome to my talk:""" start="00:00:00.000" video="mainVideo-casual" id="subtitle"]] [[!template text=""""Reimagining the Emacs user experience with Casual Suite."""" start="00:00:05.080" video="mainVideo-casual" id="subtitle"]] [[!template text="""Casual Suite is a set of opinionated user interfaces to""" start="00:00:11.360" video="mainVideo-casual" id="subtitle"]] [[!template text="""different modes offered in Emacs. Before I get into""" start="00:00:14.920" video="mainVideo-casual" id="subtitle"]] @@ -18,9 +15,7 @@ [[!template text="""run a command directly with a pre-assigned""" start="00:00:34.082" video="mainVideo-casual" id="subtitle"]] [[!template text="""key binding, finally, use a mouse menu if it's available.""" start="00:00:36.404" video="mainVideo-casual" id="subtitle"]] -[[!template new="1" text="""Recall vs recognition""" start="00:00:43.800" video="mainVideo-casual" id="subtitle"]] - -[[!template text="""From human-computer interface research, there is a""" start="00:00:43.800" video="mainVideo-casual" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Recall vs recognition""" start="00:00:43.800" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""From human-computer interface research, there is a""" start="00:00:43.800" video="mainVideo-casual" id="subtitle"]] [[!template text="""concept of recall versus recognition in user interface""" start="00:00:46.720" video="mainVideo-casual" id="subtitle"]] [[!template text="""design. Let's show their distinction by example. A common""" start="00:00:50.800" video="mainVideo-casual" id="subtitle"]] [[!template text="""recall interface is password entry. Absent any historical""" start="00:00:56.600" video="mainVideo-casual" id="subtitle"]] @@ -46,9 +41,7 @@ [[!template text="""use it. I can only deal with so much cognitive load and""" start="00:02:23.200" video="mainVideo-casual" id="subtitle"]] [[!template text="""physically straining key bindings. So, what to do about it?""" start="00:02:28.640" video="mainVideo-casual" id="subtitle"]] -[[!template new="1" text="""Emacs with keyboard-driven menus""" start="00:02:34.800" video="mainVideo-casual" id="subtitle"]] - -[[!template text="""Let's bring back an old ideal.""" start="00:02:34.800" video="mainVideo-casual" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Emacs with keyboard-driven menus""" start="00:02:34.800" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Let's bring back an old ideal.""" start="00:02:34.800" video="mainVideo-casual" id="subtitle"]] [[!template text="""Keyboard-driven menus have been around since TTY video""" start="00:02:36.160" video="mainVideo-casual" id="subtitle"]] [[!template text="""terminals with mainframes. If you're old enough to recall""" start="00:02:42.360" video="mainVideo-casual" id="subtitle"]] [[!template text="""working with such interfaces, these terms will seem""" start="00:02:47.360" video="mainVideo-casual" id="subtitle"]] @@ -66,26 +59,20 @@ [[!template text="""and mouse menus. They all can happily coexist. Emacs is""" start="00:03:36.640" video="mainVideo-casual" id="subtitle"]] [[!template text="""large. It can contain multitudes.""" start="00:03:41.080" video="mainVideo-casual" id="subtitle"]] -[[!template new="1" text="""Transient""" start="00:03:43.400" video="mainVideo-casual" id="subtitle"]] - -[[!template text="""Conveniently, Emacs has a built-in library for building""" start="00:03:43.400" video="mainVideo-casual" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Transient""" start="00:03:43.400" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Conveniently, Emacs has a built-in library for building""" start="00:03:43.400" video="mainVideo-casual" id="subtitle"]] [[!template text="""such menus. It's called Transient, and it's been around""" start="00:03:49.880" video="mainVideo-casual" id="subtitle"]] [[!template text="""since Emacs 28. Developed primarily by Jonas Bernoulli as a""" start="00:03:53.840" video="mainVideo-casual" id="subtitle"]] [[!template text="""UI toolkit for Magit, Transient has an essential feature""" start="00:03:59.320" video="mainVideo-casual" id="subtitle"]] [[!template text="""for building great keyboard-driven interfaces.""" start="00:04:03.200" video="mainVideo-casual" id="subtitle"]] -[[!template new="1" text="""A Transient menu can be pinned""" start="00:04:08.200" video="mainVideo-casual" id="subtitle"]] - -[[!template text="""A transient menu can be pinned and their state updated as""" start="00:04:08.200" video="mainVideo-casual" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""A Transient menu can be pinned""" start="00:04:08.200" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""A transient menu can be pinned and their state updated as""" start="00:04:08.200" video="mainVideo-casual" id="subtitle"]] [[!template text="""commands are issued from them. This lets us build""" start="00:04:11.920" video="mainVideo-casual" id="subtitle"]] [[!template text="""interfaces that reflect internal state changes made by""" start="00:04:15.240" video="mainVideo-casual" id="subtitle"]] [[!template text="""commands issued from the user. This is great because many""" start="00:04:18.400" video="mainVideo-casual" id="subtitle"]] [[!template text="""modes have stateful behavior, and guess what? Emacs has a lot""" start="00:04:21.920" video="mainVideo-casual" id="subtitle"]] [[!template text="""of modes.""" start="00:04:26.600" video="mainVideo-casual" id="subtitle"]] -[[!template new="1" text="""Modes are apps, really""" start="00:04:29.303" video="mainVideo-casual" id="subtitle"]] - -[[!template text="""If you think about it, Emacs modes are akin to the""" start="00:04:29.303" video="mainVideo-casual" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Modes are apps, really""" start="00:04:29.303" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""If you think about it, Emacs modes are akin to the""" start="00:04:29.303" video="mainVideo-casual" id="subtitle"]] [[!template text="""ecosystem of apps that we see today, but with far less""" start="00:04:32.000" video="mainVideo-casual" id="subtitle"]] [[!template text="""structure and packaging. A mode, like an app, focuses on""" start="00:04:35.080" video="mainVideo-casual" id="subtitle"]] [[!template text="""delivering specific behavior to the user. There are many""" start="00:04:39.320" video="mainVideo-casual" id="subtitle"]] @@ -94,9 +81,7 @@ [[!template text="""1,000 of them. It's frustrating to know that these commands""" start="00:04:50.680" video="mainVideo-casual" id="subtitle"]] [[!template text="""are there, but I really can't access them via recall.""" start="00:04:54.880" video="mainVideo-casual" id="subtitle"]] -[[!template new="1" text="""Transient all the modes!""" start="00:04:59.527" video="mainVideo-casual" id="subtitle"]] - -[[!template text="""So I decided to do something about it, and that was to transient""" start="00:04:59.527" video="mainVideo-casual" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Transient all the modes!""" start="00:04:59.527" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""So I decided to do something about it, and that was to transient""" start="00:04:59.527" video="mainVideo-casual" id="subtitle"]] [[!template text="""all the modes, or at least the most major ones. This past""" start="00:05:05.080" video="mainVideo-casual" id="subtitle"]] [[!template text="""summer, I had the time and resources to start building""" start="00:05:10.000" video="mainVideo-casual" id="subtitle"]] [[!template text="""Transient interfaces for modes that I wanted to more""" start="00:05:12.680" video="mainVideo-casual" id="subtitle"]] @@ -104,9 +89,7 @@ [[!template text="""definition, it seemed like a good fit for the vibe that I""" start="00:05:22.320" video="mainVideo-casual" id="subtitle"]] [[!template text="""wanted these interfaces to embody.""" start="00:05:25.520" video="mainVideo-casual" id="subtitle"]] -[[!template new="1" text="""Casual design principles""" start="00:05:28.040" video="mainVideo-casual" id="subtitle"]] - -[[!template text="""Design principles that I embraced up front were""" start="00:05:28.040" video="mainVideo-casual" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Casual design principles""" start="00:05:28.040" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Design principles that I embraced up front were""" start="00:05:28.040" video="mainVideo-casual" id="subtitle"]] [[!template text="""handcrafted information architecture and layout. This is""" start="00:05:35.000" video="mainVideo-casual" id="subtitle"]] [[!template text="""largely an exercise in mapping a mode's command set to a""" start="00:05:38.240" video="mainVideo-casual" id="subtitle"]] [[!template text="""hierarchical menu structure. I wanted these menus to make""" start="00:05:41.800" video="mainVideo-casual" id="subtitle"]] @@ -119,9 +102,7 @@ [[!template text="""beholden to them. In all of the above, I've gone out of my way""" start="00:06:10.200" video="mainVideo-casual" id="subtitle"]] [[!template text="""to make clear that my design decisions are opinionated.""" start="00:06:14.920" video="mainVideo-casual" id="subtitle"]] -[[!template new="1" text="""Casual design conventions""" start="00:06:17.960" video="mainVideo-casual" id="subtitle"]] - -[[!template text="""Using casual.""" start="00:06:17.960" video="mainVideo-casual" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Casual design conventions""" start="00:06:17.960" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Using casual.""" start="00:06:17.960" video="mainVideo-casual" id="subtitle"]] [[!template text="""To reinforce habit, a common key binding is used per mode to""" start="00:06:21.720" video="mainVideo-casual" id="subtitle"]] [[!template text="""raise a main menu. This key binding is left to user""" start="00:06:30.040" video="mainVideo-casual" id="subtitle"]] [[!template text="""preference. For me, that binding is C-o.""" start="00:06:33.800" video="mainVideo-casual" id="subtitle"]] @@ -132,9 +113,7 @@ [[!template text="""As of this writing, there are 11 modes supported by Casual,""" start="00:06:58.480" video="mainVideo-casual" id="subtitle"]] [[!template text="""with several more on the way.""" start="00:07:02.320" video="mainVideo-casual" id="subtitle"]] -[[!template new="1" text="""Casual Dired""" start="00:07:04.366" video="mainVideo-casual" id="subtitle"]] - -[[!template text="""Let's look at the Casual menu""" start="00:07:04.366" video="mainVideo-casual" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Casual Dired""" start="00:07:04.366" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Let's look at the Casual menu""" start="00:07:04.366" video="mainVideo-casual" id="subtitle"]] [[!template text="""for Dired to highlight the design conventions previously""" start="00:07:05.720" video="mainVideo-casual" id="subtitle"]] [[!template text="""mentioned.""" start="00:07:12.480" video="mainVideo-casual" id="subtitle"]] [[!template text="""In a Dired Emacs window, the user can invoke their preferred""" start="00:07:13.560" video="mainVideo-casual" id="subtitle"]] @@ -165,9 +144,7 @@ [[!template text="""symbols to denote required input and submenus""" start="00:09:02.040" video="mainVideo-casual" id="subtitle"]] [[!template text="""respectively.""" start="00:09:05.880" video="mainVideo-casual" id="subtitle"]] -[[!template new="1" text="""Casual EditKit""" start="00:09:06.640" video="mainVideo-casual" id="subtitle"]] - -[[!template text="""Some commands are more global or non-mode specific in""" start="00:09:06.640" video="mainVideo-casual" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Casual EditKit""" start="00:09:06.640" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Some commands are more global or non-mode specific in""" start="00:09:06.640" video="mainVideo-casual" id="subtitle"]] [[!template text="""nature. A great deal of these commands relate to editing,""" start="00:09:13.920" video="mainVideo-casual" id="subtitle"]] [[!template text="""which I find to be a prime motivation for using Emacs. Let's""" start="00:09:18.040" video="mainVideo-casual" id="subtitle"]] [[!template text="""examine one such menu that supports this.""" start="00:09:23.240" video="mainVideo-casual" id="subtitle"]] @@ -189,9 +166,7 @@ [[!template text="""section. Note that register commands can be accessed from""" start="00:10:32.200" video="mainVideo-casual" id="subtitle"]] [[!template text="""here.""" start="00:10:35.720" video="mainVideo-casual" id="subtitle"]] -[[!template new="1" text="""EditKit demo""" start="00:10:36.200" video="mainVideo-casual" id="subtitle"]] - -[[!template text="""Okay, enough screenshots. Let's look at Casual in action""" start="00:10:36.200" video="mainVideo-casual" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""EditKit demo""" start="00:10:36.200" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Okay, enough screenshots. Let's look at Casual in action""" start="00:10:36.200" video="mainVideo-casual" id="subtitle"]] [[!template text="""with a demo of the EditKit menus. Let's start our demo of""" start="00:10:42.440" video="mainVideo-casual" id="subtitle"]] [[!template text="""casual-editkit with raising the menu, which is bound to""" start="00:10:48.440" video="mainVideo-casual" id="subtitle"]] [[!template text="""C-o. You'll see the menu pop up here. In""" start="00:10:54.440" video="mainVideo-casual" id="subtitle"]] @@ -202,9 +177,7 @@ [[!template text="""deleting the text. You'll see also that there is a submenu""" start="00:11:20.240" video="mainVideo-casual" id="subtitle"]] [[!template text="""for rectangle operations. Let's first...""" start="00:11:24.280" video="mainVideo-casual" id="subtitle"]] -[[!template new="1" text="""Marking and moving""" start="00:11:31.997" video="mainVideo-casual" id="subtitle"]] - -[[!template text="""Let's actually dig through and look at what's in the Mark submenu.""" start="00:11:31.997" video="mainVideo-casual" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Marking and moving""" start="00:11:31.997" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Let's actually dig through and look at what's in the Mark submenu.""" start="00:11:31.997" video="mainVideo-casual" id="subtitle"]] [[!template text="""You'll see that there are increments of text in which you can""" start="00:11:37.407" video="mainVideo-casual" id="subtitle"]] [[!template text="""mark. You can mark a word, a sentence, a paragraph, and""" start="00:11:42.040" video="mainVideo-casual" id="subtitle"]] [[!template text="""balanced expression. If we go back, you'll see a similar""" start="00:11:45.240" video="mainVideo-casual" id="subtitle"]] @@ -221,9 +194,7 @@ [[!template text="""menus in Casual Edit Kit, you'll see that here. Let's press""" start="00:12:43.040" video="mainVideo-casual" id="subtitle"]] [[!template text="""RET to dismiss that.""" start="00:12:47.920" video="mainVideo-casual" id="subtitle"]] -[[!template new="1" text="""Rectangles""" start="00:12:53.140" video="mainVideo-casual" id="subtitle"]] - -[[!template text="""Let's actually look at some rectangle operations here.""" start="00:12:53.140" video="mainVideo-casual" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Rectangles""" start="00:12:53.140" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Let's actually look at some rectangle operations here.""" start="00:12:53.140" video="mainVideo-casual" id="subtitle"]] [[!template text="""In this case, we have a list with""" start="00:12:58.644" video="mainVideo-casual" id="subtitle"]] [[!template text="""items x, y, and z. Let's say we wanted to prefix each item""" start="00:13:01.760" video="mainVideo-casual" id="subtitle"]] [[!template text="""here with a string. We'll say we want to put in there""" start="00:13:08.520" video="mainVideo-casual" id="subtitle"]] @@ -238,18 +209,14 @@ [[!template text="""enough, that's in there.""" start="00:13:54.800" video="mainVideo-casual" id="subtitle"]] [[!template text="""We can have access to a number of rectangle commands here.""" start="00:13:58.120" video="mainVideo-casual" id="subtitle"]] -[[!template new="1" text="""Numbering""" start="00:14:04.976" video="mainVideo-casual" id="subtitle"]] - -[[!template text="""If we wanted to, let's say, number, we can go through that same""" start="00:14:04.976" video="mainVideo-casual" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Numbering""" start="00:14:04.976" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""If we wanted to, let's say, number, we can go through that same""" start="00:14:04.976" video="mainVideo-casual" id="subtitle"]] [[!template text="""operation here, define a region, a rectangle region that""" start="00:14:11.600" video="mainVideo-casual" id="subtitle"]] [[!template text="""is, and press n. You'll see that it has incremented a""" start="00:14:16.720" video="mainVideo-casual" id="subtitle"]] [[!template text="""number for each item in that rectangle region. We can also""" start="00:14:22.680" video="mainVideo-casual" id="subtitle"]] [[!template text="""tap u to undo these operations""" start="00:14:28.640" video="mainVideo-casual" id="subtitle"]] [[!template text="""and leave that at that.""" start="00:14:32.469" video="mainVideo-casual" id="subtitle"]] -[[!template new="1" text="""Sorting""" start="00:14:36.600" video="mainVideo-casual" id="subtitle"]] - -[[!template text="""Sorting. If we select a region here, And we go back. You'll""" start="00:14:36.600" video="mainVideo-casual" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Sorting""" start="00:14:36.600" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Sorting. If we select a region here, And we go back. You'll""" start="00:14:36.600" video="mainVideo-casual" id="subtitle"]] [[!template text="""see that the sort submenu is now enabled. Sorting won't work""" start="00:14:47.240" video="mainVideo-casual" id="subtitle"]] [[!template text="""unless you have a region started. That's one of the nice""" start="00:14:52.400" video="mainVideo-casual" id="subtitle"]] [[!template text="""things about transient is that it allows you to visually""" start="00:14:56.240" video="mainVideo-casual" id="subtitle"]] @@ -276,18 +243,14 @@ [[!template text="""want to check or use the value 2 and press n. Sure enough,""" start="00:16:52.120" video="mainVideo-casual" id="subtitle"]] [[!template text="""that region is sorted with respect to the second column.""" start="00:16:58.680" video="mainVideo-casual" id="subtitle"]] -[[!template new="1" text="""Casual has transformed my user experience with Emacs""" start="00:17:04.340" video="mainVideo-casual" id="subtitle"]] - -[[!template text="""Before Casual, so many powerful Emacs commands were not""" start="00:17:04.340" video="mainVideo-casual" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Casual has transformed my user experience with Emacs""" start="00:17:04.340" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Before Casual, so many powerful Emacs commands were not""" start="00:17:04.340" video="mainVideo-casual" id="subtitle"]] [[!template text="""available to me because they were too hard to recall or I""" start="00:17:12.160" video="mainVideo-casual" id="subtitle"]] [[!template text="""could not discover them. Making Casual has changed that,""" start="00:17:15.560" video="mainVideo-casual" id="subtitle"]] [[!template text="""letting me reimagine more positively my user experience""" start="00:17:19.880" video="mainVideo-casual" id="subtitle"]] [[!template text="""with Emacs. If you're interested in any of what I've shown""" start="00:17:24.360" video="mainVideo-casual" id="subtitle"]] [[!template text="""today, I invite you to try out Casual.""" start="00:17:29.200" video="mainVideo-casual" id="subtitle"]] -[[!template new="1" text="""Thanks and acknowledgements""" start="00:17:34.451" video="mainVideo-casual" id="subtitle"]] - -[[!template text="""Before I leave, my thanks and acknowledgments""" start="00:17:34.451" video="mainVideo-casual" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Thanks and acknowledgements""" start="00:17:34.451" video="mainVideo-casual" id="subtitle"]]</div>[[!template text="""Before I leave, my thanks and acknowledgments""" start="00:17:34.451" video="mainVideo-casual" id="subtitle"]] [[!template text="""go out to the following people.""" start="00:17:37.033" video="mainVideo-casual" id="subtitle"]] [[!template text="""First, to Jonas Bernoulli for making Transient and Magit.""" start="00:17:38.680" video="mainVideo-casual" id="subtitle"]] [[!template text="""Casual would not be possible without your work. Next, to""" start="00:17:43.400" video="mainVideo-casual" id="subtitle"]] |