WEBVTT 00:00:02.960 --> 00:00:04.960 "Far away in the heavenly abode of the 00:00:04.960 --> 00:00:06.560 great god Indra, 00:00:06.560 --> 00:00:08.320 there is a wonderful net which has been 00:00:08.320 --> 00:00:10.160 hung by some cunning artificer 00:00:10.160 --> 00:00:12.080 in such a manner that it stretches out 00:00:12.080 --> 00:00:14.320 infinitely in all directions. 00:00:14.320 --> 00:00:15.920 In accordance with the extravagant 00:00:15.920 --> 00:00:18.240 tastes of deities, the artificer has hung 00:00:18.240 --> 00:00:20.960 a single glittering jewel in each eye of 00:00:20.960 --> 00:00:22.080 the net, 00:00:22.080 --> 00:00:24.000 and since the net itself is infinite, the 00:00:24.000 --> 00:00:26.480 jewels are infinite in number. 00:00:26.480 --> 00:00:28.400 There hang the jewels, glittering like 00:00:28.400 --> 00:00:30.480 stars in the first magnitude, 00:00:30.480 --> 00:00:33.440 a wonderful sight to behold. Were we to 00:00:33.440 --> 00:00:34.800 select one of these jewels for 00:00:34.800 --> 00:00:35.680 inspection, 00:00:35.680 --> 00:00:37.760 we would discover that in its polished 00:00:37.760 --> 00:00:39.520 surface there are reflected 00:00:39.520 --> 00:00:41.920 all the other jewels in the net, infinite 00:00:41.920 --> 00:00:43.360 in number. 00:00:43.360 --> 00:00:45.600 If we look still more closely, we would 00:00:45.600 --> 00:00:47.840 see that each of the jewels reflected in 00:00:47.840 --> 00:00:48.960 this one jewel 00:00:48.960 --> 00:00:52.239 reflects all the others." This is the 00:00:52.239 --> 00:00:54.000 metaphor of Indra's Net, 00:00:54.000 --> 00:00:56.840 which is told in some schools of 00:00:56.840 --> 00:00:59.359 philosophy. Let's keep this metaphor in 00:00:59.359 --> 00:01:00.160 mind, 00:01:00.160 --> 00:01:01.920 because it'll help us understand the 00:01:01.920 --> 00:01:03.760 Emacs extension that we're about to 00:01:03.760 --> 00:01:06.960 discuss. 00:01:06.960 --> 00:01:10.080 In editing text, there's two 00:01:10.080 --> 00:01:13.200 main paradigms: one 00:01:13.200 --> 00:01:16.880 is editing at the ground level, 00:01:16.880 --> 00:01:19.439 where the characters that we type 00:01:19.439 --> 00:01:22.159 actually appear on the screen, 00:01:22.159 --> 00:01:25.960 the changes we make actually occur. 00:01:28.479 --> 00:01:30.720 The other editing paradigm is where we 00:01:30.720 --> 00:01:33.439 escape to a higher level 00:01:33.439 --> 00:01:36.000 and now the characters that we type are 00:01:36.000 --> 00:01:36.479 not... 00:01:36.479 --> 00:01:39.040 They don't actually appear on the screen 00:01:39.040 --> 00:01:41.600 because we're not at the ground level 00:01:41.600 --> 00:01:44.799 with the text, we are at a higher level 00:01:44.799 --> 00:01:48.479 looking down at the text 00:01:48.479 --> 00:01:51.920 and regarding the text, referring to 00:01:51.920 --> 00:01:54.640 this world of text in terms of a 00:01:54.640 --> 00:01:56.159 language. 00:01:56.159 --> 00:01:57.920 For instance, we could describe this 00:01:57.920 --> 00:02:00.640 world as having words and paragraphs and 00:02:00.640 --> 00:02:02.079 sentences and 00:02:02.079 --> 00:02:04.640 lines and so on. We could reason 00:02:04.640 --> 00:02:05.360 about this 00:02:05.360 --> 00:02:08.800 text in terms of these 00:02:08.800 --> 00:02:11.440 textual entities and this textual 00:02:11.440 --> 00:02:13.120 language. 00:02:13.120 --> 00:02:15.920 This is the second paradigm of text 00:02:15.920 --> 00:02:18.640 editing. 00:02:18.640 --> 00:02:22.800 When we're in the second paradigm, 00:02:22.800 --> 00:02:24.800 there is a way to go down to ground 00:02:24.800 --> 00:02:26.480 level. You hit Enter 00:02:26.480 --> 00:02:28.160 now--or we'll hit Enter to go down to the 00:02:28.160 --> 00:02:30.480 ground level, and you can hit Escape 00:02:30.480 --> 00:02:33.200 to go back out to the referential level. 00:02:33.200 --> 00:02:35.200 Enter to go down to ground level 00:02:35.200 --> 00:02:37.280 and Escape to go up to the referential 00:02:37.280 --> 00:02:40.160 level. 00:02:40.160 --> 00:02:44.879 Now, in Vim, the nouns 00:02:44.879 --> 00:02:48.239 in this world of text all 00:02:48.239 --> 00:02:50.959 share the same referential plane which 00:02:50.959 --> 00:02:51.519 we call 00:02:51.519 --> 00:02:54.319 normal mode. So in normal mode, all of the 00:02:54.319 --> 00:02:54.959 nouns 00:02:54.959 --> 00:02:57.360 of the world of text are available, 00:02:57.360 --> 00:02:58.959 whether it's words or sentences or 00:02:58.959 --> 00:03:00.959 paragraphs, 00:03:00.959 --> 00:03:04.400 and they all share this same 00:03:04.400 --> 00:03:08.319 referential plane. 00:03:08.319 --> 00:03:11.120 They compete for space on the 00:03:11.120 --> 00:03:12.720 keyboard. 00:03:12.720 --> 00:03:15.760 An alternative 00:03:15.760 --> 00:03:17.680 way to structure these modes is instead 00:03:17.680 --> 00:03:19.280 of having a single mode where all the 00:03:19.280 --> 00:03:21.840 nouns coexist, 00:03:21.840 --> 00:03:24.959 peacefully or otherwise, you instead 00:03:24.959 --> 00:03:30.400 have a dedicated mode for every noun. 00:03:30.400 --> 00:03:33.040 In that case, what happens is because 00:03:33.040 --> 00:03:35.440 your modal spaces are now much smaller, 00:03:35.440 --> 00:03:37.280 you're just talking about words or 00:03:37.280 --> 00:03:38.720 paragraphs or 00:03:38.720 --> 00:03:42.560 lines or something, the keys that you use 00:03:42.560 --> 00:03:45.760 can be much more targeted. 00:03:45.760 --> 00:03:48.560 You can use the same keystrokes in 00:03:48.560 --> 00:03:50.400 in all of your modes and they would have 00:03:50.400 --> 00:03:52.000 the same ideas behind them, but 00:03:52.000 --> 00:03:53.280 they would have different effects 00:03:53.280 --> 00:03:55.519 depending on which context you're using. 00:03:55.519 --> 00:03:57.519 It's the same keystrokes, different 00:03:57.519 --> 00:03:59.120 contexts. 00:03:59.120 --> 00:04:01.360 The advantage of that is it's often 00:04:01.360 --> 00:04:02.480 easier 00:04:02.480 --> 00:04:05.519 to change context than it is to 00:04:05.519 --> 00:04:09.040 learn new key bindings. So let's see 00:04:09.040 --> 00:04:12.080 an example of how that works. We go into 00:04:12.080 --> 00:04:13.680 character mode, and if you look at the 00:04:13.680 --> 00:04:15.439 mode line at the bottom of the screen there, 00:04:15.439 --> 00:04:18.720 you'll see that we're in character mode. 00:04:18.720 --> 00:04:21.519 Now, when we move up, down, left, and 00:04:21.519 --> 00:04:23.919 right, we're moving by character. 00:04:23.919 --> 00:04:28.479 We can also transform the text, and 00:04:28.479 --> 00:04:30.240 the transformations occur in terms of 00:04:30.240 --> 00:04:32.400 character. 00:04:32.400 --> 00:04:34.320 You can also go into word mode. In 00:04:34.320 --> 00:04:35.520 word mode, 00:04:35.520 --> 00:04:38.560 the transformations that you do are on 00:04:38.560 --> 00:04:40.000 words. 00:04:40.000 --> 00:04:42.320 and you try... Your movement is also in 00:04:42.320 --> 00:04:43.440 terms of words. 00:04:43.440 --> 00:04:45.600 So that's the level of granularity that 00:04:45.600 --> 00:04:46.560 you have. 00:04:46.560 --> 00:04:49.520 You could also go to line mode. When 00:04:49.520 --> 00:04:50.720 you're in line mode, 00:04:50.720 --> 00:04:53.759 you go up and down by line, and you can 00:04:53.759 --> 00:04:54.240 move lines 00:04:54.240 --> 00:04:57.520 up and down left and right and so on. 00:04:59.120 --> 00:05:00.880 The transformations you do are in 00:05:00.880 --> 00:05:02.800 terms of lines. 00:05:02.800 --> 00:05:08.400 You could also go to window mode, where 00:05:08.400 --> 00:05:10.639 now the objects that you're referring to 00:05:10.639 --> 00:05:12.400 are windows. You can 00:05:12.400 --> 00:05:15.759 move spatially amongst the windows or 00:05:15.759 --> 00:05:17.520 do transformations on the windows 00:05:17.520 --> 00:05:20.850 using the same keystrokes. 00:05:25.360 --> 00:05:28.720 So let's go to... 00:05:28.720 --> 00:05:32.800 Right. One of the things, 00:05:32.800 --> 00:05:35.280 the principles that play here is 00:05:35.280 --> 00:05:36.880 something called the Rumpelstiltskin 00:05:36.880 --> 00:05:38.000 principle, which is something 00:05:38.000 --> 00:05:40.720 that's known in computer science. 00:05:40.720 --> 00:05:42.320 If you can name something, then 00:05:43.759 --> 00:05:46.720 you have power over it. This is 00:05:46.720 --> 00:05:48.560 kind of an adaptation of that principle 00:05:48.560 --> 00:05:50.479 which says that if you can 00:05:50.479 --> 00:05:52.320 name something and if you can talk about 00:05:52.320 --> 00:05:54.000 it, then it's a noun 00:05:55.360 --> 00:05:56.960 in your editing language. If it's a 00:05:56.960 --> 00:05:58.960 noun, then it has... 00:05:58.960 --> 00:06:01.520 It's a mode. So if we can talk about it, 00:06:01.520 --> 00:06:02.319 it's a noun. 00:06:02.319 --> 00:06:05.039 If it's a noun, then it's a mode. One 00:06:05.039 --> 00:06:06.479 of the things we've been talking a lot 00:06:06.479 --> 00:06:07.039 about 00:06:07.039 --> 00:06:10.800 is modes. In fact, 00:06:10.800 --> 00:06:14.240 by this principle, modes also 00:06:14.240 --> 00:06:17.280 should be a mode. 00:06:17.280 --> 00:06:19.039 You should have a mode that can reason 00:06:19.039 --> 00:06:21.120 in terms of modes as objects, just like 00:06:21.120 --> 00:06:22.080 you have 00:06:22.080 --> 00:06:23.759 modes where you can reason in terms of 00:06:23.759 --> 00:06:26.560 words or lines as objects. 00:06:26.560 --> 00:06:28.800 So let's do that. Let's go to mode 00:06:28.800 --> 00:06:30.479 mode. 00:06:30.479 --> 00:06:34.000 When you go to mode mode, you see that 00:06:34.000 --> 00:06:36.080 the objects that are depicted here are 00:06:36.080 --> 00:06:37.919 the modes that are 00:06:37.919 --> 00:06:40.960 present in the buffer, 00:06:40.960 --> 00:06:44.880 which we knew about because the 00:06:44.880 --> 00:06:46.400 style of editing that we had in this 00:06:46.400 --> 00:06:48.720 buffer was the Vim style of editing 00:06:48.720 --> 00:06:50.479 where there's an insert mode at the 00:06:50.479 --> 00:06:52.400 ground level and a normal mode that you 00:06:52.400 --> 00:06:53.039 can escape to. 00:06:53.039 --> 00:06:57.280 You insert, enter the ground level. 00:06:57.280 --> 00:07:00.479 Enter to the insert mode and escape to 00:07:00.479 --> 00:07:02.880 normal mode. When you look at the 00:07:02.880 --> 00:07:03.680 mode mode 00:07:03.680 --> 00:07:06.160 representation, you see that in fact that 00:07:06.160 --> 00:07:10.479 is the structure that's depicted. 00:07:10.479 --> 00:07:12.720 But in different situations, you might 00:07:12.720 --> 00:07:14.080 find 00:07:14.080 --> 00:07:16.080 that these modes are not the 00:07:16.080 --> 00:07:17.680 ones that you want. You want something 00:07:17.680 --> 00:07:19.360 more tailored for the specific 00:07:19.360 --> 00:07:20.880 application. 00:07:20.880 --> 00:07:23.050 For instance, if you're editing 00:07:24.240 --> 00:07:27.360 Lisp code (or code in general, but 00:07:27.360 --> 00:07:30.880 Lisp code is a particular example), 00:07:30.880 --> 00:07:32.960 you might want to take advantage of the 00:07:32.960 --> 00:07:34.000 structure of 00:07:34.000 --> 00:07:37.599 the code. For Lisp code in particular, 00:07:37.599 --> 00:07:40.960 we have a mode called symex-mode 00:07:40.960 --> 00:07:44.240 which is able to reason 00:07:44.240 --> 00:07:46.720 about your code in terms of its tree 00:07:46.720 --> 00:07:47.919 structure. 00:07:47.919 --> 00:07:50.560 So you can use the same keystrokes: hjkl 00:07:50.560 --> 00:07:51.120 goes 00:07:51.120 --> 00:07:53.440 left, right, up, and down, but you also have 00:07:53.440 --> 00:07:54.960 other keystrokes that are more 00:07:54.960 --> 00:07:58.080 specialized to the application. 00:07:58.080 --> 00:08:01.520 You can run the code. 00:08:01.520 --> 00:08:06.960 We'll see that happen here in a minute. 00:08:06.960 --> 00:08:10.080 You can make changes to it really 00:08:10.080 --> 00:08:12.240 quickly 00:08:12.240 --> 00:08:18.000 and see the effects of those changes. 00:08:18.000 --> 00:08:19.440 You're doing this all in a mode 00:08:19.440 --> 00:08:21.360 that's convenient for 00:08:21.360 --> 00:08:23.199 this particular application, which is 00:08:23.199 --> 00:08:25.039 editing Lisp code, 00:08:25.039 --> 00:08:28.960 and that is, in this case, symex-mode. 00:08:28.960 --> 00:08:31.039 Typically, when you're editing code 00:08:31.039 --> 00:08:32.640 like this, you'd want to be 00:08:32.640 --> 00:08:34.800 in insert mode actually typing out the 00:08:34.800 --> 00:08:36.640 code, 00:08:36.640 --> 00:08:38.320 and then you'd want to escape to symex 00:08:38.320 --> 00:08:40.959 mode rather than normal mode, 00:08:40.959 --> 00:08:42.159 and then you could escape again and 00:08:42.159 --> 00:08:44.080 you'd end up in normal mode. 00:08:44.080 --> 00:08:46.720 So this, if we go to mode mode, we see is 00:08:46.720 --> 00:08:48.000 depicted 00:08:48.000 --> 00:08:51.040 as this tower where insert is at the 00:08:51.040 --> 00:08:52.800 bottom and normal is at the top, but 00:08:52.800 --> 00:08:54.800 symex-mode is in between 00:08:54.800 --> 00:08:57.200 the two. You could also change that if 00:08:57.200 --> 00:08:58.800 you like. If you don't want symex-mode to 00:08:58.800 --> 00:09:00.640 be there, you could just 00:09:00.640 --> 00:09:03.760 move it to the top. Now you find symex is 00:09:03.760 --> 00:09:05.600 at the top and you enter down to 00:09:05.600 --> 00:09:06.160 normal. 00:09:06.160 --> 00:09:07.600 You can see it on the status bar at the 00:09:07.600 --> 00:09:10.480 bottom there. Enter to insert, 00:09:10.480 --> 00:09:13.839 escape to normal, escape to symex. 00:09:13.839 --> 00:09:16.480 In fact, you can even add more modes if 00:09:16.480 --> 00:09:19.380 you don't like the existing ones. 00:09:21.519 --> 00:09:23.839 Now we have an additional mode here. 00:09:23.839 --> 00:09:25.440 We have window mode. It goes down to 00:09:25.440 --> 00:09:27.519 symex, it goes down to normal. 00:09:27.519 --> 00:09:30.320 Enter the insert, escape to normal, escape 00:09:30.320 --> 00:09:33.600 to symex, escape to window. 00:09:33.600 --> 00:09:37.600 So we've talked... Okay, so another thing 00:09:37.600 --> 00:09:41.760 actually to note here is that in editing 00:09:41.760 --> 00:09:45.360 modes, 00:09:45.360 --> 00:09:46.720 if you look at the mode line at the 00:09:46.720 --> 00:09:48.399 bottom of the screen, 00:09:48.399 --> 00:09:50.640 you'll see that we are currently, in this 00:09:50.640 --> 00:09:51.519 buffer, 00:09:51.519 --> 00:09:54.560 we are currently in line mode. 00:09:54.560 --> 00:09:57.600 I'm going to hit Enter now and 00:09:57.600 --> 00:09:58.720 you'll see that when I hit 00:09:58.720 --> 00:10:01.519 Enter, nothing is happening. It's still in 00:10:01.519 --> 00:10:02.160 line mode. 00:10:02.160 --> 00:10:05.120 If you hit Escape, it's still in line mode. 00:10:05.120 --> 00:10:07.200 You can find out the reason for that 00:10:07.200 --> 00:10:10.640 by taking another meta jump out of this. 00:10:10.640 --> 00:10:12.800 You'll see that, in fact, the reason 00:10:12.800 --> 00:10:15.279 is that we're currently in line mode, 00:10:15.279 --> 00:10:17.360 and line mode is the only one available 00:10:17.360 --> 00:10:19.519 in this tower 00:10:19.519 --> 00:10:21.760 for editing the modes that are in 00:10:21.760 --> 00:10:24.880 operation in your ground level. 00:10:24.880 --> 00:10:26.560 In fact, line mode is all you need 00:10:26.560 --> 00:10:28.320 here, because this is just 00:10:28.320 --> 00:10:30.320 the nature of how these modes are 00:10:30.320 --> 00:10:32.079 laid out is 00:10:32.079 --> 00:10:35.040 in rows. So line mode is the most 00:10:35.040 --> 00:10:36.399 appropriate thing here. 00:10:36.399 --> 00:10:37.680 But you could change it to something 00:10:37.680 --> 00:10:39.740 else if you like. 00:10:40.959 --> 00:10:44.160 Now we've seen two towers. We've 00:10:44.160 --> 00:10:44.560 seen 00:10:44.560 --> 00:10:48.079 the Vim tower and we've seen 00:10:48.079 --> 00:10:53.680 also the symex tower, the Lisp tower. 00:10:53.680 --> 00:10:56.959 It turns out that, because we've been 00:10:56.959 --> 00:10:58.880 talking about towers now, 00:10:58.880 --> 00:11:01.519 by the rumpelstiltskin principle, towers 00:11:01.519 --> 00:11:02.800 also 00:11:02.800 --> 00:11:06.399 can be talked about, 00:11:06.399 --> 00:11:09.279 and therefore they also are a mode. So 00:11:09.279 --> 00:11:11.200 how do we go to tower mode? 00:11:11.200 --> 00:11:14.640 The way we go to tower mode is 00:11:14.640 --> 00:11:19.200 we go in a slightly different direction, 00:11:19.200 --> 00:11:20.800 and we find that we are now in tower 00:11:20.800 --> 00:11:23.360 mode. 00:11:23.360 --> 00:11:27.440 We see that there are many towers 00:11:27.440 --> 00:11:29.279 available. We're now... 00:11:29.279 --> 00:11:32.640 We're seeing several possible 00:11:32.640 --> 00:11:36.240 towers that we have written 00:11:36.240 --> 00:11:39.120 to be available and for use in 00:11:39.120 --> 00:11:41.440 different buffers. You can edit them 00:11:41.440 --> 00:11:44.000 on the fly. For instance, let's enter this 00:11:44.000 --> 00:11:46.630 tower. 00:11:48.000 --> 00:11:49.920 Now you see that in the bottom of 00:11:49.920 --> 00:11:51.519 the... In the mode line, you see that we're 00:11:51.519 --> 00:11:52.480 going 00:11:52.480 --> 00:11:54.240 across all of these different modes that 00:11:54.240 --> 00:11:56.480 were in the tower. 00:11:56.480 --> 00:11:58.800 You could escape and you could even 00:11:58.800 --> 00:12:00.399 move things around. You could put window 00:12:00.399 --> 00:12:00.880 mode 00:12:00.880 --> 00:12:02.399 all the way at the bottom, right above 00:12:02.399 --> 00:12:04.079 insert mode. 00:12:04.079 --> 00:12:06.880 Let's see that happen. There it is, window 00:12:06.880 --> 00:12:09.839 is right above insert, and 00:12:09.839 --> 00:12:13.040 so on. The tower always reflects your 00:12:13.040 --> 00:12:14.240 current position, 00:12:14.240 --> 00:12:15.760 so if you're in buffer mode here and you 00:12:15.760 --> 00:12:17.600 go down to line mode, 00:12:17.600 --> 00:12:19.120 when you go back to mode mode, you see 00:12:19.120 --> 00:12:22.480 that we are in line mode. 00:12:22.480 --> 00:12:24.000 But in practice, you wouldn't have a 00:12:24.000 --> 00:12:26.160 tower this elaborate because 00:12:26.160 --> 00:12:28.959 you'd rather have several smaller towers 00:12:28.959 --> 00:12:29.440 you enter, 00:12:29.440 --> 00:12:33.360 that you alternate between. 00:12:33.360 --> 00:12:36.639 Okay. So one 00:12:36.639 --> 00:12:39.839 other thing of interest here is that 00:12:39.839 --> 00:12:42.240 when you're in tower mode, 00:12:42.240 --> 00:12:43.839 if you look at the status line at the 00:12:43.839 --> 00:12:45.920 bottom there, we are currently 00:12:45.920 --> 00:12:49.200 in buffer mode while we are in tower 00:12:49.200 --> 00:12:49.839 mode. 00:12:49.839 --> 00:12:51.600 Tower mode actually isn't a mode 00:12:51.600 --> 00:12:53.519 really. Neither is mode mode. They're 00:12:53.519 --> 00:12:53.920 really 00:12:53.920 --> 00:12:58.000 referential planes or meta planes. 00:12:58.000 --> 00:13:00.959 In any case, you can see that we're in 00:13:00.959 --> 00:13:03.120 buffer mode. We can take a meta jump 00:13:03.120 --> 00:13:04.560 out of this to confirm 00:13:04.560 --> 00:13:07.120 that buffer mode is the only mode 00:13:07.120 --> 00:13:08.000 available 00:13:08.000 --> 00:13:10.560 when we're editing towers because that's 00:13:10.560 --> 00:13:11.200 the one 00:13:11.200 --> 00:13:14.240 we need, given that our towers are 00:13:14.240 --> 00:13:15.200 represented 00:13:15.200 --> 00:13:23.200 in individual buffers. 00:13:23.200 --> 00:13:26.000 Right. So let's see where we're 00:13:26.000 --> 00:13:26.320 at. 00:13:26.320 --> 00:13:28.240 Rumpelstiltskin principle... We talked 00:13:28.240 --> 00:13:30.160 about mode mode. 00:13:30.160 --> 00:13:32.240 We talked about the strange loop 00:13:32.240 --> 00:13:33.920 application of 00:13:33.920 --> 00:13:37.820 ground level modes in meta levels. 00:13:39.600 --> 00:13:42.240 We saw the different towers, and 00:13:42.240 --> 00:13:43.199 in fact, 00:13:43.199 --> 00:13:46.639 we're currently in 00:13:46.639 --> 00:13:50.720 Vim tower, 00:13:50.720 --> 00:13:53.120 where you can go to Emacs tower. Now, 00:13:53.120 --> 00:13:54.720 with a single keystroke, you can 00:13:54.720 --> 00:13:55.760 alternate 00:13:55.760 --> 00:13:59.040 between Emacs 00:13:59.040 --> 00:14:02.399 and Vim, which are represented--which are 00:14:02.399 --> 00:14:05.519 modeled as towers. 00:14:13.360 --> 00:14:15.360 So there's... One thing that we've 00:14:15.360 --> 00:14:17.040 sort of alluded to is that there are two 00:14:17.040 --> 00:14:18.160 directions 00:14:18.160 --> 00:14:20.480 that you can travel in when you're going 00:14:20.480 --> 00:14:22.399 through this framework. 00:14:22.399 --> 00:14:25.120 One direction is--and we'll 00:14:25.120 --> 00:14:33.760 visualize it like so... 00:14:33.760 --> 00:14:35.120 There's two directions you can travel, 00:14:35.120 --> 00:14:37.040 and you can either go sideways or you 00:14:37.040 --> 00:14:38.399 can go up and down. 00:14:38.399 --> 00:14:40.399 If you go sideways, you're changing your 00:14:40.399 --> 00:14:41.680 perspective. 00:14:41.680 --> 00:14:45.440 So normal mode, word mode, line mode, 00:14:45.440 --> 00:14:47.360 window mode, and so on are all different 00:14:47.360 --> 00:14:49.120 perspectives on your 00:14:49.120 --> 00:14:51.680 ground editing experience. 00:14:51.680 --> 00:14:53.040 The other direction you can travel 00:14:53.040 --> 00:14:55.519 in is up or down, which takes you 00:14:55.519 --> 00:14:57.920 through meta levels. So you go from the 00:14:57.920 --> 00:14:59.600 ground level editing experience 00:14:59.600 --> 00:15:01.920 up to mode mode and then up to the tower 00:15:01.920 --> 00:15:03.440 plane and so on 00:15:03.440 --> 00:15:07.040 and so on. 00:15:07.040 --> 00:15:10.800 So this all sounds 00:15:10.800 --> 00:15:14.880 very complex, but the truth is 00:15:14.880 --> 00:15:18.160 it's not really that complicated 00:15:18.160 --> 00:15:21.519 even though it feels that way. The reason 00:15:21.519 --> 00:15:22.959 it isn't that complicated 00:15:22.959 --> 00:15:26.480 is because no matter how many levels 00:15:26.480 --> 00:15:28.800 up or down you go and no matter where 00:15:28.800 --> 00:15:30.160 you are, 00:15:30.160 --> 00:15:32.399 whether you're in at the ground level 00:15:32.399 --> 00:15:34.079 editing the actual text 00:15:34.079 --> 00:15:36.000 or whether you're at a meta level, some 00:15:36.000 --> 00:15:37.600 unknown meta level and you don't know 00:15:37.600 --> 00:15:39.279 where you are, 00:15:39.279 --> 00:15:42.320 no matter where you are, the way in which 00:15:42.320 --> 00:15:44.399 you interact with it 00:15:44.399 --> 00:15:47.519 is the same at every level. 00:15:47.519 --> 00:15:52.000 That is the great power of 00:15:52.000 --> 00:15:55.440 this approach: that 00:15:55.440 --> 00:15:58.720 all of the different levels are the 00:15:58.720 --> 00:16:00.880 same. 00:16:00.880 --> 00:16:03.839 In fact, the complexity of the whole 00:16:03.839 --> 00:16:05.759 is exactly identical to the 00:16:05.759 --> 00:16:08.720 complexity of each part, so if you know 00:16:08.720 --> 00:16:10.000 how to edit words 00:16:10.000 --> 00:16:12.959 in the ground level buffer and you know 00:16:12.959 --> 00:16:13.440 how to move 00:16:13.440 --> 00:16:15.839 lines around using line mode, then you 00:16:15.839 --> 00:16:16.720 know how to edit 00:16:16.720 --> 00:16:19.519 any aspect of your editing experience at 00:16:19.519 --> 00:16:22.800 any level. 00:16:30.079 --> 00:16:32.000 So this is a pre-release demo. This 00:16:32.000 --> 00:16:33.839 doesn't exist on MELPA 00:16:33.839 --> 00:16:36.880 yet, but you can follow updates 00:16:36.880 --> 00:16:40.079 at this repo on github. 00:16:40.079 --> 00:16:44.079 If you can also be a beta tester or 00:16:44.079 --> 00:16:45.199 something like that, if you like, that 00:16:45.199 --> 00:16:46.000 would be very 00:16:46.000 --> 00:16:49.199 helpful. You can learn more about 00:16:49.199 --> 00:16:50.560 this at 00:16:50.560 --> 00:16:53.920 drym.org, which is where I house 00:16:53.920 --> 00:16:55.920 the research that I work on. In 00:16:55.920 --> 00:16:57.279 particular 00:16:57.279 --> 00:17:00.800 the research on epistemic levels is what 00:17:00.800 --> 00:17:03.600 inspired this particular Emacs extension. 00:17:03.600 --> 00:17:06.480 You can also learn about dialectical 00:17:06.480 --> 00:17:08.480 inheritance attribution, which is the 00:17:08.480 --> 00:17:10.880 basis of 00:17:10.880 --> 00:17:14.559 a new economic system that could be fair 00:17:14.559 --> 00:17:16.959 and could lead to a prosperous and happy 00:17:16.959 --> 00:17:19.439 world. 00:17:19.439 --> 00:17:22.799 You can follow me on 00:17:22.799 --> 00:17:26.319 Twitter at @countvajhula. 00:17:26.319 --> 00:17:31.919 That's it! Thank you.