WEBVTT 00:00:01.719 --> 00:00:02.600 [Speaker 0]: 5 seconds. Oh, actually, 00:00:07.279 --> 00:00:08.320 [Speaker 1]: Sorry, I keep delaying. 00:00:08.320 --> 00:00:09.559 I keep forgetting that we have an 00:00:09.559 --> 00:00:11.639 introduction now. The introduction is flying. 00:00:02.600 --> 00:00:18.883 [Speaker 0]: a little more. You're going to give a 00:00:22.260 --> 00:00:24.320 [Speaker 1]: Well, it's about 5 seconds now. 00:00:19.675 --> 00:00:27.560 [Speaker 0]: 30-second, right? Just say go when you want 00:00:29.060 --> 00:00:31.280 [Speaker 1]: Sure. You'll hear me anyway. 00:00:27.560 --> 00:00:32.299 [Speaker 0]: me to go. Okay. 00:00:33.260 --> 00:00:35.220 [Speaker 1]: All right, I think we are live now. 00:00:35.220 --> 00:00:36.100 So hi again, everyone. 00:00:36.100 --> 00:00:37.900 I promised you we would be back in about 30 00:00:37.900 --> 00:00:39.940 seconds. I lied, it was actually 1 minute, 00:00:40.160 --> 00:00:41.760 but we are here with Bob. 00:00:41.760 --> 00:00:42.840 Hi, Bob, how are you doing? 00:00:43.380 --> 00:00:46.940 [Speaker 0]: Hi, doing great. Glad to 00:00:46.940 --> 00:00:50.600 [Speaker 1]: be with you. Yeah, glad to be here, 00:00:50.600 --> 00:00:52.580 and so are we. We're glad to have you again 00:00:52.580 --> 00:00:54.440 this year. So what we're going to do, 00:00:54.440 --> 00:00:56.140 we're not going to waste any time right now 00:00:56.140 --> 00:00:57.880 with chit-chats. What we're going to do, 00:00:57.880 --> 00:00:59.059 we're going to move straight into your 00:00:59.059 --> 00:01:01.120 presentation, Bob, so that you have as much 00:01:01.120 --> 00:01:04.239 time as you can. I'm going to recede into the 00:01:04.239 --> 00:01:07.440 background. I am going to full screen your 00:01:07.440 --> 00:01:08.979 presentation on a stream. 00:01:09.860 --> 00:01:11.680 And Bob, the floor is all yours. 00:01:12.940 --> 00:01:14.720 [Speaker 0]: Thank you very much, Leo. 00:01:15.040 --> 00:01:18.400 Glad to be here. I hope everybody has an idea 00:01:18.400 --> 00:01:22.780 of what Hyperbole is, but it's a broad 00:01:22.900 --> 00:01:25.880 information management system inside Emacs 00:01:26.400 --> 00:01:28.540 that works in all major modes. 00:01:28.860 --> 00:01:31.760 It's a global minor mode that you can turn on 00:01:31.760 --> 00:01:34.760 and off very rapidly so that you can just get 00:01:34.760 --> 00:01:36.160 in and out of hyperbole. 00:01:36.760 --> 00:01:40.940 And it works mostly from a mini buffer menu 00:01:41.400 --> 00:01:44.040 that if we just hit ctrl H H we see at the 00:01:44.040 --> 00:01:47.420 bottom of the screen here and as you see in 00:01:47.420 --> 00:01:48.980 some of this text right here, 00:01:51.040 --> 00:01:55.680 Dee will show you a demo with all these video 00:01:55.680 --> 00:01:57.680 links of Hyperbole now. 00:01:57.900 --> 00:02:01.780 But let's just get into the top 10 reasons to 00:02:01.780 --> 00:02:08.840 use Hyperbole. Number 10 is a key series 00:02:10.160 --> 00:02:12.600 curly braces. So you just put curly braces 00:02:12.600 --> 00:02:17.620 around any set of key sequences that you want 00:02:19.760 --> 00:02:22.440 and hyperbole magically turns that into what 00:02:22.440 --> 00:02:25.640 we call an implicit button a hyper button and 00:02:25.640 --> 00:02:28.580 any kind of text that you have so if we go 00:02:28.580 --> 00:02:35.760 down here and we just click click here we see 00:02:35.820 --> 00:02:40.220 it that was a complex button that said let's 00:02:40.400 --> 00:02:43.200 start a shell, let's set an environment 00:02:43.320 --> 00:02:45.140 variable as you see the command right up 00:02:45.140 --> 00:02:47.420 there, and then let's do a grep over the 00:02:47.420 --> 00:02:50.680 hyperbole code and find all instances of a 00:02:50.680 --> 00:02:55.360 particular label. So if we hit made a return, 00:02:55.400 --> 00:02:57.260 that's called the action key. 00:02:57.280 --> 00:02:59.340 That's what you use throughout hyperbole when 00:02:59.340 --> 00:03:01.900 you just want to activate any kind of button. 00:03:02.020 --> 00:03:06.380 So you see it jumped to the grep output and 00:03:06.380 --> 00:03:08.440 this is in a shell buffer it's not in a 00:03:08.440 --> 00:03:11.180 compilation buffer so anywhere that you have 00:03:11.180 --> 00:03:13.760 this sort of thing it's also an implicit 00:03:13.780 --> 00:03:17.040 button and any sort of grep output or 00:03:17.040 --> 00:03:20.780 compiler output you can just jump to with the 00:03:22.120 --> 00:03:23.580 same key, made a return. 00:03:23.960 --> 00:03:29.240 So that's key series, the first part. 00:03:29.440 --> 00:03:33.880 And then just to note that you can also just 00:03:33.880 --> 00:03:39.000 do a, well I'll just do it here and show you 00:03:39.000 --> 00:03:43.380 that you can do a recursive grep with this 00:03:43.380 --> 00:03:45.840 hyperbole command, HYPBR grep. 00:03:46.060 --> 00:03:49.000 And if you're in an Emacs list buffer, 00:03:50.860 --> 00:03:54.740 it will only grep across the Emacs list. 00:03:54.760 --> 00:03:58.340 So a very handy way to just go through your 00:03:58.340 --> 00:04:01.040 code very rapidly and then jump to various 00:04:01.040 --> 00:04:04.280 points in it. So we have a lot to cover 00:04:04.280 --> 00:04:05.800 today, so I'm going to go through this 00:04:05.800 --> 00:04:07.560 rapidly. This isn't a tutorial, 00:04:07.800 --> 00:04:10.340 it's just to get you interested in some of 00:04:10.340 --> 00:04:13.060 the features, and then there's a ton of 00:04:13.060 --> 00:04:15.920 reference material and videos now available 00:04:15.980 --> 00:04:18.860 for Hyperlink. So let's go to number 9. 00:04:20.019 --> 00:04:22.360 Path names become implicit buttons. 00:04:22.500 --> 00:04:24.060 You don't even have to quote them. 00:04:24.060 --> 00:04:26.920 You can add environment variables or elist 00:04:26.920 --> 00:04:29.200 variables with the syntax right here. 00:04:29.380 --> 00:04:32.180 So here we have a shell script that's 00:04:32.180 --> 00:04:33.500 somewhere on our path. 00:04:33.680 --> 00:04:36.380 And notice path is an environment variable 00:04:36.380 --> 00:04:39.140 with many different paths within it, 00:04:39.140 --> 00:04:42.600 right? But Hyperbole knows that and it 00:04:42.600 --> 00:04:44.980 searches the path, gets the first match, 00:04:45.600 --> 00:04:48.620 finds it, and finds the actual shell script. 00:04:48.660 --> 00:04:50.420 So you can just embed that anywhere. 00:04:50.540 --> 00:04:52.160 Here we have a list variable, 00:04:52.280 --> 00:04:54.360 hyperbdur, which is the home directory for 00:04:54.360 --> 00:04:58.120 hyperbole, and then a markdown file, 00:04:58.320 --> 00:05:01.680 and a link to a direct section in the file, 00:05:01.780 --> 00:05:05.220 and the 5 colon 5 means go to line 5 within 00:05:05.220 --> 00:05:07.260 that section and column 5. 00:05:07.380 --> 00:05:09.400 So let's just try it. Boom, 00:05:09.420 --> 00:05:11.500 we're right there, and we're on another link 00:05:11.500 --> 00:05:13.220 that we could activate as well. 00:05:13.420 --> 00:05:17.960 So notice the next line is the same link but 00:05:17.960 --> 00:05:20.280 this is how you normally have to do it in a 00:05:20.280 --> 00:05:23.160 markdown file. You have to change the section 00:05:23.160 --> 00:05:25.640 header to have dashes but with hyperbole you 00:05:25.640 --> 00:05:28.120 don't have to. You can just put it exactly 00:05:28.140 --> 00:05:29.840 like you see it in your file. 00:05:30.540 --> 00:05:34.660 Here the pound syntax for sections is really 00:05:34.660 --> 00:05:36.640 a generic syntax in the hyperbole. 00:05:37.360 --> 00:05:39.840 And so it works in all different kinds of 00:05:39.840 --> 00:05:41.500 files, your programming files. 00:05:42.100 --> 00:05:45.240 Here's a shell script and we said let's just 00:05:45.240 --> 00:05:49.120 go to the first comment that has alias in it. 00:05:49.120 --> 00:05:51.700 Notice we didn't have to say the whole line, 00:05:51.700 --> 00:05:53.160 just the first part of it. 00:05:53.160 --> 00:05:58.140 And it matched to it. Here we have a link to 00:05:58.140 --> 00:06:01.680 our hyperbole structured outliner called the 00:06:01.680 --> 00:06:04.660 K Outliner. And you can see it auto-numbers 00:06:05.080 --> 00:06:08.000 all these cells. But in addition to just 00:06:08.000 --> 00:06:10.640 displaying, you can also add a pipe symbol 00:06:10.640 --> 00:06:14.900 near the end and use this view syntax to clip 00:06:14.900 --> 00:06:17.500 to 2 lines and show blank lines. 00:06:17.500 --> 00:06:19.920 So let's see if each node gets clipped to 2 00:06:19.920 --> 00:06:22.680 lines. So you see they're all just 2 now with 00:06:22.680 --> 00:06:25.280 the ellipses and then we can expand them. 00:06:25.320 --> 00:06:28.760 So a lot of power there just with path names. 00:06:29.380 --> 00:06:31.120 Let's continue to number 8. 00:06:31.120 --> 00:06:32.940 [Speaker 1]: Can I just interrupt you just a bit? 00:06:33.420 --> 00:06:33.920 [Speaker 0]: Yes. 00:06:34.740 --> 00:06:37.720 [Speaker 1]: I think your phone, so we have your phone set 00:06:37.720 --> 00:06:40.460 up in case your internet misbehaves and we've 00:06:40.640 --> 00:06:42.080 set this up before we started, 00:06:42.100 --> 00:06:44.380 but I think the vibration is a little loud 00:06:44.380 --> 00:06:46.160 whenever it does. Can you maybe move it a 00:06:46.160 --> 00:06:50.380 little bit? I think so. 00:06:50.380 --> 00:06:51.880 It will have to vibrate again. 00:06:47.740 --> 00:06:54.220 [Speaker 0]: Is that okay? No, my phone... 00:06:54.380 --> 00:06:56.880 Okay. It shouldn't have been vibrating. 00:06:59.480 --> 00:07:01.260 [Speaker 1]: have been another device, 00:07:01.280 --> 00:07:02.800 but definitely we had vibration. 00:07:02.800 --> 00:07:04.500 Anyway, carry on. Sorry for the interruption. 00:06:57.640 --> 00:07:06.920 [Speaker 0]: It could be me. It might So number 8, 00:07:07.800 --> 00:07:10.520 special prefixes. There are 3 prefixes you 00:07:10.520 --> 00:07:11.820 can attach to path names. 00:07:11.820 --> 00:07:13.680 The first, if you want to load, 00:07:13.820 --> 00:07:16.040 instead of just finding a file, 00:07:16.620 --> 00:07:19.460 an ELIST file, you can actually load it. 00:07:19.540 --> 00:07:22.060 And so I can just hit made a return on this, 00:07:22.200 --> 00:07:24.300 and you see in the mini buffer, 00:07:25.200 --> 00:07:27.100 it loaded it as compiled e-list. 00:07:27.240 --> 00:07:29.340 I could put a .el on here, 00:07:29.500 --> 00:07:33.500 a .elc, .gz, all of that'll work, 00:07:33.580 --> 00:07:36.420 and just put a dash in front to load it. 00:07:36.580 --> 00:07:38.720 If you want to run a shell command, 00:07:38.720 --> 00:07:41.040 just put an exclamation mark in front of 00:07:41.040 --> 00:07:42.540 something and again you can have the 00:07:42.540 --> 00:07:44.620 environment variable. So here we're saying 00:07:44.620 --> 00:07:47.220 run the program date and you see, 00:07:48.400 --> 00:07:50.040 let's see, let's do it again. 00:07:50.160 --> 00:07:53.240 There we go. It ran date and you see the 00:07:53.240 --> 00:07:55.680 output right there. And what if you want to 00:07:55.680 --> 00:07:58.040 run a graphical program on your system? 00:07:58.620 --> 00:08:01.760 Well here, we want to open a PDF file and I'm 00:08:01.760 --> 00:08:05.340 just using XDG Open on Linux, 00:08:05.660 --> 00:08:09.440 you could use Open on Mac and you just put an 00:08:09.440 --> 00:08:12.840 ampersand in front and there's the Hyperbole 00:08:14.120 --> 00:08:15.840 manual instantly displayed. 00:08:16.120 --> 00:08:18.620 So lots of power there and all of that 00:08:18.820 --> 00:08:22.360 actually .pdf's and many other file types are 00:08:22.360 --> 00:08:25.080 automatically linked to various programs by 00:08:25.080 --> 00:08:27.340 Hyperbole. So you could just use the path 00:08:27.340 --> 00:08:29.340 name itself and it would probably behave the 00:08:29.340 --> 00:08:34.440 same way. Number 7, bookmarks on steroids. 00:08:35.460 --> 00:08:37.419 So Hyperbole gives you a personal button 00:08:37.419 --> 00:08:40.340 file, which is on the menu you see here under 00:08:40.400 --> 00:08:42.280 button files, and then personal. 00:08:43.039 --> 00:08:45.360 So here we'll just display it. 00:08:45.480 --> 00:08:47.720 And you can put whatever you want in here, 00:08:47.720 --> 00:08:49.860 these implicit buttons of any type. 00:08:49.860 --> 00:08:52.660 You can name them the way here and you can 00:08:52.660 --> 00:08:55.560 activate either the name with MetaReturn or 00:08:55.560 --> 00:08:56.920 the button itself. So, 00:08:56.920 --> 00:08:59.400 of course, if we did MetaReturn here, 00:08:59.860 --> 00:09:03.220 we'd just display that in a web browser. 00:09:03.940 --> 00:09:05.520 I'll just do a few of these. 00:09:05.540 --> 00:09:07.200 So here's a section of line. 00:09:07.200 --> 00:09:08.580 Let's just jump there. 00:09:09.120 --> 00:09:11.400 But these can be all sorts of different 00:09:11.400 --> 00:09:13.140 actions that are going on. 00:09:13.140 --> 00:09:16.040 And you just, whatever cross references you 00:09:16.040 --> 00:09:17.840 want, you put in here. 00:09:17.840 --> 00:09:20.400 And the neat thing is that this then becomes 00:09:20.940 --> 00:09:23.420 a list of what we call global buttons. 00:09:23.620 --> 00:09:26.540 So when I go into the menu and I go control 00:09:26.540 --> 00:09:30.640 HHGA to activate a global button, 00:09:30.720 --> 00:09:33.220 you can see that all the names from this file 00:09:33.220 --> 00:09:36.100 appear here. So only the name buttons appear, 00:09:36.160 --> 00:09:40.240 and I could like go to the hyperbole to-do 00:09:40.240 --> 00:09:42.260 list and things like that. 00:09:42.500 --> 00:09:45.660 So very, very quick access to all your 00:09:45.660 --> 00:09:47.440 information whenever you need it. 00:09:47.440 --> 00:09:49.600 And that could be an org file as well if you 00:09:49.600 --> 00:09:53.500 prefer that. So we just took care of that. 00:09:53.540 --> 00:09:57.000 Number 6, instant test case running and 00:09:57.000 --> 00:09:59.420 debugging. This is a fairly new feature. 00:10:00.100 --> 00:10:02.240 What we're seeing here is a pre-release of 00:10:02.240 --> 00:10:04.440 version 9, which should be out within the 00:10:04.440 --> 00:10:07.560 next week. But the instructions at the 00:10:07.560 --> 00:10:10.680 beginning of the presentation tell you how to 00:10:10.680 --> 00:10:13.720 get the development version of HyperBlade, 00:10:14.040 --> 00:10:15.560 which is right now 8.01 00:10:15.880 --> 00:10:19.040 pre, but that's virtually the same as what 9 00:10:19.120 --> 00:10:23.060 will be. So you can grab that as of today. 00:10:24.140 --> 00:10:27.540 So let's just jump to a test file. 00:10:27.700 --> 00:10:30.300 What you see here is called an explicit 00:10:30.360 --> 00:10:33.020 button. You can actually make buttons where 00:10:33.120 --> 00:10:35.820 similar to org, where you just see a bit of 00:10:35.820 --> 00:10:38.500 the button and all of the metadata is hidden. 00:10:39.060 --> 00:10:42.040 I can say control A J and I see all about 00:10:42.040 --> 00:10:43.940 that button, exactly what it's going to do 00:10:43.940 --> 00:10:47.200 before I activate it and even who created it 00:10:47.200 --> 00:10:50.680 or last modified it. Then just queue out of 00:10:50.680 --> 00:10:52.580 here and you're back where you were. 00:10:52.700 --> 00:10:56.820 So now, what this did is link us to an ERT 00:10:56.920 --> 00:10:59.920 test. If you write tests in Emacs, 00:10:59.920 --> 00:11:02.060 you probably use ERT tests. 00:11:02.220 --> 00:11:05.220 So if I hit made a return on here it'll just 00:11:05.220 --> 00:11:08.520 run the test tell me it passed great okay but 00:11:08.520 --> 00:11:11.760 maybe I had a problem so let me use control 00:11:11.760 --> 00:11:17.080 you made a return and that will e-debug the 00:11:17.080 --> 00:11:20.080 test instantly. So now I'll step through it 00:11:20.080 --> 00:11:22.200 and it says, well, let's, 00:11:23.000 --> 00:11:25.580 this single line actually creates that 00:11:25.580 --> 00:11:27.800 explicit button. You see we have an empty 00:11:27.800 --> 00:11:29.480 buffer here that we're in. 00:11:29.480 --> 00:11:31.780 Now I step through that and now there's the 00:11:31.780 --> 00:11:34.160 explicit button that got put in there. 00:11:34.160 --> 00:11:36.940 Now the next line I step through it and this 00:11:36.940 --> 00:11:39.160 is going to check if we have the right action 00:11:39.160 --> 00:11:42.260 type and it returns true so that's good and 00:11:42.260 --> 00:11:45.220 now we should be it should be associated with 00:11:45.220 --> 00:11:48.680 the temp buffer returns true good And that's 00:11:48.680 --> 00:11:51.360 why what you saw before is this passed. 00:11:51.720 --> 00:11:52.760 The whole thing passed. 00:11:53.000 --> 00:11:54.740 So lots of power there. 00:11:55.080 --> 00:11:57.600 Simple to use. You're just using your made a 00:11:57.600 --> 00:11:59.360 return and prefix arguments. 00:12:00.040 --> 00:12:03.240 It's something everybody who develops should 00:12:03.240 --> 00:12:07.640 have. So number, let's go on. 00:12:07.640 --> 00:12:09.720 I think we're making pretty good time here, 00:12:09.720 --> 00:12:11.240 but I turned off my timer. 00:12:13.000 --> 00:12:15.800 Let's go to number 5. This is a very new 00:12:15.800 --> 00:12:17.660 feature, which is very cool too. 00:12:17.720 --> 00:12:20.420 You used to have to use the mouse probably 00:12:20.440 --> 00:12:23.880 and you could drag across windows to go from 00:12:23.880 --> 00:12:26.820 a source to a referent buffer and that would 00:12:26.820 --> 00:12:28.340 create a hyperlink for you. 00:12:28.340 --> 00:12:30.880 But now we've installed it and made it even 00:12:30.880 --> 00:12:34.140 easier on, we've installed it on a, 00:12:34.860 --> 00:12:36.540 on the hyperbole menus. 00:12:37.040 --> 00:12:40.180 So let's just go back to our presentation 00:12:40.680 --> 00:12:43.660 here and say we want to link to this line 00:12:43.660 --> 00:12:46.160 that we're on there. And I'll just create the 00:12:46.160 --> 00:12:48.480 button in our scratch buffer here so it 00:12:48.480 --> 00:12:50.660 doesn't really mess anything up. 00:12:50.900 --> 00:12:53.980 So I just put my point in where I want the 00:12:53.980 --> 00:12:56.920 button to appear and then I put point where I 00:12:56.920 --> 00:13:00.060 want it to link to in the other the other 00:13:00.060 --> 00:13:02.800 buffer and then I just say control HH to get 00:13:02.800 --> 00:13:05.260 my menu, I for implicit button, 00:13:05.380 --> 00:13:07.940 and then L for link. Boom, 00:13:07.960 --> 00:13:09.980 it inserts it, right at point. 00:13:10.680 --> 00:13:12.880 What did it do? It knew that this was in the 00:13:12.880 --> 00:13:15.080 hyperbole directory and I have a variable for 00:13:15.080 --> 00:13:17.780 that, so that if you sent this link to your 00:13:17.780 --> 00:13:19.180 friend who uses Hyperbole, 00:13:19.440 --> 00:13:21.440 it would still work right because they have a 00:13:21.440 --> 00:13:22.860 different hyperbole there. 00:13:23.100 --> 00:13:27.380 And then I want to go directly to line 116. 00:13:28.360 --> 00:13:30.360 So boom, it just took me there. 00:13:30.820 --> 00:13:33.900 So that's it. And Hyperbole is doing all this 00:13:33.900 --> 00:13:36.420 for you. You just say I want a link to this 00:13:36.420 --> 00:13:38.940 thing and it figures out what's at point and 00:13:38.940 --> 00:13:42.240 it determines the right type of implicit link 00:13:42.240 --> 00:13:45.520 to put there. And that's the whole point is 00:13:45.520 --> 00:13:47.320 that you're just working like when you're 00:13:47.320 --> 00:13:50.500 programming or you're writing an article and 00:13:50.500 --> 00:13:53.520 you just hit made a return or or pull up a 00:13:53.520 --> 00:13:57.180 menu and hit a key binding and you're off to 00:13:57.180 --> 00:14:02.400 the races. So that was implicit linking We 00:14:02.400 --> 00:14:05.260 can also create those explicit link buttons, 00:14:06.200 --> 00:14:07.760 and as well as the global link, 00:14:07.760 --> 00:14:09.580 where we would just give it a name, 00:14:09.580 --> 00:14:11.640 and it would automatically put it in our 00:14:11.640 --> 00:14:14.640 global button file without us even having 00:14:14.640 --> 00:14:18.380 that on screen. So lots of power there as 00:14:18.380 --> 00:14:19.660 well, lots of consistency. 00:14:21.900 --> 00:14:25.040 Now let's take a look at the K Outliner a 00:14:25.040 --> 00:14:28.040 little more. I'm just going to show you 1 00:14:28.040 --> 00:14:29.820 feature actually. I don't have time to show 00:14:29.820 --> 00:14:31.580 you the K Outliner in detail, 00:14:31.800 --> 00:14:34.220 but it's a really cool structured outliner 00:14:34.280 --> 00:14:36.400 that even if you love Org Mode, 00:14:36.580 --> 00:14:39.280 you should try it. And this is 1 thing that 00:14:39.280 --> 00:14:41.060 you can't get with Org Mode, 00:14:41.320 --> 00:14:45.100 is let's say Hyperlink comes with an example 00:14:45.100 --> 00:14:48.580 file which teaches you about the K Outliner. 00:14:48.960 --> 00:14:50.940 So we'll just use that right here. 00:14:51.180 --> 00:14:53.040 And when you're in the K Outliner, 00:14:53.080 --> 00:14:55.820 you can bring up and go into the K Outliner 00:14:55.900 --> 00:14:57.540 menu right here at the bottom. 00:14:58.200 --> 00:15:00.360 And there's a format menu there. 00:15:00.360 --> 00:15:02.600 You always take the first letter of a menu, 00:15:02.600 --> 00:15:05.100 the first capital letter of a menu item. 00:15:05.240 --> 00:15:08.720 So F for format and then D for display in 00:15:08.720 --> 00:15:11.700 browser. So just let's do it. 00:15:12.740 --> 00:15:17.220 We have with 1 button or 1 key we've produced 00:15:17.780 --> 00:15:23.660 the entire outline in a collapsible outline 00:15:23.720 --> 00:15:26.260 in HTML. So I can go here. 00:15:27.620 --> 00:15:29.240 I just have to use my mouse. 00:15:29.600 --> 00:15:33.300 So I can expand and collapse these trees live 00:15:34.220 --> 00:15:39.520 with very basic coding. 00:15:39.760 --> 00:15:42.680 We tried to keep this as simple as possible. 00:15:42.880 --> 00:15:45.580 But you see it maintains the structure of the 00:15:45.580 --> 00:15:47.880 outline and even tables. 00:15:55.120 --> 00:15:57.620 So all the formatting is maintained and again 00:15:57.620 --> 00:16:00.100 it's instant. Or you can just export it to a 00:16:00.100 --> 00:16:01.920 file without displaying it. 00:16:03.900 --> 00:16:05.880 Very efficient kinds of operations. 00:16:06.420 --> 00:16:10.960 So that was number 4. Number 3 is a 00:16:10.960 --> 00:16:13.400 subsystem, another subsystem in Hyperbole 00:16:13.440 --> 00:16:16.080 called Hycontrol, which is for window and 00:16:16.080 --> 00:16:18.600 frame management. And I just wanted to show 00:16:18.600 --> 00:16:20.920 you 1 thing in there. It's got a lot of 00:16:20.920 --> 00:16:24.400 capabilities. But I always had the problem 00:16:24.480 --> 00:16:28.340 that Emacs wouldn't let me scale my fonts, 00:16:28.380 --> 00:16:30.780 all of my faces at the same time. 00:16:30.840 --> 00:16:33.680 I wanted to zoom. I didn't want to increase 00:16:33.680 --> 00:16:36.260 the default font size and all the others stay 00:16:36.260 --> 00:16:40.660 the same. So let's just display our faces 00:16:41.260 --> 00:16:45.200 right here and then we have a choice of 00:16:45.200 --> 00:16:47.860 either controlling frames or windows. 00:16:47.920 --> 00:16:50.240 So let's start by controlling frames. 00:16:50.460 --> 00:16:52.760 So you get another submenu when you're in 00:16:52.760 --> 00:16:56.020 high control to tell you what to do here. 00:16:56.320 --> 00:16:59.480 And there's just lowercase z and uppercase z. 00:16:59.480 --> 00:17:03.400 So let's try it. So it's scaling the entire 00:17:03.400 --> 00:17:06.020 frame. And you can see from the list of faces 00:17:06.260 --> 00:17:08.500 that they're all scaling at the same time. 00:17:08.599 --> 00:17:10.220 And I can go back down. 00:17:10.760 --> 00:17:13.619 Now if I switch to window mode, 00:17:13.619 --> 00:17:16.099 and there's a special fast way to do that, 00:17:16.099 --> 00:17:18.819 just hit T to toggle. And if you look at the 00:17:18.819 --> 00:17:21.819 bottom menu it says frames right now now it 00:17:21.819 --> 00:17:25.599 says windows when I hit T so now if I do the 00:17:25.599 --> 00:17:30.640 same Z to increase it's just this window and 00:17:30.640 --> 00:17:36.800 but it's you know it's the faces in there so 00:17:37.200 --> 00:17:40.680 a lot of power again but I just haven't found 00:17:40.680 --> 00:17:43.220 anywhere else that you can get that kind of 00:17:43.220 --> 00:17:45.820 control over your faces very rapidly. 00:17:45.920 --> 00:17:51.640 So that's number 3. Now number 2, 00:17:55.360 --> 00:17:56.780 let's put that in there. 00:17:58.340 --> 00:18:03.320 So the HiROLO is the final subsystem in 00:18:03.320 --> 00:18:06.240 Hyperbole and this has gotten much cooler. 00:18:06.500 --> 00:18:08.680 So it started off as a contact management 00:18:08.680 --> 00:18:11.540 system, but it's really just a hierarchical 00:18:11.880 --> 00:18:15.060 record management system that lets you have 00:18:15.060 --> 00:18:18.020 as many files, directories as you want, 00:18:18.120 --> 00:18:20.280 and you can search across all of them without 00:18:20.280 --> 00:18:23.240 any external utilities necessary, 00:18:23.960 --> 00:18:26.240 just what's built into Emacs and Hyperlink. 00:18:26.760 --> 00:18:29.920 So as you can see, we've expanded it to 00:18:29.920 --> 00:18:31.820 handle org files, markdown, 00:18:32.300 --> 00:18:34.620 K outlines, Emacs outlines. 00:18:34.780 --> 00:18:36.820 So what I'm going to do is just say, 00:18:36.820 --> 00:18:40.680 I want to search using my Hyberlo file list. 00:18:40.680 --> 00:18:43.140 You just set that to what you wanted to 00:18:43.140 --> 00:18:44.820 search. But now you have all this 00:18:44.820 --> 00:18:46.520 flexibility. You can use environment 00:18:46.620 --> 00:18:48.840 variables in it. You can just specify a 00:18:48.840 --> 00:18:51.340 directory and it will find all those matching 00:18:51.340 --> 00:18:53.540 files below that directory recursively. 00:18:55.240 --> 00:18:58.460 You can give it the markdown file here and 00:18:58.460 --> 00:19:01.160 you can use file wildcards as well. 00:19:01.160 --> 00:19:04.340 I mean, look at this. It's got a list 00:19:04.340 --> 00:19:06.140 variable in it and a wildcard, 00:19:06.540 --> 00:19:09.840 and it's just all I'm gonna do is I change 00:19:09.840 --> 00:19:13.380 this from a Lisp expression to make it a 00:19:13.380 --> 00:19:15.380 hyper button. You just change the outer 00:19:15.380 --> 00:19:16.920 parens to angle brackets, 00:19:17.120 --> 00:19:19.620 and then it's automatically an implicit 00:19:21.040 --> 00:19:22.840 button that you can activate with made a 00:19:22.840 --> 00:19:26.340 return so just ran that and now I've set my 00:19:26.800 --> 00:19:29.440 file list so now let's do a search it would 00:19:29.440 --> 00:19:34.620 be ctrl H H roll it X R and then S for search 00:19:34.820 --> 00:19:36.680 But I'll just do it this way. 00:19:37.200 --> 00:19:40.320 And boom, it found everything that fast. 00:19:41.060 --> 00:19:42.940 And I can just get like, 00:19:43.180 --> 00:19:45.520 show the top items in there. 00:19:45.520 --> 00:19:48.260 So I kind of have outlining in this buffer. 00:19:48.340 --> 00:19:51.940 I can just move to each match that I hit. 00:19:51.980 --> 00:19:53.680 And notice, although everything was 00:19:53.680 --> 00:19:55.580 collapsed, it's expanding here. 00:19:55.640 --> 00:19:58.540 When I move in and out of each of the entry 00:19:58.540 --> 00:20:02.380 matches, it expands or collapses as I move to 00:20:02.380 --> 00:20:06.220 the next 1. So a lot of power there. 00:20:06.820 --> 00:20:09.120 What else? So just tabbing through these 00:20:09.120 --> 00:20:11.200 things. And you notice that it's working 00:20:11.200 --> 00:20:13.300 across all of these different types, 00:20:13.340 --> 00:20:16.220 and it's telling you which file everything 00:20:16.360 --> 00:20:17.840 came from right up here. 00:20:17.840 --> 00:20:19.940 So I could just made a return here, 00:20:20.220 --> 00:20:23.500 should work. Yes, revisit the file normally. 00:20:23.800 --> 00:20:25.760 And it just pulls it right up. 00:20:25.920 --> 00:20:28.400 So everything is live and hyperbole. 00:20:28.580 --> 00:20:30.120 You've got hyperlinks everywhere. 00:20:31.300 --> 00:20:33.740 Let's just get rid of that. 00:20:34.020 --> 00:20:41.600 Go back to our demo. So if you are fans of 00:20:41.600 --> 00:20:46.560 Vertico and Consult, you can now use that 00:20:46.560 --> 00:20:49.300 with the High Rollo. So all you have to do is 00:20:49.300 --> 00:20:51.440 let's just format our windows, 00:20:51.760 --> 00:20:55.720 and then I'll say, let's use ConsultGrep over 00:20:55.720 --> 00:20:58.880 the Rolodex. Now, it found all the matches 00:20:58.940 --> 00:21:02.060 there, and I can just move live through them 00:21:02.220 --> 00:21:04.640 in the buffer like you may be used to or I 00:21:04.640 --> 00:21:08.600 can filter back down and say using orderless 00:21:10.240 --> 00:21:13.700 joystick or anything that has joy in it just 00:21:13.700 --> 00:21:17.160 match to those lines and then I can you know 00:21:17.160 --> 00:21:20.020 either jump there or quit out of here. 00:21:20.020 --> 00:21:22.080 I'll just quit out of it right now. 00:21:22.540 --> 00:21:25.240 So very cool. And all of that is using 00:21:25.240 --> 00:21:28.640 whatever you personally set as the set of 00:21:28.640 --> 00:21:30.560 files and directories you want to search. 00:21:31.380 --> 00:21:35.940 And finally, our number 1 feature of 00:21:35.940 --> 00:21:40.440 Hyperbole is you can customize this to give 00:21:40.440 --> 00:21:43.460 you these kinds of implicit buttons, 00:21:44.660 --> 00:21:46.080 whatever kind you want. 00:21:46.560 --> 00:21:49.140 And there are 3 levels of doing this. 00:21:49.540 --> 00:21:51.140 The first is for non-programmers. 00:21:51.900 --> 00:21:53.700 You can just set a string, 00:21:54.400 --> 00:21:57.040 like a URL with a parameter in it. 00:21:57.180 --> 00:21:59.440 So the %s represents the parameter, 00:21:59.680 --> 00:22:01.440 and This is how you do a search on 00:22:01.440 --> 00:22:04.060 DuckDuckGo. So all I have to do is evaluate 00:22:04.320 --> 00:22:07.180 this defal for action link. 00:22:07.800 --> 00:22:11.020 And now I have a new implicit button type 00:22:11.040 --> 00:22:13.380 that I can put between angle brackets. 00:22:13.740 --> 00:22:15.640 And I just give it that name, 00:22:16.020 --> 00:22:18.000 DDG, and some parameter, 00:22:18.280 --> 00:22:20.040 whatever I want to search for, 00:22:20.080 --> 00:22:23.040 and this is a button that does that search. 00:22:25.320 --> 00:22:28.680 Very cool, right? So you can embed these. 00:22:28.680 --> 00:22:31.040 This could be a hyperlink in, 00:22:32.140 --> 00:22:35.120 you know, a comment in a programming file. 00:22:35.320 --> 00:22:38.160 Anything on the entire web that you want to 00:22:38.160 --> 00:22:42.320 link to, whatever kind of compact notation 00:22:42.840 --> 00:22:44.800 you want to give it. So that's what we're 00:22:44.800 --> 00:22:47.140 going to learn as we get more advanced here 00:22:47.140 --> 00:22:49.400 you can give it even more compact notations. 00:22:49.840 --> 00:22:52.380 So as you get more advanced you can say, 00:22:52.380 --> 00:22:54.240 well I don't like this angle bracket, 00:22:54.240 --> 00:22:57.020 I want to have an implicit button that uses 00:22:57.280 --> 00:22:59.620 these square brackets and then an angle 00:22:59.620 --> 00:23:02.080 bracket inside it. So then you need the 00:23:02.080 --> 00:23:05.200 defile for implicit link. 00:23:06.040 --> 00:23:08.860 This lets you specify your start and end 00:23:08.860 --> 00:23:12.180 delimiters for your new type and and then you 00:23:12.180 --> 00:23:14.840 can give it a function that you wanted to run 00:23:15.040 --> 00:23:18.320 and that will take the text of whatever is in 00:23:18.320 --> 00:23:19.780 the button, in this case, 00:23:19.900 --> 00:23:23.760 test release here, and feed it to the 00:23:23.760 --> 00:23:26.080 function that I gave here. 00:23:26.080 --> 00:23:29.540 So what this function does is grep over my 00:23:29.540 --> 00:23:33.420 git log and find any commits that include the 00:23:33.420 --> 00:23:35.360 term test release in it. 00:23:35.360 --> 00:23:38.200 So let's try it. First I have to add the 00:23:38.200 --> 00:23:41.740 button type and that's all it takes and it 00:23:41.740 --> 00:23:44.800 defined it now. So anywhere in Emacs now I 00:23:44.800 --> 00:23:46.920 can use this button type essentially. 00:23:47.180 --> 00:23:48.980 So let me try to activate it. 00:23:49.200 --> 00:23:52.760 Okay, and it says yeah let's save it. 00:23:53.080 --> 00:23:55.940 Okay so now it's running a git log command. 00:23:56.320 --> 00:23:59.440 It found all the commits and now of course if 00:23:59.440 --> 00:24:02.980 I had made a return on this commit it 00:24:02.980 --> 00:24:05.500 recognizes it as an implicit link, 00:24:05.680 --> 00:24:09.300 and if I search for what was a test release, 00:24:09.600 --> 00:24:11.960 there it is. So this commit had that in 00:24:11.960 --> 00:24:14.180 there. So all these matches, 00:24:14.180 --> 00:24:16.280 so I don't know how other people do this, 00:24:16.280 --> 00:24:20.040 but for me this makes it a lot simpler. 00:24:21.280 --> 00:24:24.800 So a lot of power that any programmer can 00:24:24.800 --> 00:24:27.500 use. And finally, if you've mastered Emacs 00:24:27.500 --> 00:24:29.360 Lisp, or you're starting to, 00:24:29.440 --> 00:24:33.740 you can look in the hib types file in 00:24:33.740 --> 00:24:37.320 Hyperbole and see all sorts of uses of defib, 00:24:37.500 --> 00:24:39.440 which is defined implicit button. 00:24:39.660 --> 00:24:42.660 And that's the full power of e-LISP when you 00:24:42.660 --> 00:24:45.060 want to define 1. So what we're going to do 00:24:45.060 --> 00:24:46.780 here is I wanted to know, 00:24:47.080 --> 00:24:49.700 given a date, what the day of the week is. 00:24:49.900 --> 00:24:53.040 And because the date primitives weren't quite 00:24:53.040 --> 00:24:54.640 written the way I might like, 00:24:55.080 --> 00:24:57.520 it's a little longer than some. 00:24:57.520 --> 00:25:00.400 But I'm just going to evaluate this list. 00:25:00.720 --> 00:25:06.100 And I've now defined DOW as an action type. 00:25:06.140 --> 00:25:08.500 Now, how do I know I'm doing that? 00:25:08.500 --> 00:25:10.700 So I can always say Control-H, 00:25:11.000 --> 00:25:13.580 capital A here to see what a button's going 00:25:13.580 --> 00:25:15.840 to do. And it tells me When I'm there, 00:25:15.840 --> 00:25:18.140 I'm at a hyperbole button, 00:25:18.400 --> 00:25:23.440 and the type is from category DOW. 00:25:24.000 --> 00:25:25.120 And what's it gonna do? 00:25:25.120 --> 00:25:27.420 It takes a mark, it's gonna do a message 00:25:27.440 --> 00:25:29.880 action. Okay, so let's try it. 00:25:31.300 --> 00:25:32.800 It tells me that's a date, 00:25:32.800 --> 00:25:34.220 and it falls on a Sunday, 00:25:34.220 --> 00:25:35.820 which is today. That's correct. 00:25:36.100 --> 00:25:39.020 So 2 days from today is a Tuesday. 00:25:39.800 --> 00:25:43.400 Beautiful. So we've just totally transformed 00:25:44.840 --> 00:25:46.860 what we can do with text. 00:25:46.980 --> 00:25:48.900 You notice there's no markup here. 00:25:49.000 --> 00:25:53.440 And this is working with all of the other 00:25:53.440 --> 00:25:55.600 implicit types that we have everywhere in 00:25:55.600 --> 00:25:57.920 Emacs. It's only going to match to this kind 00:25:57.920 --> 00:26:00.560 of pattern and anywhere else, 00:26:00.720 --> 00:26:02.820 you know, it just won't trigger that type. 00:26:03.460 --> 00:26:06.480 So lots of power. You just need to get 00:26:06.480 --> 00:26:07.700 started with Hyperbole. 00:26:07.960 --> 00:26:10.860 There's great documentation both inside the 00:26:10.860 --> 00:26:12.180 code and in the manual. 00:26:12.520 --> 00:26:15.460 There's a fast demo that you can start with 00:26:15.520 --> 00:26:17.800 and there's about 10 different videos. 00:26:18.260 --> 00:26:21.220 There'll be 3 presentations on hyperbole here 00:26:21.560 --> 00:26:25.660 at the conference, and I hope you've enjoyed 00:26:25.760 --> 00:26:28.200 this presentation. I'd love to answer your 00:26:28.200 --> 00:26:31.200 questions and get some new users for 00:26:31.200 --> 00:26:36.040 Hyperbole. So lastly, I'd like to thank my 00:26:36.040 --> 00:26:38.040 co-maintainer, Matt, who's going to speak 00:26:38.040 --> 00:26:42.040 later about the extensive test protocols we 00:26:42.040 --> 00:26:45.920 have in Hyperbole. Hyperbole works on every 00:26:46.120 --> 00:26:47.860 version of Emacs from 27.1 00:26:48.480 --> 00:26:52.600 up, and every operating system and Windows 00:26:52.600 --> 00:26:56.120 system that you use. And thanks so much to 00:26:56.120 --> 00:26:58.680 the volunteers and the speakers at EmacsConf. 00:26:59.200 --> 00:27:02.000 You do a great job, and we're all really 00:27:02.000 --> 00:27:04.400 appreciative that you take all the time that 00:27:04.400 --> 00:27:06.240 you do to make this happen. 00:27:06.540 --> 00:27:07.620 Thank you very much. 00:27:09.960 --> 00:27:11.400 [Speaker 1]: And thank you so much Bob. 00:27:11.400 --> 00:27:14.680 So I'll let you do the gymnastics to join us 00:27:14.680 --> 00:27:16.440 back on BBB and put your webcam. 00:27:17.020 --> 00:27:18.840 In the meantime, I'll invite people, 00:27:19.120 --> 00:27:20.740 as Sasha told you in the introduction, 00:27:21.060 --> 00:27:23.600 to go put your question in the pad. 00:27:23.600 --> 00:27:25.900 The link is on the talks page and also on 00:27:25.900 --> 00:27:28.220 IRC. So take your time. 00:27:28.320 --> 00:27:29.900 We've already got some people who've asked 00:27:29.900 --> 00:27:33.060 questions. You can also start joining the 00:27:33.060 --> 00:27:35.140 room. Let me just ping Sasha. 00:27:35.540 --> 00:27:38.440 Ping to open ID HyperAmp. 00:27:39.280 --> 00:27:41.120 So, you'll be able to join us on 00:27:41.120 --> 00:27:43.260 BigBlueButton as well to go chat with Bob 00:27:43.260 --> 00:27:45.020 more directly. I'm not sure if people have 00:27:45.020 --> 00:27:46.480 joined already. Not yet. 00:27:50.220 --> 00:27:51.060 So, Bob, what I'll do, 00:27:51.060 --> 00:27:52.280 we already have 4 questions. 00:27:52.280 --> 00:27:54.080 I'm gonna read them to you and you can take 00:27:54.080 --> 00:27:54.900 your time answering them, 00:27:54.900 --> 00:27:57.340 but we do have about 7 minutes until we go to 00:27:57.340 --> 00:27:59.080 the next talk, so we need to be a little bit 00:28:00.420 --> 00:28:00.920 [Speaker 0]: Okay. 00:27:59.080 --> 00:28:03.260 [Speaker 1]: chop-chop. All right, so reading the first 00:28:03.260 --> 00:28:05.460 questions, and I'm also going to display them 00:28:05.460 --> 00:28:06.920 for the stream to see, 00:28:07.580 --> 00:28:09.740 do buttons keep their metadata within the 00:28:09.740 --> 00:28:12.380 same file? E.g., would I see it if I change 00:28:12.380 --> 00:28:13.940 to fundamental mode, for instance? 00:28:15.820 --> 00:28:19.340 [Speaker 0]: So all of the things that I was showing you, 00:28:19.340 --> 00:28:21.300 implicit buttons have no metadata. 00:28:21.900 --> 00:28:23.800 That's the great thing about them, 00:28:23.800 --> 00:28:27.400 is you just type them in the buffer and what 00:28:27.400 --> 00:28:30.020 you see is all there is to that button and 00:28:30.020 --> 00:28:33.300 hyperbole generates all the smarts associated 00:28:33.320 --> 00:28:35.780 with them. When you create an explicit 00:28:35.940 --> 00:28:38.680 button, which I showed you 1 or 2 examples 00:28:38.760 --> 00:28:42.720 of, that metadata is, there is metadata with 00:28:42.720 --> 00:28:45.860 that, and that is stored in a separate file 00:28:45.860 --> 00:28:47.860 in the same directory called .hypb. 00:28:49.240 --> 00:28:51.500 So it's hidden away and it doesn't affect the 00:28:51.500 --> 00:28:53.700 format of the buffer that it's in. 00:28:53.940 --> 00:28:56.540 So again, what you see is what you get. 00:28:56.600 --> 00:28:58.740 You just see the delimiters around the 00:28:58.740 --> 00:29:01.140 explicit button and that's it. 00:29:01.840 --> 00:29:04.500 So Hyperbole takes care of all that for you. 00:29:04.860 --> 00:29:08.360 However, if you embed them into like a mail 00:29:08.360 --> 00:29:09.440 message, which you can, 00:29:09.440 --> 00:29:12.180 you can mail buttons, then there is a hidden 00:29:12.180 --> 00:29:14.760 area at the end of the mail message that 00:29:14.760 --> 00:29:17.120 encodes the metadata for the explicit 00:29:17.120 --> 00:29:17.620 buttons. 00:29:19.540 --> 00:29:21.640 [Speaker 1]: Ok, great. Next question. 00:29:21.980 --> 00:29:24.560 Is it possible to link to a file by its ID, 00:29:24.720 --> 00:29:27.340 like the node, org ID or some similar unique 00:29:27.340 --> 00:29:28.120 string inside? 00:29:29.380 --> 00:29:32.620 [Speaker 0]: Yes, In fact, that's 1 of the new features in 00:29:33.280 --> 00:29:37.800 9. You just made a return on an ID and it 00:29:37.800 --> 00:29:40.780 takes you right to the org node, 00:29:40.840 --> 00:29:44.880 works with org Rome and org straight out of 00:29:44.880 --> 00:29:47.900 the box. We're looking at ways to make it 00:29:47.900 --> 00:29:50.040 easier to just insert those in places, 00:29:50.040 --> 00:29:52.840 but since you have word keys that do that 00:29:52.840 --> 00:29:55.600 already, you can just insert them in any 00:29:55.600 --> 00:29:58.360 documents and Hyperbole will recognize them. 00:29:58.360 --> 00:30:02.620 I think In some cases you may need to put ID 00:30:02.680 --> 00:30:05.400 colon in front of the ID as well. 00:30:05.740 --> 00:30:06.920 Generally it works. 00:30:08.560 --> 00:30:11.560 [Speaker 1]: Ok, great. Moving on to the next question. 00:30:12.120 --> 00:30:13.760 Regarding the frames example, 00:30:14.240 --> 00:30:16.320 any thoughts or considerations for a 00:30:16.320 --> 00:30:19.020 transient interface or is this something 1 00:30:19.020 --> 00:30:22.280 could already toggle? Are you familiar with 00:30:22.280 --> 00:30:23.160 transient interface? 00:30:23.560 --> 00:30:26.700 [Speaker 0]: Yes, we don't use transient because we, 00:30:26.720 --> 00:30:30.140 you know, Hyperbole started out in 1991, 00:30:30.520 --> 00:30:34.300 though it's had much much work since then so 00:30:34.300 --> 00:30:37.940 we predate a lot of newer things in Emacs and 00:30:37.940 --> 00:30:41.400 then we just use them as as they Become 00:30:41.400 --> 00:30:45.480 useful too hyperbole We think the The mini 00:30:45.480 --> 00:30:46.720 buffer menu is pretty good. 00:30:46.720 --> 00:30:48.780 We could rewrite stuff in transient, 00:30:48.900 --> 00:30:51.600 but we haven't seen the need yet. 00:30:52.760 --> 00:30:54.960 Maybe high control, that might be a good 00:30:54.960 --> 00:30:58.480 candidate, because there are so many keys in 00:30:58.480 --> 00:31:00.480 it. So we'll think about that. 00:31:00.480 --> 00:31:03.060 But it would be a while before we got to it. 00:31:04.780 --> 00:31:07.120 [Speaker 1]: Right. Moving on to the next question. 00:31:07.120 --> 00:31:08.760 Sorry I got really confused because there's a 00:31:08.760 --> 00:31:10.620 French salut, you know, 00:31:10.660 --> 00:31:12.940 in the text of it. Is someone saying hi to me 00:31:12.940 --> 00:31:14.380 or something? All right, 00:31:14.380 --> 00:31:16.960 next question. Regarding multi-file search 00:31:16.960 --> 00:31:22.080 functionality, why not implement it within 00:31:22.080 --> 00:31:24.920 the existing framework of MetaX grep or 00:31:24.920 --> 00:31:26.180 similar built-in commands? 00:31:26.360 --> 00:31:28.620 Yet another search interface sounds a bit 00:31:28.620 --> 00:31:29.120 redundant. 00:31:30.920 --> 00:31:34.120 [Speaker 0]: Multi-file search, so HiRolo I guess you're 00:31:34.120 --> 00:31:36.380 talking about. I think what you missed there 00:31:36.380 --> 00:31:39.440 is that High Rollo matches to records, 00:31:40.080 --> 00:31:42.860 multi-line records, so it's not a 00:31:42.860 --> 00:31:45.360 line-oriented match, it's a record-oriented 00:31:45.820 --> 00:31:50.760 match. So Grep, you can say maybe give me 3 00:31:50.760 --> 00:31:52.960 lines of context, but what if I have a 00:31:52.960 --> 00:31:56.100 20-line record? I want to see the whole 00:31:56.100 --> 00:31:59.060 thing. And so, it's a full-text search 00:31:59.060 --> 00:32:03.480 interface, which lets you have any size 00:32:04.220 --> 00:32:07.260 entries or nodes in the match buffer. 00:32:07.540 --> 00:32:10.760 So that's 1 reason. MADAX grep works with 00:32:10.760 --> 00:32:13.260 hyperbole. I mean, you use it if you want and 00:32:13.260 --> 00:32:16.080 then you can hit MADA return on grep lines. 00:32:16.480 --> 00:32:20.140 So we basically take everything from POSIX 00:32:20.320 --> 00:32:24.920 and everything in Emacs and we try to make a 00:32:24.920 --> 00:32:26.680 lot of it simpler to use. 00:32:26.680 --> 00:32:28.960 We don't take away any of the functionality, 00:32:29.480 --> 00:32:31.040 we just augment it. 00:32:32.780 --> 00:32:35.200 [Speaker 1]: Right, and I think that's the logic for a lot 00:32:35.200 --> 00:32:36.300 of the packages, you know, 00:32:36.300 --> 00:32:38.440 the philosophy is just you create your little 00:32:38.440 --> 00:32:40.280 bit, your little island where you do your 00:32:40.280 --> 00:32:42.160 stuff. And if you can resonate with other 00:32:42.160 --> 00:32:43.280 islands so much the better. 00:32:43.280 --> 00:32:45.600 And it feels like between those islands, 00:32:45.700 --> 00:32:48.380 you know, hyperbole is a great way to connect 00:32:48.380 --> 00:32:49.980 things that are just text. 00:32:50.140 --> 00:32:51.880 So it's always been a lovely philosophy. 00:32:52.200 --> 00:32:53.620 There's always been a lovely philosophy 00:32:53.620 --> 00:32:54.360 behind it. 00:32:55.240 --> 00:32:58.200 [Speaker 0]: 1 other point I'd make there is that the 00:32:58.200 --> 00:33:01.460 Hyrolo also contains logical search 00:33:01.460 --> 00:33:04.940 operators. So when I typed in that string you 00:33:04.940 --> 00:33:07.360 could just as well type with like Lisp 00:33:07.360 --> 00:33:09.140 expressions, semi Lisp expressions. 00:33:09.480 --> 00:33:13.460 You can say open paren and word 1, 00:33:13.940 --> 00:33:17.240 word 2, close paren. You know you can have or 00:33:17.240 --> 00:33:22.360 and XOR and not and it'll do the search and 00:33:22.360 --> 00:33:24.260 just retrieve the entries, 00:33:24.720 --> 00:33:27.620 again, multi-line entries that match all of 00:33:27.620 --> 00:33:29.660 the criteria that you specified there. 00:33:29.760 --> 00:33:31.120 So that's fairly unique, 00:33:31.120 --> 00:33:33.320 I think. So you basically got a full text 00:33:33.320 --> 00:33:35.840 search platform with logical operators, 00:33:36.380 --> 00:33:38.580 instantly, you know, fast moving, 00:33:38.680 --> 00:33:42.720 rapid keys that you can control everything 00:33:42.720 --> 00:33:45.280 with and it's all integrated into this larger 00:33:45.280 --> 00:33:45.780 framework. 00:33:47.780 --> 00:33:49.060 [Speaker 1]: Okay, great. Well, Bob, 00:33:49.060 --> 00:33:50.520 you have 2 more questions, 00:33:50.820 --> 00:33:53.760 but there's a big 1 about what inspired you 00:33:53.760 --> 00:33:56.440 to write it back. It's being hyperbole around 00:33:56.440 --> 00:33:57.360 the time of its birth, 00:33:57.360 --> 00:33:59.680 but sadly, we only have about 1 more minute. 00:34:00.040 --> 00:34:01.320 So what I'm going to ask you to do, 00:34:01.320 --> 00:34:02.780 feel free to answer the question. 00:34:02.800 --> 00:34:05.220 If you go on BBB, I've pasted the link to the 00:34:05.220 --> 00:34:06.980 other pad. I think you can see it on your 00:34:08.420 --> 00:34:11.020 [Speaker 0]: I have the ether pad up. 00:34:06.980 --> 00:34:11.820 [Speaker 1]: computer as well. Right, 00:34:11.820 --> 00:34:13.100 so what are we going to do? 00:34:14.860 --> 00:34:16.679 I'm Sorry, I'm just a little bit pressed by 00:34:16.679 --> 00:34:18.280 time because it's not me controlling when we 00:34:18.280 --> 00:34:19.340 move on to the next talk, 00:34:19.340 --> 00:34:21.679 as was evidenced yesterday when we got yonked 00:34:21.719 --> 00:34:24.000 to the next talk. So Bob, 00:34:24.000 --> 00:34:25.679 feel free to take all the time you want to 00:34:25.679 --> 00:34:26.580 answer questions. People, 00:34:26.580 --> 00:34:28.360 if you wanna join the Big Blue Button room, 00:34:28.360 --> 00:34:30.239 the links are available and open on the talk 00:34:30.239 --> 00:34:31.960 page. You can join and ask as many questions 00:34:31.960 --> 00:34:33.679 as you want to Bob. And for us, 00:34:33.679 --> 00:34:35.560 with a live stream, we'll be moving on to the 00:34:35.560 --> 00:34:37.280 next talk in about 30 seconds. 00:34:37.280 --> 00:34:39.400 So Bob, all that's left is for me to thank 00:34:39.400 --> 00:34:41.580 you for your presentation again this year and 00:34:43.520 --> 00:34:44.560 [Speaker 0]: Thank you, Leo. 00:34:41.580 --> 00:34:45.820 [Speaker 1]: for all your answers. All right. 00:34:45.820 --> 00:34:47.699 Bye bye, Bob. And we'll be moving on to the 00:34:47.699 --> 00:34:49.080 next talk in about 10 seconds. 00:34:49.080 --> 00:34:53.800 See you in a bit. All right, 00:34:53.800 --> 00:34:56.139 Bob, we are off air I think now. 00:34:56.139 --> 00:34:57.720 Thank you so much. I need to get moving for 00:34:59.320 --> 00:35:02.320 [Speaker 0]: Okay, is somebody gonna keep writing answers 00:35:02.500 --> 00:35:04.540 in here or I need to type them in? 00:34:57.720 --> 00:35:06.260 [Speaker 1]: the next talk. It's probably best now if you 00:35:06.260 --> 00:35:09.440 read the questions on your own and answer 00:35:09.440 --> 00:35:11.040 them. We'll collate everything together, 00:35:11.040 --> 00:35:12.480 we'd just like to have your answers. 00:35:15.060 --> 00:35:17.180 [Speaker 0]: I hope some people will join the BBB. 00:35:19.000 --> 00:35:21.380 [Speaker 1]: it in my... All right, 00:35:21.380 --> 00:35:21.880 bye-bye. 00:35:17.780 --> 00:35:23.300 [Speaker 0]: But I'll start. I'll put Bye-bye. 00:35:24.220 --> 00:35:28.580 So let me take a second here to see what 00:35:28.580 --> 00:35:32.980 questions we have. Did we cover that? 00:35:36.240 --> 00:35:42.900 OK. The point is why not upstream search 00:35:42.980 --> 00:35:46.580 interface? Could you clarify that question? 00:35:46.840 --> 00:35:51.380 I don't quite know what that means. 00:35:51.380 --> 00:35:53.760 So I'll go on to the next 1 and come back to 00:35:53.760 --> 00:35:57.680 that. Hyperlinks been around for a number of 00:35:57.680 --> 00:35:59.820 years now. What inspired you to write it back 00:35:59.820 --> 00:36:01.500 around the time of its birth? 00:36:01.800 --> 00:36:03.140 Well, that's a great question. 00:36:04.700 --> 00:36:07.360 It was born before the World Wide Web, 00:36:07.360 --> 00:36:09.300 actually. And it was right before. 00:36:10.120 --> 00:36:13.100 I remember we were in the midst of a version 00:36:13.840 --> 00:36:16.300 when the first version of the web occurred. 00:36:16.560 --> 00:36:19.840 And I was thinking that there was going to be 00:36:19.840 --> 00:36:22.700 an information explosion of unstructured 00:36:22.960 --> 00:36:27.140 information. And like we needed to have much 00:36:27.140 --> 00:36:30.920 better tools to be able to manage say like 00:36:30.920 --> 00:36:36.740 5,000 email messages coming in and all sorts 00:36:36.740 --> 00:36:39.260 of non-database-oriented information 00:36:39.480 --> 00:36:42.020 structures. So I said we need an advanced 00:36:42.180 --> 00:36:46.080 interactive hypertext system and it needs to 00:36:46.080 --> 00:36:49.320 work with all the general capabilities that 00:36:49.320 --> 00:36:54.100 we use like email and our document production 00:36:54.240 --> 00:36:58.500 systems. So I was doing research at the time 00:36:58.500 --> 00:37:04.200 at a university And I decided to work on 00:37:04.200 --> 00:37:06.140 something that we called personalized 00:37:06.420 --> 00:37:07.520 information environments. 00:37:07.900 --> 00:37:10.120 And there's a paper about this out there if 00:37:10.120 --> 00:37:12.040 you want to dig it out on the web. 00:37:12.900 --> 00:37:15.360 So Pies, as they were called, 00:37:16.320 --> 00:37:20.040 was an architecture which would have a bunch 00:37:20.040 --> 00:37:24.100 of managers, like Hyperbole was 1 of the 00:37:24.100 --> 00:37:25.820 managers, the hypertext manager, 00:37:26.520 --> 00:37:29.440 and then a bunch of point tools that would 00:37:29.440 --> 00:37:30.720 leverage the managers, 00:37:30.800 --> 00:37:33.580 like an email reader would be a point tool 00:37:33.680 --> 00:37:36.140 that would leverage the hypertext manager. 00:37:36.780 --> 00:37:39.480 And so the first, I did in fact write 00:37:39.480 --> 00:37:40.520 something called PyMail, 00:37:41.460 --> 00:37:43.840 which was very much Gmail-like, 00:37:44.660 --> 00:37:47.640 before Gmail. And so inside, 00:37:48.100 --> 00:37:51.300 and I did a, it was like our mail in a way, 00:37:51.680 --> 00:37:54.020 but inside your our mail summaries, 00:37:54.100 --> 00:37:57.180 for example, you could have explicit buttons 00:37:57.180 --> 00:38:01.120 embedded and that were drawn from the subject 00:38:01.120 --> 00:38:02.300 of your email message, 00:38:02.400 --> 00:38:06.180 and they'd work just like the regular button. 00:38:06.300 --> 00:38:07.540 So it was very flexible, 00:38:07.700 --> 00:38:11.660 and it had rule-based processing and things. 00:38:11.820 --> 00:38:13.520 So Hyperbole came out of that, 00:38:13.520 --> 00:38:15.040 and it's come a long way, 00:38:15.200 --> 00:38:20.360 but it's still a very useful core hypertext 00:38:20.480 --> 00:38:22.040 system, hypermedia system, 00:38:22.040 --> 00:38:26.580 I should say. Are you familiar with the 00:38:26.580 --> 00:38:28.780 Embark package? I am a bit. 00:38:28.820 --> 00:38:30.520 I've just started using it. 00:38:30.520 --> 00:38:31.900 I think there's some overlapping 00:38:32.040 --> 00:38:34.200 functionality with hyperbole. 00:38:34.340 --> 00:38:39.360 Yes, we've found that people over time have 00:38:39.360 --> 00:38:41.600 enjoyed hyperbole and have started 00:38:41.600 --> 00:38:43.940 replicating some of its features, 00:38:43.940 --> 00:38:45.880 you know, small amounts of the features. 00:38:47.680 --> 00:38:51.340 I talked to, I hope I don't miss his name, 00:38:51.340 --> 00:38:56.000 but O'Adam who writes that once in a while we 00:38:56.000 --> 00:38:59.480 dialogue and I think Embark is great, 00:38:59.480 --> 00:39:04.500 you know, I'll give him some pointers too and 00:39:04.500 --> 00:39:08.040 he thinks that Embark and hyperbole are quite 00:39:08.040 --> 00:39:10.740 compatible too, just like organ hyperbole. 00:39:11.120 --> 00:39:13.080 So that's how we like to keep it. 00:39:14.540 --> 00:39:18.160 Some people prefer just a small package of 00:39:18.160 --> 00:39:21.100 mBARC, and it does different things than what 00:39:21.100 --> 00:39:23.800 Hyperbole does. So I think you use all of 00:39:23.800 --> 00:39:27.540 these tools together, and they can work very 00:39:27.540 --> 00:39:33.960 well together. Any other questions? 00:39:34.280 --> 00:39:38.300 Anybody still here? If not, 00:39:38.440 --> 00:39:41.180 probably people are off to another talk. 00:39:41.940 --> 00:39:47.160 So thank you very much And again look for 00:39:47.160 --> 00:39:51.840 Hyperbole version 9 in the next week. 00:39:53.740 --> 00:39:56.880 Thanks very much. Bye. 00:40:00.620 --> 00:40:07.120 Should I leave BBB? Oh Alpha Papa's here. 00:40:07.120 --> 00:40:16.040 Hey. Good to see you. Alright, 00:40:16.040 --> 00:40:22.740 well... Well, I'll stay for another minute, 00:40:22.820 --> 00:40:27.280 but I think I'm going to go off video 2 and 00:40:27.280 --> 00:40:29.780 start listening to another talk. 00:40:30.660 --> 00:40:31.480 Thanks, everyone. Thanks everyone. 00:40:56.040 --> 00:40:56.960 Yes, I can hear you. Yes, 00:40:58.860 --> 00:41:00.060 [Speaker 1]: Have you been answering questions? 00:40:56.960 --> 00:41:03.700 [Speaker 0]: I can hear you. finished answering the 00:41:03.700 --> 00:41:05.200 questions. We're all done. 00:41:00.060 --> 00:41:07.360 [Speaker 1]: I Okay, cool. Well, what I'm going to do, 00:41:07.360 --> 00:41:09.140 I'm going to close the room unless you want 00:41:09.140 --> 00:41:10.140 to go a little longer, 00:41:10.140 --> 00:41:11.880 because this talk that we're playing right 00:41:11.880 --> 00:41:13.940 now is finishing really quick and we don't 00:41:13.940 --> 00:41:15.140 have a Q&A afterwards. 00:41:15.300 --> 00:41:19.040 So, do you want to stay on air or something? 00:41:19.440 --> 00:41:21.680 [Speaker 0]: Yeah, if you let people know to come back, 00:41:21.680 --> 00:41:23.320 because someone went to go hear that 00:41:23.320 --> 00:41:24.900 presentation, I can stay. 00:41:25.920 --> 00:41:27.880 [Speaker 1]: Sure, I'll make an announcement then. 00:41:27.880 --> 00:41:29.680 And you can stay, we'll just put on BBB. 00:41:29.680 --> 00:41:31.840 You can stay muted until people join, 00:41:31.840 --> 00:41:33.840 but this way it opens up menus for people to 00:41:33.840 --> 00:41:36.060 join and if no 1 shows up in 5 minutes we'll 00:41:36.060 --> 00:41:38.080 all go on break. Does that sound okay? 00:41:38.680 --> 00:41:40.020 [Speaker 0]: Great, thank you. 00:41:40.520 --> 00:41:44.340 [Speaker 1]: Cool, I'll go back to the management in the 00:41:44.340 --> 00:41:45.660 background and I'll let you know. 00:43:25.760 --> 00:43:27.540 Okay, Bob, I've won the stream. 00:43:27.660 --> 00:43:28.940 We are joining it now. 00:43:28.940 --> 00:43:30.380 We've got about 5 seconds. 00:43:41.940 --> 00:43:43.580 And I think we are back. 00:43:49.240 --> 00:43:51.300 so we are gone, Bob, please. 00:43:45.340 --> 00:43:53.260 [Speaker 0]: Hi. So, yeah, I was going to say, 00:43:54.100 --> 00:43:57.160 can we see if anybody comes back in the room? 00:43:57.160 --> 00:43:58.120 How do you tell? 00:44:01.380 --> 00:44:03.740 [Speaker 1]: You should be able to show on the left, 00:44:03.740 --> 00:44:04.920 you've got on BbBlueButton, 00:44:04.920 --> 00:44:06.380 you've got a button, I'm showing it on the 00:44:06.380 --> 00:44:08.440 screen, but you've got a little button that 00:44:08.440 --> 00:44:10.420 allows you to show the people joining. 00:44:10.840 --> 00:44:15.380 So, hello everyone. Let's see if you had more 00:44:15.380 --> 00:44:17.080 question on your pad that we could be taking 00:44:17.080 --> 00:44:19.040 in the meantime, just give me a second to 00:44:19.040 --> 00:44:19.240 find 00:44:19.240 --> 00:44:23.500 [Speaker 0]: your pad. Here we go, an error occurred. 00:44:31.820 --> 00:44:33.220 [Speaker 1]: All right, it's loading up. 00:44:25.680 --> 00:44:37.840 [Speaker 0]: Okay. Wow. Feels like there's an AI writing 00:44:37.960 --> 00:44:39.760 this stuff on the pad. 00:44:41.120 --> 00:44:44.740 Has it? Is this the last pad? 00:44:45.600 --> 00:44:47.080 Oh no, this is a different 1, 00:44:49.840 --> 00:44:51.520 [Speaker 1]: Which question are you looking at now? 00:44:47.080 --> 00:44:53.820 [Speaker 0]: sorry. It was a different pad, 00:44:55.840 --> 00:44:56.460 [Speaker 1]: Oh right. 00:44:53.820 --> 00:44:57.109 [Speaker 0]: that was the problem. Okay, 00:44:57.260 --> 00:44:59.540 here we go. Okay, I'm back. 00:45:00.540 --> 00:45:01.860 So, yeah, it looks like... 00:45:02.260 --> 00:45:03.980 Is anybody back? Send, 00:45:04.120 --> 00:45:07.180 if you're here, send a chat message. 00:45:08.520 --> 00:45:10.020 [Speaker 1]: Yeah, because it's been something. 00:45:10.640 --> 00:45:14.240 You have, apparently, whenever we leave those 00:45:14.320 --> 00:45:18.220 BBB chat room open, the moment we go off air, 00:45:18.260 --> 00:45:20.280 people start joining and asking a lot of very 00:45:20.280 --> 00:45:22.200 interesting questions and you know that's all 00:45:22.200 --> 00:45:24.280 well and good, we'll be able to put them on 00:45:24.280 --> 00:45:26.280 the page later on. But it'd be great if you 00:45:26.280 --> 00:45:28.260 could also have those discussions when we are 00:45:28.260 --> 00:45:30.140 live because a lot of people would benefit 00:45:30.140 --> 00:45:32.120 from the brilliance that goes on in this 00:45:32.120 --> 00:45:34.740 room. So please don't be shy, 00:45:37.340 --> 00:45:39.900 [Speaker 0]: So we're on the general stream now? 00:45:34.740 --> 00:45:41.780 [Speaker 1]: join and talk. Yep, we are back on the 00:45:41.780 --> 00:45:46.080 general stream. We have about until 10 of the 00:45:46.080 --> 00:45:48.180 next hour, which is 19 minutes. 00:45:48.760 --> 00:45:52.540 [Speaker 0]: Just- Why don't you and I talk? 00:45:52.540 --> 00:45:56.180 So have you ever tried hyperbole, 00:45:56.400 --> 00:45:56.900 Leo? 00:45:58.180 --> 00:46:00.220 [Speaker 1]: I have never, but You know, 00:46:00.220 --> 00:46:03.380 it feels like every year when you present 00:46:03.380 --> 00:46:05.140 something, it feels like I already know so 00:46:05.140 --> 00:46:07.580 much. Because of the buttons, 00:46:08.040 --> 00:46:10.080 it feels like it's also something that we've 00:46:10.080 --> 00:46:12.440 reinvented many times in Emacs. 00:46:12.440 --> 00:46:13.940 It's like conversion to evolution, 00:46:14.020 --> 00:46:16.540 except you're the 1 who started ahead of 00:46:16.540 --> 00:46:17.420 everyone else. 00:46:17.860 --> 00:46:19.700 [Speaker 0]: Well, that's a good point because, 00:46:19.940 --> 00:46:23.200 you know, we have, Emacs itself has push 00:46:23.200 --> 00:46:25.520 buttons, which you see like in the help 00:46:25.520 --> 00:46:27.540 buffers. And those used to, 00:46:27.540 --> 00:46:29.840 we didn't really do anything with those, 00:46:30.040 --> 00:46:32.780 but now we've subsumed them as implicit 00:46:32.800 --> 00:46:35.340 buttons as well. So you're made a return, 00:46:35.580 --> 00:46:38.500 we'll work on those anywhere too. 00:46:38.740 --> 00:46:41.820 So, we're trying to get, 00:46:42.260 --> 00:46:45.920 you use 1 key, right? To control every type 00:46:45.920 --> 00:46:47.080 of button that you have. 00:46:47.080 --> 00:46:48.420 It works on org links, 00:46:48.560 --> 00:46:51.800 org buttons anywhere, or URLs. 00:46:53.240 --> 00:46:54.440 Because it's so simple. 00:46:54.520 --> 00:46:58.820 All you need is like 5 to 10 lines of code to 00:46:58.820 --> 00:47:02.760 map. You map the pattern that represents a 00:47:02.760 --> 00:47:05.080 concept, right? And then you can create an 00:47:05.080 --> 00:47:07.720 infinite number of those buttons from that 00:47:07.720 --> 00:47:09.520 type. That's what's really cool about 00:47:09.520 --> 00:47:13.060 Hyperbole, is say I have a 500 page document 00:47:13.280 --> 00:47:15.600 and it uses a really weird format for 00:47:15.600 --> 00:47:17.060 cross-referencing, right? 00:47:17.220 --> 00:47:22.320 I write my 3 lines of pattern match to work 00:47:22.320 --> 00:47:24.200 with that. And then everywhere throughout 00:47:24.200 --> 00:47:25.960 that document and the hundreds of other 00:47:25.960 --> 00:47:27.680 documents that will be created with that 00:47:27.680 --> 00:47:30.900 format, they're all live buttons instantly. 00:47:31.280 --> 00:47:33.240 Nothing changed about the document. 00:47:34.220 --> 00:47:35.500 That's really cool. You know, 00:47:35.500 --> 00:47:37.860 word mode, we have global word buttons, 00:47:37.940 --> 00:47:42.040 but mostly it has to be embedded within an 00:47:42.040 --> 00:47:44.760 org file, right? And follow that syntax. 00:47:45.580 --> 00:47:51.900 With hyperbole, it's like we can adapt as the 00:47:51.900 --> 00:47:55.300 world adapts around us to whatever formats 00:47:55.320 --> 00:47:56.940 people want to use that day. 00:47:56.940 --> 00:47:59.380 And you can even change things to look the 00:47:59.380 --> 00:48:02.200 way you want, right, and have your own 00:48:02.440 --> 00:48:04.860 cross-references. There's something built 00:48:04.860 --> 00:48:07.560 into Hyperbole that's not really active, 00:48:08.220 --> 00:48:13.120 which was sort of along the Zettelkasten way. 00:48:13.780 --> 00:48:15.440 We wrote this a long time ago. 00:48:15.440 --> 00:48:16.960 It's called hib-doc.el, 00:48:19.120 --> 00:48:22.200 and it's a card catalog notion. 00:48:22.200 --> 00:48:25.820 So it uses the high rollo in the background 00:48:26.160 --> 00:48:30.180 but it lets you create these forms that are 00:48:30.180 --> 00:48:32.800 cards that you fill out with whatever kind of 00:48:32.800 --> 00:48:35.360 data you want and then it gives you the full 00:48:35.360 --> 00:48:38.520 text searching across the cards and each card 00:48:38.520 --> 00:48:41.760 has a unique ID that you can reference 00:48:41.820 --> 00:48:45.240 similar to org IDs but these are human 00:48:45.240 --> 00:48:49.860 readable and human typable and so you can you 00:48:49.860 --> 00:48:52.940 can just have a cross-reference to any doc ID 00:48:52.960 --> 00:48:56.100 and essentially create what Engelbart used to 00:48:56.100 --> 00:49:00.520 call a journal, which is all these IDs on 00:49:00.520 --> 00:49:03.220 documents that point you directly to the 00:49:03.220 --> 00:49:05.640 document archive so that you could have like 00:49:05.640 --> 00:49:10.020 your internal publishing system and you know 00:49:10.020 --> 00:49:12.940 it's very simple to do and it's just 1 module 00:49:13.420 --> 00:49:14.660 added on to Hyperbole. 00:49:15.920 --> 00:49:19.140 [Speaker 1]: Yeah it's especially interesting for me you 00:49:19.140 --> 00:49:21.140 know because coming back to the side of 00:49:21.140 --> 00:49:23.400 convergent evolutions it's funny because the 00:49:23.400 --> 00:49:24.880 parameters are a little different. 00:49:24.920 --> 00:49:26.260 For us with org buttons, 00:49:26.260 --> 00:49:29.340 we're very happy. A lot of the stuff during 00:49:29.340 --> 00:49:31.360 EmacsConf is run with org mode, 00:49:31.360 --> 00:49:34.340 like we have Elisp going everywhere to 00:49:34.540 --> 00:49:37.320 compile a lot of org properties, 00:49:38.080 --> 00:49:39.640 like speaker information, 00:49:39.660 --> 00:49:41.480 for instance, how long the talk is, 00:49:41.480 --> 00:49:42.800 the title, and all this. 00:49:42.800 --> 00:49:44.760 We have all of this in an org file, 00:49:44.760 --> 00:49:46.020 which we use as a database, 00:49:46.220 --> 00:49:47.800 but then we can do so much stuff. 00:49:47.800 --> 00:49:50.740 We can send email and we can update the 00:49:50.740 --> 00:49:52.200 schedule. By the way, if you're interested in 00:49:52.200 --> 00:49:54.280 this, we'll have a talk on the DevTrack in 00:49:54.280 --> 00:49:56.640 the afternoon today that Sacha did and it's 00:49:56.640 --> 00:49:58.140 wonderful. I'm just teasing it. 00:49:58.140 --> 00:49:59.040 [Speaker 0]: Oh, that's great. 00:50:00.060 --> 00:50:01.140 [Speaker 1]: But coming back to Hyperbole, 00:50:01.640 --> 00:50:04.000 for you, it feels like the parameters were 00:50:04.000 --> 00:50:06.560 slightly different because the feeling was, 00:50:06.560 --> 00:50:09.020 I just want a tunnel that can work between 00:50:09.020 --> 00:50:10.440 any type of files. Now, 00:50:10.440 --> 00:50:11.740 it's all well and good. 00:50:11.740 --> 00:50:14.540 Org-Rome, D-Note, and all the stuff like 00:50:14.540 --> 00:50:16.860 this, they create bidirectional links. 00:50:17.080 --> 00:50:19.540 But it's only between org-mode files. 00:50:19.840 --> 00:50:22.040 Whereas what you're achieving with Hyperbole, 00:50:22.260 --> 00:50:24.720 and you've done it much earlier than everyone 00:50:24.720 --> 00:50:27.420 else, is that you have this concept 00:50:27.660 --> 00:50:29.440 regardless of the type of file that you're 00:50:29.440 --> 00:50:32.520 using. And I find this to be beautiful. 00:50:32.900 --> 00:50:35.280 Like 5 years ago, whenever you were talking 00:50:35.280 --> 00:50:37.280 about hyperbole, I did not have a concrete 00:50:37.280 --> 00:50:38.540 idea of what was happening. 00:50:38.640 --> 00:50:40.360 But ever since I've gone through the journey 00:50:40.360 --> 00:50:42.380 of really understanding what the El Caster 00:50:42.380 --> 00:50:45.000 method were about, it feels like you were 00:50:45.720 --> 00:50:46.980 foreigners in the topic. 00:50:46.980 --> 00:50:48.540 Obviously, you've mentioned the mother of all 00:50:48.540 --> 00:50:50.240 demos by Edward Engelbart, 00:50:50.740 --> 00:50:54.100 but those ideas are not novel, 00:50:54.340 --> 00:50:56.820 but it feels like only now are they starting 00:50:56.820 --> 00:50:58.520 to be appropriated by people, 00:50:58.520 --> 00:50:59.800 especially in free software, 00:50:59.800 --> 00:51:01.200 and it's really good to see. 00:51:01.280 --> 00:51:02.440 I'm really excited to, 00:51:02.440 --> 00:51:04.600 well, have my small part to play in this. 00:51:04.600 --> 00:51:06.980 And I'm also excited to be able to chat with 00:51:06.980 --> 00:51:10.140 you and people like Bastien and other people 00:51:10.240 --> 00:51:11.400 about all those topics. 00:51:12.340 --> 00:51:13.780 [Speaker 0]: Yeah, I think, you know, 00:51:13.940 --> 00:51:16.640 it's fun that we can laugh now about when 00:51:16.640 --> 00:51:20.020 people say people are still using Emacs, 00:51:20.020 --> 00:51:22.800 you know, is because they're not used, 00:51:22.800 --> 00:51:24.160 certain people aren't using it. 00:51:24.160 --> 00:51:26.880 They have no idea of how far it's come and 00:51:26.880 --> 00:51:28.720 how powerful it is. And, 00:51:28.780 --> 00:51:31.520 you know, we're leveraging Elisp heavily, 00:51:31.560 --> 00:51:33.940 obviously, but if you look at the definition 00:51:34.300 --> 00:51:37.800 of our types, they look exactly like DIP 00:51:37.800 --> 00:51:41.180 funds in ELisp. And we've been able to do 00:51:41.180 --> 00:51:42.780 that because of Lisp macros. 00:51:43.860 --> 00:51:46.400 You know, we so we basically have our own 00:51:46.400 --> 00:51:48.300 domain specific language there, 00:51:48.420 --> 00:51:51.240 but there's almost nothing to learn because 00:51:51.340 --> 00:51:53.460 it's just like what you know from UList. 00:51:54.200 --> 00:51:57.120 So again, you know, taking the concept and 00:51:57.120 --> 00:51:59.700 leveraging it, abstracting it and leveraging 00:51:59.760 --> 00:52:02.980 it multiple times gives you a lot of power. 00:52:03.660 --> 00:52:06.060 And people, you know, somebody said the other 00:52:06.060 --> 00:52:07.500 day, and I said, finally, 00:52:07.760 --> 00:52:10.360 this quote happened. He said, 00:52:11.000 --> 00:52:15.060 there's so many things that I do with 00:52:15.060 --> 00:52:17.200 hyperbole every day that I forget that I'm 00:52:17.200 --> 00:52:21.440 using hyperbole. Because it's just so 00:52:21.440 --> 00:52:23.580 embedded in this guy's workflow. 00:52:23.680 --> 00:52:25.440 And that's really how I use it. 00:52:25.440 --> 00:52:27.380 You know, there are features in there, 00:52:27.440 --> 00:52:29.060 can't use everything, right? 00:52:29.060 --> 00:52:31.860 So there are features that I don't use, 00:52:32.040 --> 00:52:35.580 but I use a lot of things and it's all like 00:52:35.580 --> 00:52:37.580 muscle memory, just like the keyboard, 00:52:38.200 --> 00:52:39.740 the Emacs key bindings. 00:52:39.960 --> 00:52:42.180 So it's very exciting to get to that level. 00:52:42.180 --> 00:52:44.320 And now, you know, we haven't started with 00:52:44.320 --> 00:52:46.940 the chatbots or any of the AI integration, 00:52:47.300 --> 00:52:49.480 but I'm starting to think about that a little 00:52:49.480 --> 00:52:53.480 bit and how we'll interface to that world and 00:52:53.480 --> 00:52:55.320 I think it's going to be very exciting. 00:52:56.040 --> 00:52:58.340 [Speaker 1]: Yeah, likewise and I think it harks back to 00:52:58.340 --> 00:53:00.660 what we were talking about before when we 00:53:00.660 --> 00:53:03.700 mentioned Hyperbole being a package inside of 00:53:03.700 --> 00:53:05.300 an ecosystem that is Emacs. 00:53:05.860 --> 00:53:08.040 But it's not because something is well 00:53:08.040 --> 00:53:10.560 circumscribed in terms of feature set that it 00:53:10.560 --> 00:53:12.880 does not influence everything around it. 00:53:12.880 --> 00:53:15.060 Like Hyperbole can be used with something 00:53:15.060 --> 00:53:18.080 completely at the opposite end of what it was 00:53:18.080 --> 00:53:21.380 intended for, just because it provides a good 00:53:21.380 --> 00:53:23.860 set of tools that can be used wherever else 00:53:23.860 --> 00:53:26.100 you want in Emacs. And it's the same thing 00:53:26.100 --> 00:53:27.980 with Org Mode, it's the same thing with many, 00:53:27.980 --> 00:53:29.280 many different things. 00:53:29.440 --> 00:53:32.820 And it feels like integrating AIs, 00:53:33.400 --> 00:53:36.920 or generative AIs, into Emacs would provide 00:53:39.620 --> 00:53:42.340 such a tool that could apply to any kind of 00:53:42.340 --> 00:53:45.060 other major mode or any kind of other use. 00:53:45.060 --> 00:53:46.640 So I'm also excited to see this. 00:53:46.640 --> 00:53:50.280 It feels like we are sitting at the brink of 00:53:50.280 --> 00:53:52.580 a revolution. I'm not going to say the acne 00:53:52.580 --> 00:53:54.440 stuff, but it definitely feels like right 00:53:54.440 --> 00:53:57.560 now, by trying to see what we can do with AI, 00:53:57.560 --> 00:53:59.380 it's definitely going to change the way not 00:53:59.380 --> 00:54:01.560 only we program, but also the way we take 00:54:01.560 --> 00:54:03.160 notes and the way we design stuff, 00:54:03.160 --> 00:54:05.220 arcing back to what John Wigley said 00:54:05.220 --> 00:54:08.660 yesterday about his draft program on macOS. 00:54:09.800 --> 00:54:10.940 Bob, if you don't mind, 00:54:11.040 --> 00:54:13.100 I see people typing questions and I also see 00:54:13.100 --> 00:54:14.820 people joining on people buttons, 00:54:14.820 --> 00:54:16.920 so I'm going to read you the 2 questions that 00:54:16.920 --> 00:54:18.260 have been added. Is that okay? 00:54:19.200 --> 00:54:20.580 [Speaker 0]: Great, go for it. 00:54:21.240 --> 00:54:23.140 [Speaker 1]: Cool, so first question. 00:54:23.320 --> 00:54:25.240 Wow, what you're describing now, 00:54:25.240 --> 00:54:27.520 and that's when you were talking about the 00:54:27.520 --> 00:54:31.840 bi-directional links and especially the last 00:54:31.840 --> 00:54:33.080 question in its entirety, 00:54:33.540 --> 00:54:35.440 What you're describing now reminds me a lot 00:54:35.440 --> 00:54:37.440 about HyperCard that I grew up on. 00:54:37.440 --> 00:54:39.220 Do you know if Hyperbole inspired Bill 00:54:39.220 --> 00:54:41.040 Atkinson or if you were inspired by 00:54:41.040 --> 00:54:43.040 HyperCard? Or were there just a lot of 00:54:43.040 --> 00:54:44.860 thoughts about hyper-contextuality around 00:54:44.860 --> 00:54:45.520 that time? 00:54:46.780 --> 00:54:50.100 [Speaker 0]: Alright, well this is another interesting 00:54:50.320 --> 00:54:52.360 anecdote. I don't know if it's true or not, 00:54:52.360 --> 00:54:57.880 but I think HyperCard predated our stuff. 00:54:57.880 --> 00:55:00.480 It was right around the same time when 00:55:00.480 --> 00:55:02.420 Hyperbole was starting out. 00:55:02.540 --> 00:55:05.100 But when I was doing the Pi research, 00:55:06.040 --> 00:55:08.800 I worked at, when I left school, 00:55:08.800 --> 00:55:11.280 I worked at Motorola, and we did a lot of 00:55:11.280 --> 00:55:13.040 work with Apple back then. 00:55:13.180 --> 00:55:15.480 And somebody came back and he said, 00:55:15.480 --> 00:55:18.000 you know, the people over there have seen 00:55:19.120 --> 00:55:21.940 your Pi research and they really liked it a 00:55:21.940 --> 00:55:26.020 lot. And so they were leveraging that when 00:55:26.020 --> 00:55:28.440 they decided to create the division that they 00:55:28.440 --> 00:55:33.280 called Apple Pi, which was the originator of 00:55:33.280 --> 00:55:36.500 the Newton which eventually led to the 00:55:36.500 --> 00:55:40.960 iPhone. So it all kind of is interconnected 00:55:41.360 --> 00:55:44.380 just like the impact that free software has 00:55:44.380 --> 00:55:47.240 had around the world. So you never know where 00:55:47.240 --> 00:55:49.840 your stuff is gonna go or end up. 00:55:51.180 --> 00:55:53.400 [Speaker 1]: Right. All right, moving on to the next 00:55:53.400 --> 00:55:55.840 question. Is it possible to only use 1 00:55:55.840 --> 00:55:57.740 feature of hyperbole without the others, 00:55:57.740 --> 00:56:00.580 i.e. Using only the implicit explicit buttons 00:56:00.580 --> 00:56:03.580 without I control I roller or without having 00:56:03.580 --> 00:56:05.920 to rewrite part of the code in hyperbole in 00:56:05.920 --> 00:56:08.040 order to be able to load a smaller hyperbole. 00:56:08.200 --> 00:56:09.140 Does it make sense? 00:56:10.260 --> 00:56:12.640 [Speaker 0]: Yes we get asked this all the time. 00:56:12.900 --> 00:56:16.560 So you can use any little bit that you want 00:56:16.560 --> 00:56:19.620 anywhere right you can even just call code 00:56:19.940 --> 00:56:23.660 from Hyperbole. I mean you don't use 00:56:23.680 --> 00:56:25.080 everything in Emacs, right? 00:56:25.080 --> 00:56:27.740 But you still install Emacs on your machine. 00:56:28.180 --> 00:56:30.080 It's exactly the same thing. 00:56:30.860 --> 00:56:33.280 Those libraries don't take up any memory, 00:56:33.280 --> 00:56:36.380 they take up a little disk space and it's so 00:56:36.380 --> 00:56:38.520 trivial compared to the amount of disk we 00:56:38.520 --> 00:56:41.780 have today. So a lot of things are not loaded 00:56:41.920 --> 00:56:43.760 unless you activate them. 00:56:45.040 --> 00:56:48.940 And so I know that you do have to build all 00:56:48.940 --> 00:56:51.360 those things. So maybe that's what bothers 00:56:51.360 --> 00:56:56.060 people. It takes 2 minutes if you're using, 00:56:56.320 --> 00:56:58.400 it depends how fast your computer is. 00:56:58.400 --> 00:57:01.160 But you build it once on install like every 00:57:01.160 --> 00:57:04.600 other package. And it used to be that there 00:57:04.600 --> 00:57:06.620 would be a lot of warnings just because of 00:57:06.620 --> 00:57:09.020 the way we wrote the code and we didn't 00:57:09.020 --> 00:57:11.120 really have to deal with some of those 00:57:11.120 --> 00:57:13.080 warnings. But with this new release, 00:57:13.080 --> 00:57:15.120 we've gotten rid of almost all of them, 00:57:15.200 --> 00:57:19.800 including the native compiler messages. 00:57:20.020 --> 00:57:22.620 So it should be a very clean install now, 00:57:22.900 --> 00:57:26.620 and just use 1 part at a time. 00:57:26.880 --> 00:57:29.820 But the other parts are there in case you 00:57:29.820 --> 00:57:32.080 make a link to something and you use a 00:57:32.080 --> 00:57:34.600 facility just like I was showing as I went 00:57:34.600 --> 00:57:36.360 across subsystems today. 00:57:36.600 --> 00:57:38.000 It may take you a year, 00:57:38.000 --> 00:57:40.120 but then all of a sudden you find the use 00:57:40.120 --> 00:57:42.340 case for Hyrule and you say, 00:57:42.340 --> 00:57:44.040 oh, I'm glad I have it there. 00:57:44.440 --> 00:57:47.540 And yes, some of these things could be split 00:57:47.540 --> 00:57:49.540 into sub packages like you do in the org 00:57:49.540 --> 00:57:52.500 ecosystem. But given our limited resources on 00:57:52.500 --> 00:57:56.400 the team, we find having them all in 1 gives 00:57:56.400 --> 00:57:59.040 us a higher level of quality and lets us 00:57:59.040 --> 00:58:02.840 deliver a better integrated system for your 00:58:02.840 --> 00:58:03.340 use. 00:58:04.740 --> 00:58:06.300 [Speaker 1]: Yeah, exactly. And I think, 00:58:06.300 --> 00:58:09.120 you know, it's, it's not a monolith. 00:58:10.080 --> 00:58:12.540 I mean, it's usually easier, 00:58:12.540 --> 00:58:14.620 easy, more easy, more easy. 00:58:14.620 --> 00:58:16.500 Sorry, I was right on the first try. 00:58:16.560 --> 00:58:20.580 It's usually easier to maintain a monolith 00:58:20.860 --> 00:58:23.140 that contains many bits of functionality like 00:58:23.140 --> 00:58:25.280 org. You have plenty of people using org 00:58:25.280 --> 00:58:27.180 mode, not using org-agenda, 00:58:27.340 --> 00:58:29.142 for instance, or you've got plenty of people 00:58:29.142 --> 00:58:31.560 using org-mode and barely using Babel because 00:58:31.560 --> 00:58:34.740 it doesn't really translate to their use. 00:58:35.460 --> 00:58:37.720 And I feel like I very much agree with you. 00:58:37.720 --> 00:58:39.520 It's okay to install a package and only use 00:58:39.520 --> 00:58:40.420 some of the functions. 00:58:40.600 --> 00:58:43.580 I was reminded, as you were discussing this, 00:58:43.580 --> 00:58:45.140 of the consults package, 00:58:45.380 --> 00:58:46.920 which is part of the VertiCo, 00:58:48.220 --> 00:58:51.060 mbark and marginalia and all this. 00:58:51.340 --> 00:58:54.960 Consult, it replaces a lot of the Emacs 00:58:54.960 --> 00:58:56.980 built-in commands like for finding your 00:58:56.980 --> 00:58:59.900 buffers or finding text inside of your 00:58:59.900 --> 00:59:03.960 buffer. It's great. And you do not need to 00:59:04.120 --> 00:59:06.300 completely move to consult as you get 00:59:06.300 --> 00:59:09.080 started. You can start colonizing 1 step at a 00:59:09.080 --> 00:59:11.540 time the function that you usually use. 00:59:12.620 --> 00:59:15.580 And I highly recommend to people to not let 00:59:15.580 --> 00:59:18.560 the size of a project deter them from trying 00:59:18.560 --> 00:59:20.580 it out because, again, 00:59:20.980 --> 00:59:22.800 in Emacs, everything is horizontal. 00:59:23.100 --> 00:59:28.180 If somehow you want to use something that was 00:59:28.180 --> 00:59:29.640 not intended primarily for this, 00:59:29.640 --> 00:59:32.220 or if you only want to use 10% of a package, 00:59:32.300 --> 00:59:35.500 well, do it. An example that I have for me is 00:59:35.500 --> 00:59:39.840 that Lispy is the minor mode that I use for 00:59:39.840 --> 00:59:42.380 editing Elisp documents, 00:59:42.740 --> 00:59:45.380 and it's great. Elisp provides similar 00:59:45.380 --> 00:59:46.260 functions to ParaEdit, 00:59:46.260 --> 00:59:47.720 which might be a little more popular, 00:59:47.780 --> 00:59:50.320 which allows you to have modal editing when 00:59:50.320 --> 00:59:52.840 you are on specific parts of a file, 00:59:52.840 --> 00:59:55.080 like the opening parenthesis or the closing 00:59:55.080 --> 00:59:56.480 parenthesis. It's great, 00:59:56.480 --> 00:59:58.320 it provides modal editing for those modes, 00:59:58.320 --> 01:00:01.340 but I certainly do not know everything, 01:00:02.220 --> 01:00:04.240 every modal command associated to it. 01:00:04.240 --> 01:00:06.180 I just use the 1 that makes the most sense to 01:00:06.180 --> 01:00:08.200 me. So feel free to explore. 01:00:11.040 --> 01:00:13.680 [Speaker 0]: I'll just say we get this so much. 01:00:13.740 --> 01:00:16.520 It's not that large. I mean there's a fair 01:00:16.520 --> 01:00:19.680 number of files but it's just like 1 major 01:00:19.680 --> 01:00:22.340 directory and then the KOutliner directory. 01:00:24.080 --> 01:00:25.560 And when you look at these things, 01:00:25.560 --> 01:00:27.140 you install web applications, 01:00:27.440 --> 01:00:30.420 everything else, just when you download the 01:00:30.420 --> 01:00:31.820 source code, it's much, 01:00:31.820 --> 01:00:34.040 much smaller than any of that. 01:00:34.140 --> 01:00:37.360 So I don't know why people you know accept 01:00:37.360 --> 01:00:39.660 that it's larger than your typical package. 01:00:39.960 --> 01:00:41.900 Why there's really an issue there. 01:00:43.080 --> 01:00:45.080 [Speaker 1]: I think it's because people tend to assume 01:00:46.240 --> 01:00:48.480 that a paradigm like the 1 you're describing, 01:00:48.480 --> 01:00:51.560 which seems to be changing the way you use 01:00:51.560 --> 01:00:53.480 Emacs in a way because you're no longer 01:00:53.480 --> 01:00:56.000 thinking of as buffers as separate entities, 01:00:56.000 --> 01:00:57.980 you can tunnel between them. 01:00:57.980 --> 01:01:00.180 You know, it feels like a huge paradigm shift 01:01:00.180 --> 01:01:02.300 and you assume that the code behind it is 01:01:02.300 --> 01:01:04.080 going to be humongous as well, 01:01:04.080 --> 01:01:05.380 but it's usually not the case. 01:01:05.380 --> 01:01:07.640 It's just that the idea is very pure at the 01:01:07.640 --> 01:01:10.060 start, and the paradigm shift that it allows 01:01:10.320 --> 01:01:14.120 is also magnificent. But at the end of the 01:01:14.120 --> 01:01:16.200 day, the code is fairly simple, 01:01:16.320 --> 01:01:18.360 because it does 1 thing and it does it well. 01:01:19.780 --> 01:01:21.180 [Speaker 0]: 1 thing I noticed too, 01:01:21.180 --> 01:01:23.760 I mean I'm a big believer in turnkey kind of 01:01:23.760 --> 01:01:27.180 systems. In fact a long time ago when I built 01:01:27.180 --> 01:01:31.160 an IDE on Emacs called InfoDoc that was 01:01:31.160 --> 01:01:32.480 delivered pre-compiled. 01:01:33.760 --> 01:01:35.980 So it's like you download it like every other 01:01:35.980 --> 01:01:39.480 app and you run it. And so I think 01:01:39.480 --> 01:01:42.480 eliminating all the friction that occurs, 01:01:42.740 --> 01:01:46.360 and you know, I just got going recently with 01:01:46.380 --> 01:01:49.160 the wonderful packages that you just 01:01:49.160 --> 01:01:51.460 mentioned, VertiCo and Consult, 01:01:51.460 --> 01:01:55.360 but they don't have a manual that covers all 01:01:55.360 --> 01:01:57.780 that. They use sort of like a cookbook, 01:01:58.260 --> 01:02:02.220 a wiki online to answer a lot of the 01:02:02.220 --> 01:02:04.600 questions that people have and everybody has 01:02:04.600 --> 01:02:07.640 to figure out their configurations you know 01:02:07.640 --> 01:02:11.380 to make these things all work together. 01:02:12.800 --> 01:02:16.460 We'd like to do that engineering and say here 01:02:16.460 --> 01:02:18.560 it is you know it's like if you want to 01:02:18.560 --> 01:02:20.320 configure it and make it your own, 01:02:20.320 --> 01:02:23.500 you can do it. But there is a default 01:02:23.760 --> 01:02:26.880 configuration that handles all the typical 01:02:26.880 --> 01:02:29.940 use cases and you can just load it up and run 01:02:30.060 --> 01:02:31.660 because it's made to use, 01:02:32.840 --> 01:02:36.500 you don't have to hack it to make it useful 01:02:36.500 --> 01:02:37.260 for you. 01:02:37.900 --> 01:02:40.560 [Speaker 1]: Yeah, it reminds me of the discussion we had 01:02:40.560 --> 01:02:42.740 with Stéphane yesterday about sane defaults. 01:02:43.320 --> 01:02:45.520 And I think the question was, 01:02:46.500 --> 01:02:49.080 Emacs should probably ship with sane defaults 01:02:49.080 --> 01:02:51.740 for people. And Stéphane's answer was, 01:02:51.740 --> 01:02:53.860 well, my sane defaults might not be the same 01:02:53.860 --> 01:02:55.220 thing as your sane defaults. 01:02:55.960 --> 01:02:57.560 And that's why I think it's important, 01:02:57.560 --> 01:02:59.340 really, to have a core set of features, 01:02:59.340 --> 01:03:01.300 be it with hyperbole of org mode, 01:03:01.360 --> 01:03:02.580 that is well-documented, 01:03:02.880 --> 01:03:05.460 as you mentioned. But what I like about this 01:03:05.460 --> 01:03:07.260 in a way, and I think hyperbole is perhaps 01:03:07.260 --> 01:03:09.340 taking more benefits of this than Org Mode, 01:03:09.340 --> 01:03:12.280 is that the self-documentation aspect of it 01:03:12.540 --> 01:03:14.540 feels like it's easier with hyperbole because 01:03:14.540 --> 01:03:17.320 you're not bound by Org Mode buffers. 01:03:17.320 --> 01:03:19.340 You can link to just about everything. 01:03:19.940 --> 01:03:24.240 And for me, this ability to self-document is, 01:03:24.240 --> 01:03:26.140 well, first, very true to the philosophy of 01:03:26.140 --> 01:03:27.480 Emacs in the first place, 01:03:27.500 --> 01:03:31.900 but also opens up those resonance cycles 01:03:32.020 --> 01:03:34.200 where, oh, you get interested and then you 01:03:34.200 --> 01:03:35.820 start reading up and then the documentation 01:03:35.820 --> 01:03:38.320 is so good that it feeds into your practice 01:03:38.320 --> 01:03:41.040 and then it goes nuclear and you gain so much 01:03:41.040 --> 01:03:42.540 knowledge as a result of this. 01:03:42.620 --> 01:03:44.480 All right, Bob, we are about out of time. 01:03:44.480 --> 01:03:46.280 We only have about 1 minute until we go to 01:03:46.280 --> 01:03:48.220 the next talk. Do you have any passing words? 01:03:50.180 --> 01:03:53.860 [Speaker 0]: I do. I think, you know, 01:03:54.280 --> 01:03:56.880 the world's complex, it's getting more 01:03:57.440 --> 01:04:00.520 complex. I think that's why people use Emacs 01:04:00.520 --> 01:04:02.560 in the first place, because it's a big 01:04:02.560 --> 01:04:04.920 system. You wouldn't use it unless you wanted 01:04:04.920 --> 01:04:06.600 it to simplify your life. 01:04:07.580 --> 01:04:10.760 Hyperbole is built with the same idea in 01:04:10.760 --> 01:04:13.640 mind. You may not get it just like Lisp. 01:04:13.740 --> 01:04:15.720 A lot of people don't understand when they 01:04:15.720 --> 01:04:17.420 first encounter it, but when they do 01:04:17.420 --> 01:04:19.580 understand it, they're blown away. 01:04:19.960 --> 01:04:21.360 It changes their life. 01:04:22.040 --> 01:04:25.020 You know, when you really understand implicit 01:04:25.120 --> 01:04:28.100 buttons, I think that's 1 of the things in 01:04:28.100 --> 01:04:30.860 hyperbole that can change your Emacs working 01:04:30.860 --> 01:04:34.080 life. So just give that a try and I think 01:04:34.080 --> 01:04:36.660 you'll be pleasantly surprised across time. 01:04:39.220 --> 01:04:40.920 [Speaker 1]: you so much Bob. We'll be moving on to the 01:04:40.920 --> 01:04:42.980 next talk in about 20 seconds so everyone see 01:04:42.980 --> 01:04:44.940 you in a bit and Bob thank you so much again. 01:04:37.040 --> 01:04:46.100 [Speaker 0]: Thanks very much. And thank Thank you. 01:04:51.140 --> 01:04:53.040 [Speaker 1]: All right I think we are off here now. 01:04:53.040 --> 01:04:53.940 So thank you so much, Bob. 01:04:53.940 --> 01:04:55.440 I'm going to need to step out and get ready 01:04:56.609 --> 01:04:59.240 [Speaker 0]: Yeah, do your thing. You do a great job at 01:04:59.240 --> 01:05:01.760 it. But I wanted to ask you where in London 01:04:55.440 --> 01:05:04.780 [Speaker 1]: for the next talk. I'm not in London, 01:05:05.280 --> 01:05:07.940 I'm in France, and I just moved to London. 01:05:01.760 --> 01:05:10.740 [Speaker 0]: you are. Oh, okay, got it. 01:05:11.200 --> 01:05:12.680 Sorry, I thought you were. 01:05:13.000 --> 01:05:13.720 Take care. 01:05:14.340 --> 01:05:15.060 [Speaker 1]: All right, bye-bye, Bob. 01:05:15.060 --> 01:05:15.750 Thanks a lot. Bye-bye. 01:05:15.750 --> 01:05:16.250 Bye-bye.