# Beyond Vim and Emacs: A Scalable UI Paradigm Sid Kasivajhula [[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.webm" subtitles="/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt" size="161MB"]] [Download compressed .webm video (45.1M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula--vp9-q56-video-original-audio.webm) [View transcript](#transcript) [[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.webm" subtitles="/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.vtt" size="40MB"]] [Download compressed .webm video (5M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula--vp9-q56-video-original-audio.webm) A practiced dexterity with the arcane incantations known as keybindings is the true mark of the veteran Emacs user. Yet, it takes years to get there, and if you tried to explain what you were doing there, nobody would understand, least of all those Vim users who would say that the whole enterprise was foolhardy to begin with. They don't get it, those fools. Let them flounder about in their "normal mode." Normal isn't good enough for me! I want exceptional, IDEAL, I want… glorious mode, that's what I want. And the only thing that'll cut it is if I do it … my way. Why, with my precious emacs.d, I'm invincible! Well… just between you and me, there are times when learning new keybindings every time someone makes a new toy gets to be a bit of a drag, and some days I can't keep my C-c's and my C-c C-c's straight if I'm being honest with you, but you'll never catch me admitting it! I do wonder if there's a better way to get to glorious mode, even though my .emacs.d is already perfect (of course). If this secretly sounds like you, then rejoice, there just might be a new way, a better way! And you could potentially get there in days instead of years, so that even your script kiddie coworker with their "VSCode" (groan) may at last come around to your way of looking at things, and, maybe, just maybe, even those Vim users (hiss!)! "Epistemic" Emacs is a user interface paradigm based on treating aspects of the user interface as conceptual entities that can be reasoned about in terms of a standard language. Essentially, instead of learning keybindings for each specific action, you learn keybindings for general, conceptual habits, kind of like Vim, except that instead of reasoning only about text, you reason about any aspect of your interaction with the machine, whether it's windows or buffers or even those interactions themselves. The promise of this approach is that you just learn a simple language once, and you can then apply it to vastly different aspects of your user interface, with the same keybindings doing different things in different contexts, in sensible and predictable ways. And in principle, whenever that new toy technology comes around, anyone could extend the UI language to apply to it in a matter of minutes, and you'd already know how to use it. ### Actual start and end time (EST) - Start: 2020-11-28T11.00.47 - Q&A: 2020-11-28T11.18.12 - End: 2020-11-28T11.24.51 # Questions ## Can minor-modes in Emacs be integrated via chimera as a "mode"? Good question. If it is already a "modal"-like minor mode, then we ocould potentially do it this way. But in general, it could make sense to couple minor modes to rigpa "modes", towers (sets of modes), or complexes (sets of towers), so that entering those modes/towers would enable those minor modes, and likewise disable the minor modes upon exiting. E.g. for Lisp editing, we might want to enable the symex / paredit minor mode in Lisp tower, and disable it upon swapping to Vim / Emacs tower. ## Do you think it would be hard for people to remember all the modes and bindings? - Bindings, no - it would be easier than currently because the bindings generally stay the same across modes (e.g. hjkl always means left down up right, and there are other conventions). - Modes, if the tower is 2-3 tall, then it's not a problem at all. Totally intuitive. For > 3 it might be hard, so I think in practice you would alternate across more small towers rather than have fewer big towers. - Also, most modes are always available via "direct access" keybinding (eg. s-w = window mode), so you can jump to one at any time, and it'll return you to your original position in the tower when you exit. Modes don't need to be in the current tower in order for you to use them. But if you're using them frequently you might want to add them or temporarily switch to a tower that has them – whatever feels the most natural for the specific case. ## Are you familiar with ? And other earlier implementations. A short comparison would be nice. Not familiar with this, but it looks very interesting. From a quick look, I can say that versors is partially related to rigpa, in that its "cursors" roughly correspond to noun modes. Rigpa isn't limited to noun modes, though. For instance Vim's normal mode contains many nouns and a special command language. On the other hand, Emacs's usual editing behavior doesn't think in terms of nouns at all and has a myriad of ad hoc keybindings. Yet, both are rigpa modes, along with modes like window-mode and buffer-mode which each correspond to individual nouns (like versor). Rigpa is less about the nature of the modes (about which it is relatively unopinionated, although noun-specific modes may be a common choice) than it is about the relationship between modes, the ability to structure them and interrelate them and configure them on the fly. ## What package is used? - Probably Symex mode! → . - The package isn't yet published to MELPA → (was called indra.el). - The mode is called 'epistemic-mode' (final name is not decided on yet). ## Why is the package called rigpa? A reference: (knowledge of the ground). ## How to deal with Dvorak (et al.) layouts? This has always bugged me. Is there a "XModmap Mode"…? - Vim users don't remap their keys. The homerow is not a big deal, actually. - Hm… I've always found it a bit of an obstacle but haven't tried hard! hjkl → jk makes sense but hl, not so much. - The day you want to do this, you'll absolutely be able to do it and have it become natural. Just gotta want it :) ## I mostly use default model provided by vanilla Emacs and work in Org mode for text editing. Can you give some examples, e.g. how can the user can use the concept of "mode of mode" to do some interesting editing? - The more modes you have, the shorter the individual keystrokes become. - ^ Not to be a pain but my comment about Dvorak is related :-) - There are many bindings in Org mode (e.g. agenda manipulation, manipulating headings and subheadings, promoting/demoting) that would be a natural fit for a dedicated modal interface. At the moment you probably use only a subset of all of the available options because of the constraints of conveniently (1) knowing about, (2) remembering and (3) using the bindings. With a dedicated mode, you could edit Org buffers using a Vim-like modal interface where all of the options are easy to remember and use. - Mode mode / tower mode could be useful if you are doing literate programming or "multi-modal" Org buffers where you have many different languages embedded within the Org file. In this case, you could modify your tower using mode mode, or swap between different towers, to quickly have the right modes for different parts of the file. ## How do new modes come into existence? - Modes from any modal interface provider are supported via a modal interface abstraction layer ("chimera"). - You can define new modes as a hydra or as an evil state, and then they just need to be "registered" with the framework via a function call for them to be incorporated. ## Is this built on top of Hydra? - Any modal interface provider is in principle supported. There is an abstraction layer called "chimera" that allows any provider to be used as long as it implements an interface (e.g. including indicating entry and exit hooks for each mode). - Some of the modes are evil modes (e.g. normal, insert). - While others are hydras (window, buffer, etc) (including Symex? yes, Symex too). ## Which retro theme are you using? green phosphor. ## Will this involve defining more epistemic-modes for non-editable buffers like Dired? How do you deal with the explosion of the number of modes? - This is a great question, so here is a long answer: - I am keen to keep this extension lightweight so that it plays well with existing Emacs tools without needing a custom ecosystem. The modal interface abstraction layer "chimera" would be a big part of this, enabling existing modal-like interfaces to be recognized in the framework out of the box, meaning that they would be automatically "wired into" the broader framework via the standard exits (e.g. Escape and Enter). - I'm not sure what the best way to handle dired would be, but if it could be handled in this way, then that would be the way to do it. - The "complex" of towers initially available is tied to major mode, that takes away some of the complexity right off the bat. E.g. when you open a Lisp file it gives you a Lisp-related + general-purpose complex of towers. - The idea is to support the "explosion" of modes, but make it scale well by (1) having them be structured, and (2) the structure being the same at every level ## How do you deal with the mental overhead of keeping a stack of modes and your position in it? While this simplifies the actual editing process by defining them as a single set of keybindings, the complexity is transferred to navigating modes. - While the complexity is transferred, the nature of that complexity is different. In the case of keybindings, the complexity is unstructured and ad hoc, whereas in the case of mode navigation, it's a matter of "going to the right place" for your keys to have the right meaning. - In practice you would only have towers of size 2-3 I would guess, with every other mode jump always being available via an ad hoc jump (e.g. even in Vim tower, you can always jump to Window mode and it would return you to the original mode you were in upon exit). - And the main paradigm would be swapping between small towers. # Notes - Indra's Net: . - "We are at a higher level looking down at the text, we can describe this text…". - "There is a way to go down to ground level, and a way to escape from that to the referential level". - "All of the nouns of the world of text are available". - …. Or you could have a dedicated mode for every noun — Nouns as modes. - Character, Word, Line mode; Window mode! All with the same basic keystrokes. - "Rumpelstiltskin Principle" from CS — if you can name something you have power over it. - modes of modes → "Mode mode" (the modes that are present in the buffer). - Such a refreshing point of view. - Tower mode → ?? "There are many towers available for use in different buffers". - Cf. . - Not a real mode, but a "referential plane". - Demos "Strange Loop". - Two directions: sideways changes perspective (normal, word, line) all different perspectives; up or down (takes you through meta levels). - Unknown meta level → same basic interactions. - formerly called epistemic-mode, now called rigpa (concept in Tibetan Buddhism, in Dzogchen teaching, or the great completion). - Similar idea from # Transcript [[!template new="1" text=""Far away in the heavenly abode" start="00:00:02.960" video="mainVideo" id=subtitle]] [[!template text="of the great god Indra," start="00:00:04.644" video="mainVideo" id=subtitle]] [[!template text="there is a wonderful net" start="00:00:06.560" video="mainVideo" id=subtitle]] [[!template text="which has been hung by some cunning artificer" start="00:00:07.688" video="mainVideo" id=subtitle]] [[!template text="in such a manner that it stretches out" start="00:00:10.160" video="mainVideo" id=subtitle]] [[!template text="infinitely in all directions." start="00:00:12.080" video="mainVideo" id=subtitle]] [[!template text="In accordance with the extravagant tastes of deities," start="00:00:14.320" video="mainVideo" id=subtitle]] [[!template text="the artificer has hung" start="00:00:16.938" video="mainVideo" id=subtitle]] [[!template text="a single glittering jewel" start="00:00:18.240" video="mainVideo" id=subtitle]] [[!template text="in each eye of the net," start="00:00:20.277" video="mainVideo" id=subtitle]] [[!template text="and since the net itself is infinite," start="00:00:22.080" video="mainVideo" id=subtitle]] [[!template text="the jewels are infinite in number." start="00:00:23.859" video="mainVideo" id=subtitle]] [[!template text="There hang the jewels," start="00:00:26.480" video="mainVideo" id=subtitle]] [[!template text="glittering like stars in the first magnitude," start="00:00:27.642" video="mainVideo" id=subtitle]] [[!template text="a wonderful sight to behold." start="00:00:30.480" video="mainVideo" id=subtitle]] [[!template text="Were we to select one of these jewels for inspection," start="00:00:32.681" video="mainVideo" id=subtitle]] [[!template text="we would discover that in its polished surface" start="00:00:35.680" video="mainVideo" id=subtitle]] [[!template text="there are reflected" start="00:00:38.216" video="mainVideo" id=subtitle]] [[!template text="all the other jewels in the net," start="00:00:39.520" video="mainVideo" id=subtitle]] [[!template text="infinite in number." start="00:00:41.451" video="mainVideo" id=subtitle]] [[!template text="If we look still more closely," start="00:00:43.360" video="mainVideo" id=subtitle]] [[!template text="we would see that each of the jewels reflected in this one jewel" start="00:00:45.140" video="mainVideo" id=subtitle]] [[!template text="reflects all the others."" start="00:00:48.960" video="mainVideo" id=subtitle]] [[!template text="This is the metaphor of Indra's Net," start="00:00:51.264" video="mainVideo" id=subtitle]] [[!template text="which is told in some schools of philosophy." start="00:00:54.000" video="mainVideo" id=subtitle]] [[!template text="Let's keep this metaphor in mind," start="00:00:57.615" video="mainVideo" id=subtitle]] [[!template text="because it'll help us understand" start="00:01:00.160" video="mainVideo" id=subtitle]] [[!template text="the Emacs extension that we're about to discuss." start="00:01:01.773" video="mainVideo" id=subtitle]] [[!template new="1" text="In editing text, there's two main paradigms:" start="00:01:06.960" video="mainVideo" id=subtitle]] [[!template text="one is editing at the ground level," start="00:01:12.810" video="mainVideo" id=subtitle]] [[!template text="where the characters that we type" start="00:01:16.880" video="mainVideo" id=subtitle]] [[!template text="actually appear on the screen," start="00:01:19.439" video="mainVideo" id=subtitle]] [[!template text="the changes we make actually occur." start="00:01:22.159" video="mainVideo" id=subtitle]] [[!template text="The other editing paradigm" start="00:01:28.479" video="mainVideo" id=subtitle]] [[!template text="is where we escape to a higher level" start="00:01:30.126" video="mainVideo" id=subtitle]] [[!template text="and now the characters that we type are not..." start="00:01:33.439" video="mainVideo" id=subtitle]] [[!template text="They don't actually appear on the screen" start="00:01:36.479" video="mainVideo" id=subtitle]] [[!template text="because we're not at the ground level with the text," start="00:01:39.040" video="mainVideo" id=subtitle]] [[!template text="we are at a higher level" start="00:01:42.748" video="mainVideo" id=subtitle]] [[!template text="looking down at the text" start="00:01:44.799" video="mainVideo" id=subtitle]] [[!template text="and regarding the text," start="00:01:48.479" video="mainVideo" id=subtitle]] [[!template text="referring to this world of text in terms of a language." start="00:01:50.773" video="mainVideo" id=subtitle]] [[!template new="1" text="For instance, we could describe this" start="00:01:56.159" video="mainVideo" id=subtitle]] [[!template text="world as having words and paragraphs and sentences and lines and so on." start="00:01:57.920" video="mainVideo" id=subtitle]] [[!template text="We could reason about this text" start="00:02:03.404" video="mainVideo" id=subtitle]] [[!template text="in terms of these textual entities and this textual language." start="00:02:05.985" video="mainVideo" id=subtitle]] [[!template text="This is the second paradigm of text editing." start="00:02:13.120" video="mainVideo" id=subtitle]] [[!template text="When we're in the second paradigm," start="00:02:18.640" video="mainVideo" id=subtitle]] [[!template text="there is a way to go down to ground level." start="00:02:22.800" video="mainVideo" id=subtitle]] [[!template text="You hit Enter now--or we'll hit Enter to go down to the ground level," start="00:02:25.304" video="mainVideo" id=subtitle]] [[!template text="and you can hit Escape" start="00:02:28.997" video="mainVideo" id=subtitle]] [[!template text="to go back out to the referential level." start="00:02:30.480" video="mainVideo" id=subtitle]] [[!template text="Enter to go down to ground level" start="00:02:33.200" video="mainVideo" id=subtitle]] [[!template text="and Escape to go up to the referential level." start="00:02:35.200" video="mainVideo" id=subtitle]] [[!template new="1" text="Now, in Vim, the nouns in this world of text" start="00:02:40.160" video="mainVideo" id=subtitle]] [[!template text="all share the same referential plane which we call normal mode." start="00:02:47.565" video="mainVideo" id=subtitle]] [[!template text="So in normal mode, all of the nouns" start="00:02:52.319" video="mainVideo" id=subtitle]] [[!template text="of the world of text are available," start="00:02:54.959" video="mainVideo" id=subtitle]] [[!template text="whether it's words or sentences or paragraphs," start="00:02:57.360" video="mainVideo" id=subtitle]] [[!template text="and they all share this same referential plane." start="00:03:00.959" video="mainVideo" id=subtitle]] [[!template text="They compete for space on the keyboard." start="00:03:08.319" video="mainVideo" id=subtitle]] [[!template new="1" text="An alternative way to structure these modes is" start="00:03:12.720" video="mainVideo" id=subtitle]] [[!template text="instead of having a single mode where all the nouns coexist," start="00:03:17.037" video="mainVideo" id=subtitle]] [[!template text="peacefully or otherwise," start="00:03:21.840" video="mainVideo" id=subtitle]] [[!template text="you instead have a dedicated mode for every noun." start="00:03:24.005" video="mainVideo" id=subtitle]] [[!template text="In that case, what happens is" start="00:03:30.400" video="mainVideo" id=subtitle]] [[!template text="because your modal spaces are now much smaller," start="00:03:32.540" video="mainVideo" id=subtitle]] [[!template text="you're just talking about words or paragraphs or lines or something," start="00:03:35.440" video="mainVideo" id=subtitle]] [[!template text="the keys that you use" start="00:03:40.593" video="mainVideo" id=subtitle]] [[!template text="can be much more targeted." start="00:03:42.560" video="mainVideo" id=subtitle]] [[!template text="You can use the same keystrokes" start="00:03:45.760" video="mainVideo" id=subtitle]] [[!template text="in all of your modes and they would have" start="00:03:48.560" video="mainVideo" id=subtitle]] [[!template text="the same ideas behind them," start="00:03:50.400" video="mainVideo" id=subtitle]] [[!template text="but they would have different effects" start="00:03:51.845" video="mainVideo" id=subtitle]] [[!template text="depending on which context you're using." start="00:03:53.280" video="mainVideo" id=subtitle]] [[!template text="It's the same keystrokes, different contexts." start="00:03:55.519" video="mainVideo" id=subtitle]] [[!template text="The advantage of that is it's often easier to change context" start="00:03:59.120" video="mainVideo" id=subtitle]] [[!template text="than it is to learn new key bindings." start="00:04:04.244" video="mainVideo" id=subtitle]] [[!template new="1" text="So let's see an example of how that works." start="00:04:07.888" video="mainVideo" id=subtitle]] [[!template text="We go into character mode, and if you look at the mode line" start="00:04:11.289" video="mainVideo" id=subtitle]] [[!template text="at the bottom of the screen there," start="00:04:14.039" video="mainVideo" id=subtitle]] [[!template text="you'll see that we're in character mode." start="00:04:15.439" video="mainVideo" id=subtitle]] [[!template text="Now, when we move up, down, left, and right," start="00:04:18.720" video="mainVideo" id=subtitle]] [[!template text="we're moving by character." start="00:04:21.955" video="mainVideo" id=subtitle]] [[!template text="We can also transform the text," start="00:04:23.919" video="mainVideo" id=subtitle]] [[!template text="and the transformations occur in terms of character." start="00:04:28.088" video="mainVideo" id=subtitle]] [[!template text="You can also go into word mode." start="00:04:32.400" video="mainVideo" id=subtitle]] [[!template text="In word mode, the transformations that you do are on words." start="00:04:34.207" video="mainVideo" id=subtitle]] [[!template text="and you try... Your movement is also in terms of words." start="00:04:40.000" video="mainVideo" id=subtitle]] [[!template text="So that's the level of granularity that you have." start="00:04:43.440" video="mainVideo" id=subtitle]] [[!template text="You could also go to line mode." start="00:04:46.560" video="mainVideo" id=subtitle]] [[!template text="When you're in line mode," start="00:04:49.191" video="mainVideo" id=subtitle]] [[!template text="you go up and down by line," start="00:04:50.720" video="mainVideo" id=subtitle]] [[!template text="and you can move lines" start="00:04:52.901" video="mainVideo" id=subtitle]] [[!template text="up and down left and right and so on." start="00:04:54.240" video="mainVideo" id=subtitle]] [[!template text="The transformations you do are in" start="00:04:59.120" video="mainVideo" id=subtitle]] [[!template text="terms of lines." start="00:05:00.880" video="mainVideo" id=subtitle]] [[!template text="You could also go to window mode," start="00:05:02.800" video="mainVideo" id=subtitle]] [[!template text="where now the objects that you're referring to are windows." start="00:05:07.682" video="mainVideo" id=subtitle]] [[!template text="You can move spatially amongst the windows" start="00:05:11.695" video="mainVideo" id=subtitle]] [[!template text="or do transformations on the windows" start="00:05:15.578" video="mainVideo" id=subtitle]] [[!template text="using the same keystrokes." start="00:05:17.520" video="mainVideo" id=subtitle]] [[!template text="So let's go to..." start="00:05:25.360" video="mainVideo" id=subtitle]] [[!template new="1" text="Right. One of the things," start="00:05:28.720" video="mainVideo" id=subtitle]] [[!template text="the principles at play here" start="00:05:32.800" video="mainVideo" id=subtitle]] [[!template text="is something called the Rumpelstiltskin principle," start="00:05:35.114" video="mainVideo" id=subtitle]] [[!template text="which is something that's known in computer science." start="00:05:37.266" video="mainVideo" id=subtitle]] [[!template text="If you can name something," start="00:05:40.720" video="mainVideo" id=subtitle]] [[!template text="then you have power over it." start="00:05:42.113" video="mainVideo" id=subtitle]] [[!template text="This is kind of an adaptation of that principle" start="00:05:45.824" video="mainVideo" id=subtitle]] [[!template text="which says that if you can name something" start="00:05:48.560" video="mainVideo" id=subtitle]] [[!template text="and if you can talk about it," start="00:05:51.123" video="mainVideo" id=subtitle]] [[!template text="then it's a noun in your editing language." start="00:05:52.572" video="mainVideo" id=subtitle]] [[!template text="If it's a noun, then it has..." start="00:05:56.334" video="mainVideo" id=subtitle]] [[!template text="It's a mode. So if we can talk about it, it's a noun." start="00:05:58.960" video="mainVideo" id=subtitle]] [[!template text="If it's a noun, then it's a mode." start="00:06:02.319" video="mainVideo" id=subtitle]] [[!template new="1" text="One of the things we've been talking a lot about is modes." start="00:06:04.818" video="mainVideo" id=subtitle]] [[!template text="In fact, by this principle," start="00:06:08.919" video="mainVideo" id=subtitle]] [[!template text="modes also should be a mode." start="00:06:12.699" video="mainVideo" id=subtitle]] [[!template text="You should have a mode that can reason" start="00:06:17.280" video="mainVideo" id=subtitle]] [[!template text="in terms of modes as objects," start="00:06:19.039" video="mainVideo" id=subtitle]] [[!template text="just like you have modes" start="00:06:20.639" video="mainVideo" id=subtitle]] [[!template text="where you can reason in terms of" start="00:06:22.300" video="mainVideo" id=subtitle]] [[!template text="words or lines as objects." start="00:06:23.759" video="mainVideo" id=subtitle]] [[!template new="1" text="So let's do that. Let's go to mode mode." start="00:06:26.560" video="mainVideo" id=subtitle]] [[!template text="When you go to mode mode, you see that" start="00:06:30.479" video="mainVideo" id=subtitle]] [[!template text="the objects that are depicted here" start="00:06:34.000" video="mainVideo" id=subtitle]] [[!template text="are the modes that are present in the buffer," start="00:06:35.915" video="mainVideo" id=subtitle]] [[!template text="which we knew about because" start="00:06:40.960" video="mainVideo" id=subtitle]] [[!template text="the style of editing that we had in this buffer" start="00:06:44.500" video="mainVideo" id=subtitle]] [[!template text="was the Vim style of editing" start="00:06:46.797" video="mainVideo" id=subtitle]] [[!template text="where there's an insert mode at the ground level" start="00:06:48.720" video="mainVideo" id=subtitle]] [[!template text="and a normal mode that you can escape to." start="00:06:51.143" video="mainVideo" id=subtitle]] [[!template text="You insert, enter the ground level." start="00:06:53.039" video="mainVideo" id=subtitle]] [[!template text="Enter to the insert mode and escape to normal mode." start="00:06:57.280" video="mainVideo" id=subtitle]] [[!template text="When you look at the mode mode representation," start="00:07:01.352" video="mainVideo" id=subtitle]] [[!template text="you see that in fact that" start="00:07:04.647" video="mainVideo" id=subtitle]] [[!template text="is the structure that's depicted." start="00:07:06.160" video="mainVideo" id=subtitle]] [[!template text="But in different situations, you might find" start="00:07:10.479" video="mainVideo" id=subtitle]] [[!template text="that these modes are not the" start="00:07:14.080" video="mainVideo" id=subtitle]] [[!template text="ones that you want." start="00:07:16.080" video="mainVideo" id=subtitle]] [[!template text="You want something more tailored for the specific application." start="00:07:16.922" video="mainVideo" id=subtitle]] [[!template text="For instance, if you're editing Lisp code" start="00:07:20.880" video="mainVideo" id=subtitle]] [[!template text="(or code in general, but" start="00:07:25.065" video="mainVideo" id=subtitle]] [[!template text="Lisp code is a particular example)," start="00:07:27.360" video="mainVideo" id=subtitle]] [[!template text="you might want to take advantage" start="00:07:30.880" video="mainVideo" id=subtitle]] [[!template text="of the structure of the code." start="00:07:32.640" video="mainVideo" id=subtitle]] [[!template text="For Lisp code in particular," start="00:07:34.852" video="mainVideo" id=subtitle]] [[!template text="we have a mode called symex-mode" start="00:07:37.599" video="mainVideo" id=subtitle]] [[!template text="which is able to reason about your code" start="00:07:40.960" video="mainVideo" id=subtitle]] [[!template text="in terms of its tree structure." start="00:07:45.414" video="mainVideo" id=subtitle]] [[!template text="So you can use the same keystrokes: hjkl goes left, right, up, and down," start="00:07:47.919" video="mainVideo" id=subtitle]] [[!template text="but you also have other keystrokes that are more specialized to the application." start="00:07:52.397" video="mainVideo" id=subtitle]] [[!template text="You can run the code." start="00:07:58.080" video="mainVideo" id=subtitle]] [[!template text="We'll see that happen here in a minute." start="00:08:01.520" video="mainVideo" id=subtitle]] [[!template text="You can make changes to it really quickly" start="00:08:06.960" video="mainVideo" id=subtitle]] [[!template text="and see the effects of those changes." start="00:08:12.240" video="mainVideo" id=subtitle]] [[!template text="You're doing this all in a mode" start="00:08:18.000" video="mainVideo" id=subtitle]] [[!template text="that's convenient for this particular application," start="00:08:19.440" video="mainVideo" id=subtitle]] [[!template text="which is editing Lisp code," start="00:08:22.625" video="mainVideo" id=subtitle]] [[!template text="and that is, in this case, symex-mode." start="00:08:25.039" video="mainVideo" id=subtitle]] [[!template new="1" text="Typically, when you're editing code like this," start="00:08:28.960" video="mainVideo" id=subtitle]] [[!template text="you'd want to be in insert mode" start="00:08:31.631" video="mainVideo" id=subtitle]] [[!template text="actually typing out the code," start="00:08:33.435" video="mainVideo" id=subtitle]] [[!template text="and then you'd want to escape to symex mode rather than normal mode," start="00:08:36.640" video="mainVideo" id=subtitle]] [[!template text="and then you could escape again" start="00:08:40.959" video="mainVideo" id=subtitle]] [[!template text="and you'd end up in normal mode." start="00:08:42.021" video="mainVideo" id=subtitle]] [[!template text="So this, if we go to mode mode, we see is depicted" start="00:08:44.080" video="mainVideo" id=subtitle]] [[!template text="as this tower where insert is at the" start="00:08:48.000" video="mainVideo" id=subtitle]] [[!template text="bottom and normal is at the top," start="00:08:51.040" video="mainVideo" id=subtitle]] [[!template text="but symex-mode is in between the two." start="00:08:52.604" video="mainVideo" id=subtitle]] [[!template text="You could also change that if you like." start="00:08:55.305" video="mainVideo" id=subtitle]] [[!template text="If you don't want symex-mode to be there," start="00:08:57.551" video="mainVideo" id=subtitle]] [[!template text="you could just move it to the top." start="00:08:59.566" video="mainVideo" id=subtitle]] [[!template text="Now you find symex is at the top" start="00:09:02.187" video="mainVideo" id=subtitle]] [[!template text="and you enter down to normal." start="00:09:04.392" video="mainVideo" id=subtitle]] [[!template text="You can see it on the status bar at the bottom there." start="00:09:06.160" video="mainVideo" id=subtitle]] [[!template text="Enter to insert, escape to normal, escape to symex." start="00:09:08.848" video="mainVideo" id=subtitle]] [[!template text="In fact, you can even add more modes" start="00:09:13.839" video="mainVideo" id=subtitle]] [[!template text="if you don't like the existing ones." start="00:09:16.344" video="mainVideo" id=subtitle]] [[!template text="Now we have an additional mode here." start="00:09:21.519" video="mainVideo" id=subtitle]] [[!template text="We have window mode. It goes down to symex," start="00:09:23.839" video="mainVideo" id=subtitle]] [[!template text="it goes down to normal." start="00:09:25.855" video="mainVideo" id=subtitle]] [[!template text="Enter the insert, escape to normal," start="00:09:27.519" video="mainVideo" id=subtitle]] [[!template text="escape to symex, escape to window." start="00:09:29.919" video="mainVideo" id=subtitle]] [[!template new="1" text="So we've talked... Okay, so another thing actually to note here" start="00:09:33.600" video="mainVideo" id=subtitle]] [[!template text="is that in editing modes," start="00:09:41.232" video="mainVideo" id=subtitle]] [[!template text="if you look at the mode line" start="00:09:45.360" video="mainVideo" id=subtitle]] [[!template text="at the bottom of the screen," start="00:09:46.486" video="mainVideo" id=subtitle]] [[!template text="you'll see that we are currently," start="00:09:48.399" video="mainVideo" id=subtitle]] [[!template text="in this buffer," start="00:09:50.257" video="mainVideo" id=subtitle]] [[!template text="we are currently in line mode." start="00:09:51.519" video="mainVideo" id=subtitle]] [[!template text="I'm going to hit Enter now" start="00:09:54.560" video="mainVideo" id=subtitle]] [[!template text="and you'll see that when I hit Enter," start="00:09:57.296" video="mainVideo" id=subtitle]] [[!template text="nothing is happening." start="00:09:59.119" video="mainVideo" id=subtitle]] [[!template text="It's still in line mode." start="00:10:00.627" video="mainVideo" id=subtitle]] [[!template text="If you hit Escape, it's still in line mode." start="00:10:02.160" video="mainVideo" id=subtitle]] [[!template text="You can find out the reason for that" start="00:10:05.120" video="mainVideo" id=subtitle]] [[!template text="by taking another meta jump out of this." start="00:10:07.200" video="mainVideo" id=subtitle]] [[!template text="You'll see that, in fact, the reason" start="00:10:10.640" video="mainVideo" id=subtitle]] [[!template text="is that we're currently in line mode," start="00:10:12.800" video="mainVideo" id=subtitle]] [[!template text="and line mode is the only one available" start="00:10:15.279" video="mainVideo" id=subtitle]] [[!template text="in this tower" start="00:10:17.360" video="mainVideo" id=subtitle]] [[!template text="for editing the modes that are" start="00:10:19.519" video="mainVideo" id=subtitle]] [[!template text="in operation in your ground level." start="00:10:21.556" video="mainVideo" id=subtitle]] [[!template text="In fact, line mode is all you need here," start="00:10:24.880" video="mainVideo" id=subtitle]] [[!template text="because this is just the nature of how these modes are laid out is in rows." start="00:10:26.898" video="mainVideo" id=subtitle]] [[!template text="So line mode is the most appropriate thing here." start="00:10:32.796" video="mainVideo" id=subtitle]] [[!template text="But you could change it to something else if you like." start="00:10:36.399" video="mainVideo" id=subtitle]] [[!template new="1" text="Now we've seen two towers." start="00:10:40.959" video="mainVideo" id=subtitle]] [[!template text="We've seen the Vim tower and we've seen also the symex tower, the Lisp tower." start="00:10:43.659" video="mainVideo" id=subtitle]] [[!template text="It turns out that, because we've been talking about towers now," start="00:10:53.680" video="mainVideo" id=subtitle]] [[!template text="by the Rumpelstiltskin principle, towers also can be talked about," start="00:10:58.880" video="mainVideo" id=subtitle]] [[!template text="and therefore they also are a mode." start="00:11:06.399" video="mainVideo" id=subtitle]] [[!template text="So how do we go to tower mode?" start="00:11:09.127" video="mainVideo" id=subtitle]] [[!template text="The way we go to tower mode is" start="00:11:11.200" video="mainVideo" id=subtitle]] [[!template text="we go in a slightly different direction," start="00:11:14.640" video="mainVideo" id=subtitle]] [[!template text="and we find that we are now in tower mode." start="00:11:19.200" video="mainVideo" id=subtitle]] [[!template text="We see that there are many towers available. We're now..." start="00:11:23.360" video="mainVideo" id=subtitle]] [[!template text="We're seeing several possible towers" start="00:11:29.279" video="mainVideo" id=subtitle]] [[!template text="that we have written to be available and for use in different buffers." start="00:11:33.440" video="mainVideo" id=subtitle]] [[!template text="You can edit them on the fly." start="00:11:40.344" video="mainVideo" id=subtitle]] [[!template text="For instance, let's enter this tower." start="00:11:42.110" video="mainVideo" id=subtitle]] [[!template text="Now you see that in the bottom of the..." start="00:11:48.000" video="mainVideo" id=subtitle]] [[!template text="In the mode line, you see that we're" start="00:11:50.180" video="mainVideo" id=subtitle]] [[!template text="going across all of these different modes" start="00:11:51.519" video="mainVideo" id=subtitle]] [[!template text="that were in the tower." start="00:11:53.944" video="mainVideo" id=subtitle]] [[!template text="You could escape and you could even move things around." start="00:11:56.480" video="mainVideo" id=subtitle]] [[!template text="You could put window mode" start="00:11:59.724" video="mainVideo" id=subtitle]] [[!template text="all the way at the bottom," start="00:12:00.880" video="mainVideo" id=subtitle]] [[!template text="right above insert mode." start="00:12:02.573" video="mainVideo" id=subtitle]] [[!template text="Let's see that happen. There it is," start="00:12:04.079" video="mainVideo" id=subtitle]] [[!template text="window is right above insert, and so on." start="00:12:06.479" video="mainVideo" id=subtitle]] [[!template text="The tower always reflects your current position," start="00:12:10.444" video="mainVideo" id=subtitle]] [[!template text="so if you're in buffer mode here and you go down to line mode," start="00:12:14.240" video="mainVideo" id=subtitle]] [[!template text="when you go back to mode mode, you see that we are in line mode." start="00:12:17.600" video="mainVideo" id=subtitle]] [[!template text="But in practice, you wouldn't have a tower this elaborate" start="00:12:22.480" video="mainVideo" id=subtitle]] [[!template text="because you'd rather have several smaller towers you enter," start="00:12:25.620" video="mainVideo" id=subtitle]] [[!template text="that you alternate between." start="00:12:29.440" video="mainVideo" id=subtitle]] [[!template new="1" text="Okay. So one other thing of interest here is that" start="00:12:33.360" video="mainVideo" id=subtitle]] [[!template text="when you're in tower mode," start="00:12:39.839" video="mainVideo" id=subtitle]] [[!template text="if you look at the status line at the bottom there," start="00:12:42.240" video="mainVideo" id=subtitle]] [[!template text="we are currently in buffer mode while we are in tower mode." start="00:12:44.740" video="mainVideo" id=subtitle]] [[!template text="Tower mode actually isn't a mode really. Neither is mode mode." start="00:12:49.839" video="mainVideo" id=subtitle]] [[!template text="They're really referential planes or meta planes." start="00:12:53.151" video="mainVideo" id=subtitle]] [[!template text="In any case, you can see that we're in buffer mode." start="00:12:58.000" video="mainVideo" id=subtitle]] [[!template text="We can take a meta jump out of this" start="00:13:01.679" video="mainVideo" id=subtitle]] [[!template text="to confirm that buffer mode is the only mode available" start="00:13:03.840" video="mainVideo" id=subtitle]] [[!template text="when we're editing towers" start="00:13:08.000" video="mainVideo" id=subtitle]] [[!template text="because that's the one we need," start="00:13:09.664" video="mainVideo" id=subtitle]] [[!template text="given that our towers are represented in individual buffers." start="00:13:11.915" video="mainVideo" id=subtitle]] [[!template new="1" text="Right. So let's see where we're at." start="00:13:23.200" video="mainVideo" id=subtitle]] [[!template text="Rumpelstiltskin principle..." start="00:13:26.320" video="mainVideo" id=subtitle]] [[!template text="We talked about mode mode." start="00:13:27.785" video="mainVideo" id=subtitle]] [[!template text="We talked about the strange loop" start="00:13:30.160" video="mainVideo" id=subtitle]] [[!template text="application of ground level modes in meta levels." start="00:13:32.240" video="mainVideo" id=subtitle]] [[!template text="We saw the different towers," start="00:13:39.600" video="mainVideo" id=subtitle]] [[!template text="and in fact, we're currently in Vim tower," start="00:13:41.992" video="mainVideo" id=subtitle]] [[!template text="where you can go to Emacs tower." start="00:13:50.720" video="mainVideo" id=subtitle]] [[!template text="Now, with a single keystroke, you can" start="00:13:52.860" video="mainVideo" id=subtitle]] [[!template text="alternate between Emacs and Vim," start="00:13:54.720" video="mainVideo" id=subtitle]] [[!template text="which are represented--" start="00:13:59.695" video="mainVideo" id=subtitle]] [[!template text="which are modeled as towers." start="00:14:01.638" video="mainVideo" id=subtitle]] [[!template new="1" text="So there's... One thing" start="00:14:13.360" video="mainVideo" id=subtitle]] [[!template text="that we've sort of alluded to is that there are two directions" start="00:14:14.760" video="mainVideo" id=subtitle]] [[!template text="that you can travel in" start="00:14:18.160" video="mainVideo" id=subtitle]] [[!template text="when you're going through this framework." start="00:14:19.494" video="mainVideo" id=subtitle]] [[!template text="One direction is--and we'll visualize it like so..." start="00:14:22.399" video="mainVideo" id=subtitle]] [[!template text="There's two directions you can travel," start="00:14:33.760" video="mainVideo" id=subtitle]] [[!template text="and you can either go sideways or you" start="00:14:35.120" video="mainVideo" id=subtitle]] [[!template text="can go up and down." start="00:14:37.040" video="mainVideo" id=subtitle]] [[!template text="If you go sideways, you're changing your perspective." start="00:14:38.399" video="mainVideo" id=subtitle]] [[!template text="So normal mode, word mode, line mode," start="00:14:41.680" video="mainVideo" id=subtitle]] [[!template text="window mode, and so on" start="00:14:45.440" video="mainVideo" id=subtitle]] [[!template text="are all different perspectives on your ground editing experience." start="00:14:46.544" video="mainVideo" id=subtitle]] [[!template text="The other direction you can travel in" start="00:14:51.680" video="mainVideo" id=subtitle]] [[!template text="is up or down, which takes you through meta levels." start="00:14:53.265" video="mainVideo" id=subtitle]] [[!template text="So you go from the ground level editing experience," start="00:14:56.811" video="mainVideo" id=subtitle]] [[!template text="up to mode mode, and then up to the tower plane, and so on, and so on." start="00:14:59.600" video="mainVideo" id=subtitle]] [[!template new="1" text="So this all sounds very complex," start="00:15:07.040" video="mainVideo" id=subtitle]] [[!template text="but the truth is it's not really that complicated," start="00:15:12.568" video="mainVideo" id=subtitle]] [[!template text="even though it feels that way." start="00:15:18.160" video="mainVideo" id=subtitle]] [[!template text="The reason it isn't that complicated" start="00:15:20.699" video="mainVideo" id=subtitle]] [[!template text="is because no matter how many levels" start="00:15:22.959" video="mainVideo" id=subtitle]] [[!template text="up or down you go and no matter where you are," start="00:15:26.480" video="mainVideo" id=subtitle]] [[!template text="whether you're in at the ground level" start="00:15:30.160" video="mainVideo" id=subtitle]] [[!template text="editing the actual text" start="00:15:32.399" video="mainVideo" id=subtitle]] [[!template text="or whether you're at a meta level," start="00:15:34.079" video="mainVideo" id=subtitle]] [[!template text="some unknown meta level and you don't know where you are," start="00:15:35.802" video="mainVideo" id=subtitle]] [[!template text="no matter where you are," start="00:15:39.279" video="mainVideo" id=subtitle]] [[!template text="the way in which you interact with it" start="00:15:41.133" video="mainVideo" id=subtitle]] [[!template text="is the same at every level." start="00:15:44.399" video="mainVideo" id=subtitle]] [[!template text="That is the great power of this approach:" start="00:15:47.519" video="mainVideo" id=subtitle]] [[!template text="that all of the different levels are the same." start="00:15:54.751" video="mainVideo" id=subtitle]] [[!template text="In fact, the complexity of the whole" start="00:16:00.880" video="mainVideo" id=subtitle]] [[!template text="is exactly identical to" start="00:16:03.839" video="mainVideo" id=subtitle]] [[!template text="the complexity of each part," start="00:16:05.545" video="mainVideo" id=subtitle]] [[!template text="so if you know how to edit words" start="00:16:07.657" video="mainVideo" id=subtitle]] [[!template text="in the ground level buffer" start="00:16:10.000" video="mainVideo" id=subtitle]] [[!template text="and you know how to move lines around using line mode," start="00:16:12.048" video="mainVideo" id=subtitle]] [[!template text="then you know how to edit any aspect of your editing experience at any level." start="00:16:15.378" video="mainVideo" id=subtitle]] [[!template new="1" text="So this is a pre-release demo." start="00:16:30.079" video="mainVideo" id=subtitle]] [[!template text="This doesn't exist on MELPA yet, but you can follow updates at this repo on github." start="00:16:31.780" video="mainVideo" id=subtitle]] [[!template text="If you can also be a beta tester" start="00:16:40.079" video="mainVideo" id=subtitle]] [[!template text="or something like that, if you like, that would be very helpful." start="00:16:43.850" video="mainVideo" id=subtitle]] [[!template text="You can learn more about this at" start="00:16:46.775" video="mainVideo" id=subtitle]] [[!template text="drym.org, which is where I house" start="00:16:50.560" video="mainVideo" id=subtitle]] [[!template text="the research that I work on." start="00:16:53.920" video="mainVideo" id=subtitle]] [[!template text="In particular, the research on epistemic levels" start="00:16:55.726" video="mainVideo" id=subtitle]] [[!template text="is what inspired this particular Emacs extension." start="00:17:00.154" video="mainVideo" id=subtitle]] [[!template text="You can also learn about" start="00:17:03.600" video="mainVideo" id=subtitle]] [[!template text="dialectical inheritance attribution, which is the basis of" start="00:17:05.600" video="mainVideo" id=subtitle]] [[!template text="a new economic system that could be fair" start="00:17:10.880" video="mainVideo" id=subtitle]] [[!template text="and could lead to a prosperous and happy world." start="00:17:14.559" video="mainVideo" id=subtitle]] [[!template text="You can follow me on Twitter at @countvajhula." start="00:17:19.439" video="mainVideo" id=subtitle]] [[!template text="That's it! Thank you." start="00:17:26.319" video="mainVideo" id=subtitle]]