WEBVTT 00:00:00.000 --> 00:00:12.239 All right, you're good to go. Are people here? 00:00:12.240 --> 00:00:15.639 Let me read the first question to you since I'm here. NOTE Q: I'm excited to know opinion on current state of using MCP and AI for PKM and PIEs. Since they do carry lot of burden out of us and ease lot of process. How does hyperbole stand with coming days? 00:00:15.640 --> 00:00:17.639 The first question here is, 00:00:17.640 --> 00:00:20.599 I'm excited to know opinion and current state 00:00:20.600 --> 00:00:23.799 of using MCP and AI for PKMs and PIEs. 00:00:23.800 --> 00:00:28.639 Since they do carry a lot of burden out of us, it means a lot of process. 00:00:28.640 --> 00:00:33.439 How does our pipeline stand with the coming days? 00:00:33.440 --> 00:00:35.119 Thanks for the question. 00:00:35.120 --> 00:00:40.239 AI is obviously on everybody's mind. 00:00:40.240 --> 00:00:43.719 We haven't done a lot of integration 00:00:43.720 --> 00:00:47.199 with any of the popular AI engines, 00:00:47.200 --> 00:00:50.519 but I think as you'll see through this Q&A session, 00:00:50.520 --> 00:00:54.559 Hyperbole's function is really to interlink 00:00:54.560 --> 00:00:57.959 your information everywhere throughout Emacs. 00:00:57.960 --> 00:01:02.279 And so, whether you're using a chatbot 00:01:02.280 --> 00:01:04.919 in a specific buffer, 00:01:04.920 --> 00:01:11.359 you can use hyperbole implicit links, implicit buttons 00:01:11.360 --> 00:01:17.039 to activate different actions there as well. 00:01:17.040 --> 00:01:20.399 So sometimes it takes a bit of customization, 00:01:20.400 --> 00:01:25.999 a small amount of two to seven lines of code to do that. 00:01:26.000 --> 00:01:30.839 As we get to working with more of these engines, 00:01:30.840 --> 00:01:34.119 we'll build that into the core part of Hyperbole. 00:01:34.120 --> 00:01:40.039 But right now, that's left as an extension 00:01:40.040 --> 00:01:43.359 for users who are heavily using MCP 00:01:43.360 --> 00:01:45.879 or other protocols right now. 00:01:45.880 --> 00:01:50.239 We have, for example, integrated 00:01:50.240 --> 00:01:57.559 with LSPs, you know, for coding and have that interface through xref 00:01:57.560 --> 00:02:01.199 and basically using the single key, the action key, 00:02:01.200 --> 00:02:02.719 which is made a return. 00:02:02.720 --> 00:02:07.599 You can jump around to any of your source definitions 00:02:07.600 --> 00:02:10.999 from any reference in almost any language 00:02:11.000 --> 00:02:14.875 that anybody uses today. So you can extrapolate from that 00:02:14.876 --> 00:02:17.119 how that might work with AI as well. 00:02:17.120 --> 00:02:22.999 And I think you'll see later when we talk about HyWiki 00:02:23.000 --> 00:02:26.719 that we're now enabling just just wiki words 00:02:26.720 --> 00:02:30.079 to be buttons in hyperbole. 00:02:30.080 --> 00:02:33.999 So those could be part of your chat with an AI 00:02:34.000 --> 00:02:37.519 and you just click on it and you jump right to all your references 00:02:37.520 --> 00:02:49.119 associated with that terminology. Thanks for the question. 00:02:49.120 --> 00:02:51.839 Should I just go through the second question? 00:02:51.840 --> 00:02:54.199 I thought people would be glad. NOTE Q: As a normal user who codes and takes notes, I really want to deep-dive and learn Hyperbole, but always end up winding back up to embark and org-mode being the better system. For me hyperbole looks like over-engineered (or over-configured) system which other individual packages do well. And outside emacs there is no system supporting hyperbole nor any usability. 00:02:54.200 --> 00:02:56.559 As a normal user who codes and takes notes, 00:02:56.560 --> 00:02:58.759 I really want to deep dive and learn Hyperbole, 00:02:58.760 --> 00:03:02.079 but always end up winding back up to Embark 00:03:02.080 --> 00:03:04.399 and Org Mode being the better system. 00:03:04.400 --> 00:03:06.479 For me, Hyperbole looks over engineering 00:03:06.480 --> 00:03:08.079 or over the peer system, 00:03:08.080 --> 00:03:10.119 which other individual packages do well. 00:03:10.120 --> 00:03:15.399 And outside Emacs, there's no system supporting Hyperbole or any usability. 00:03:15.400 --> 00:03:17.519 And I think you've cited answering 00:03:17.520 --> 00:03:21.159 that already, so go ahead. 00:03:21.160 --> 00:03:26.919 Right, Hyperbole is large, but there's reasons behind that. 00:03:26.920 --> 00:03:30.599 We're just trying to link all your information in Emacs. 00:03:30.600 --> 00:03:38.079 So I think you can see my screen here in Emacs. 00:03:38.080 --> 00:03:45.439 So for example, you can take any Lisp expression, 00:03:45.440 --> 00:03:49.239 even a variable like here we have in Hyperbole, 00:03:49.240 --> 00:03:50.959 hyperb:dir variable, 00:03:50.960 --> 00:03:53.519 and I just hit the action key M-RET, 00:03:53.520 --> 00:03:57.759 and in my minibuffer, I see the value of that variable, 00:03:57.760 --> 00:04:01.599 but I could just as well take any other expression 00:04:01.600 --> 00:04:03.919 and take the outer parens off 00:04:03.920 --> 00:04:05.679 and change them to angle brackets 00:04:05.680 --> 00:04:08.239 and now that's a live hyperbutton. 00:04:08.240 --> 00:04:12.079 Could be in a comment in a programming buffer in this case. 00:04:12.080 --> 00:04:15.679 It's in Koutliner buffer, 00:04:15.680 --> 00:04:19.159 which is a an auto-numbered outliner part of hyperbole. 00:04:19.160 --> 00:04:23.599 So let's just try this and say M-RET. 00:04:23.600 --> 00:04:28.719 I pressed and it ran occur and found all the occurrences of buttons. 00:04:28.720 --> 00:04:31.919 And similarly in here, I could just jump and go 00:04:31.920 --> 00:04:35.519 to any of these lines directly 00:04:35.520 --> 00:04:37.919 by hitting M-RET in that buffer as well. 00:04:37.920 --> 00:04:40.760 So all your text, all your sort of 00:04:40.761 --> 00:04:44.879 what we call implicit links become live in Hyperbole. 00:04:44.880 --> 00:04:46.519 And you didn't have to learn much. 00:04:46.520 --> 00:04:48.559 You just learn, you know, if you know a little Lisp 00:04:48.560 --> 00:04:50.279 or how to type any expression, 00:04:50.280 --> 00:04:52.879 then you just change the outer brackets. 00:04:52.880 --> 00:04:55.079 And all of a sudden, you have hyperbuttons. 00:04:55.080 --> 00:05:01.079 So Hyperbole, you can learn a little bit at a time. 00:05:01.080 --> 00:05:04.479 And although it seems daunting at first 00:05:04.480 --> 00:05:06.879 because it has so much functionality, 00:05:06.880 --> 00:05:09.679 very large and rich architecture. 00:05:09.680 --> 00:05:13.639 But what we do is teach people one piece at a time. NOTE Implicit buttons 00:05:13.640 --> 00:05:17.919 So just to continue on that a little bit, 00:05:17.920 --> 00:05:19.639 implicit buttons are buttons 00:05:19.640 --> 00:05:23.359 that exist just from the text pattern in the buffer. 00:05:23.360 --> 00:05:28.279 So you saw an example of changing Lisp into implicit buttons right there. 00:05:28.280 --> 00:05:30.959 I could do keystrokes. 00:05:30.960 --> 00:05:33.119 I can just type them out in my buffer 00:05:33.120 --> 00:05:34.879 and surround them with braces. 00:05:34.880 --> 00:05:37.439 So here's something, let's see, 00:05:37.440 --> 00:05:41.079 this is actually a command in the Koutliner 00:05:41.080 --> 00:05:45.799 to jump to the cell numbered four. So let's just do that. 00:05:45.800 --> 00:05:47.599 And it took me right there, right? 00:05:47.600 --> 00:05:51.759 So I'm just pressing M-RET to activate these buttons. 00:05:51.760 --> 00:05:56.279 Similarly, any sort of, this is a complex example, 00:05:56.280 --> 00:05:59.479 but any path name I can surround with double quotes, 00:05:59.480 --> 00:06:01.079 and it's a live hyperbutton. 00:06:01.080 --> 00:06:05.479 In this case, I want to jump to a path name called readme.md, 00:06:05.480 --> 00:06:08.359 but it's in a directory that's specified 00:06:08.360 --> 00:06:13.519 by an actual list variable. And then I want to go directly 00:06:13.520 --> 00:06:17.479 to a headline within that file called Hyperbole manual. 00:06:17.480 --> 00:06:19.759 And within that headline, I wanna go 00:06:19.760 --> 00:06:22.719 to the eighth line relative to that. 00:06:22.720 --> 00:06:24.879 So all I have to do, M-RET again, 00:06:24.880 --> 00:06:28.959 and boom, I'm in that, I'm directly linked to that. 00:06:28.960 --> 00:06:33.799 And Hyperbole has ways that you can just split your windows like this 00:06:33.800 --> 00:06:38.079 and create that reference in the source buffer right there. 00:06:38.080 --> 00:06:41.999 You just press a few keys and it'll embed that link. 00:06:42.000 --> 00:06:43.839 We'll see that a little later. NOTE Getting help 00:06:43.840 --> 00:06:47.319 Another example, so all of these buttons, 00:06:47.320 --> 00:06:49.599 if I just show you here, 00:06:49.600 --> 00:06:52.279 you can press C-h A anytime. 00:06:52.280 --> 00:06:54.319 and it will show you exactly 00:06:54.320 --> 00:06:56.559 what M-RET will do in that context. 00:06:56.560 --> 00:06:59.479 In this case, it's an implicit button, 00:06:59.480 --> 00:07:03.119 and it shows you even where the button starts and ends, 00:07:03.120 --> 00:07:06.679 what type of action it will run, 00:07:06.680 --> 00:07:08.039 it's a link to a file line, 00:07:08.040 --> 00:07:09.999 and then what arguments it takes. 00:07:10.000 --> 00:07:13.999 So Hyperbole extracts all this meta information 00:07:14.000 --> 00:07:16.679 just from the text in your buffer 00:07:16.680 --> 00:07:19.119 and displays it to you conveniently 00:07:19.120 --> 00:07:22.319 so you can know before you ever touch a hyper button 00:07:22.320 --> 00:07:24.479 if it will do something that you want it to do. 00:07:24.480 --> 00:07:28.559 Here we have a fairly advanced button 00:07:28.560 --> 00:07:31.519 that's very simple to do. You just specify a bug in Emacs 00:07:31.520 --> 00:07:34.279 that you want to reference to. 00:07:34.280 --> 00:07:40.039 Notice no delimiters, just bug pound, whatever, M-RET. 00:07:40.040 --> 00:07:45.479 And I'm in Gnus reading the conversation for that bug. 00:07:45.480 --> 00:07:48.719 And I can just, you know, move 00:07:48.720 --> 00:07:50.919 through all the conversation. 00:07:50.920 --> 00:07:56.039 I can quit out of there and go back to where I was. 00:07:56.040 --> 00:07:59.599 So very, very easy to use these implicit buttons 00:07:59.600 --> 00:08:00.879 because they're already there 00:08:00.880 --> 00:08:03.679 throughout your Emacs buffers. 00:08:03.680 --> 00:08:06.119 I described the C-h A, what that does. 00:08:06.120 --> 00:08:09.359 And there's other types of buttons 00:08:09.360 --> 00:08:11.559 that we can get into as questions go on, 00:08:11.560 --> 00:08:14.719 but you can create your own explicit buttons 00:08:14.720 --> 00:08:18.719 that have a little slightly different delimiter than you see 00:08:18.720 --> 00:08:19.799 in the implicit buttons. 00:08:19.800 --> 00:08:24.759 And this one I just put in here to show you that 00:08:24.760 --> 00:08:30.439 If you use it and you go, this is the hyperbole to do list, 00:08:30.440 --> 00:08:31.879 which is an org buffer. 00:08:31.880 --> 00:08:35.079 But I wanted to show in here that similarly, 00:08:35.080 --> 00:08:37.799 we have implicit buttons for TODOs in the work. 00:08:37.800 --> 00:08:39.679 And when we hit M-RET, 00:08:39.680 --> 00:08:42.679 it just changes the state of that to do. 00:08:42.680 --> 00:08:44.919 And I can cycle through those 00:08:44.920 --> 00:08:47.399 but even better with the prefix argument 00:08:47.400 --> 00:08:50.399 if I have multiple sequences of TODOs 00:08:50.400 --> 00:08:53.519 because there's Bob and Mats that maintain hyperbole 00:08:53.520 --> 00:08:55.999 so I can shift to Bob's TODOs 00:08:56.000 --> 00:08:57.759 with C-u M-RET 00:08:57.760 --> 00:09:00.079 and then cycle through the states for me 00:09:00.080 --> 00:09:05.039 So very very easy to use, 00:09:05.040 --> 00:09:08.319 you know something that's a little bit more difficult to do 00:09:08.320 --> 00:09:12.079 I think in org without it. NOTE Explicit buttons 00:09:12.080 --> 00:09:16.239 So that's an explicit button 00:09:16.240 --> 00:09:19.479 where I had to actually say I want to create this button, 00:09:19.480 --> 00:09:21.599 and I had to specify what type it is. 00:09:21.600 --> 00:09:23.759 If I show you the information there again, 00:09:23.760 --> 00:09:25.879 you see it has a little different type 00:09:25.880 --> 00:09:29.679 called a keyboard key, which runs just the key sequence. 00:09:29.680 --> 00:09:34.759 So you're starting to see already 00:09:34.760 --> 00:09:36.839 that explicit buttons have a type 00:09:36.840 --> 00:09:38.159 that's connected to an action 00:09:38.160 --> 00:09:41.199 that an implicit button can do as well. 00:09:41.200 --> 00:09:42.959 So all of this ties back together. NOTE Homepage 00:09:42.960 --> 00:09:47.079 And finally, there's a homepage that Hyperbole has, 00:09:47.080 --> 00:09:49.159 a personal homepage that you have. 00:09:49.160 --> 00:09:52.999 You hit C-h h, which is our mini-buffer menu, 00:09:53.000 --> 00:09:58.319 and then you hit what is it, b for button file 00:09:58.320 --> 00:10:01.439 and then p for personal file. 00:10:01.440 --> 00:10:05.239 And that just brings you to basically a set of links 00:10:05.240 --> 00:10:10.199 that you can create buttons in any format you want. 00:10:10.200 --> 00:10:12.479 There's no structure that you see here. 00:10:12.480 --> 00:10:18.759 But the nice thing is that all of these buttons that have these names, as we call them, 00:10:18.760 --> 00:10:20.279 with the delimiters here, 00:10:20.280 --> 00:10:23.799 can be referenced now as what we call global buttons 00:10:23.800 --> 00:10:28.239 wherever you are in Emacs. So I'm in a separate buffer here 00:10:28.240 --> 00:10:30.719 and say I want to jump to that to-do button 00:10:30.720 --> 00:10:33.279 that's labeled td on line 10 down there. 00:10:33.280 --> 00:10:35.519 No matter what I have on screen, 00:10:35.520 --> 00:10:39.199 I can hit C-h h g for global button, 00:10:39.200 --> 00:10:43.719 a for activate, and then it gives me a list of those. 00:10:43.720 --> 00:10:47.119 So I know it's td, I just put td in. 00:10:47.120 --> 00:10:52.159 Okay, that's a path link problem I have, 00:10:52.160 --> 00:10:56.359 but when I fix the link, it would go to it. 00:10:56.360 --> 00:10:58.239 So you can create buttons 00:10:58.240 --> 00:11:01.639 that you can access in any mode, anywhere, 00:11:01.640 --> 00:11:05.799 and just give them quick names, and it's very easy. 00:11:05.800 --> 00:11:08.559 So that kind of gives you an idea 00:11:08.560 --> 00:11:11.719 of how you can get very productive 00:11:11.720 --> 00:11:14.999 with hyperbole with just a few simple techniques. 00:11:15.000 --> 00:11:30.439 You still there Sacha? Yep, I'm still here. 00:11:30.440 --> 00:11:41.539 I have too many tabs. NOTE Q: I've been using "activities.el" and "Bufferlo" to save dedicated workspaces (open buffers, window positions) in tabs and frames for tasks/projects across Emacs sessions. Could I do something similar with Hyperbole? 00:11:41.540 --> 00:11:46.199 So the question is, I've been using activities.el 00:11:46.200 --> 00:11:48.879 and bufferlo to save dedicated workplaces, 00:11:48.880 --> 00:11:52.159 open buffers, and decisions in tabs and frames 00:11:52.160 --> 00:11:54.599 for tasks and projects across the next sessions. 00:11:54.600 --> 00:12:00.119 Can I do something similar with Hyperbole? Yes, you can. 00:12:00.120 --> 00:12:03.719 And activities is a nice package from alphapapa. 00:12:03.720 --> 00:12:07.399 We've actually been working with it lately. 00:12:07.400 --> 00:12:11.159 So we're probably in the next month or so 00:12:11.160 --> 00:12:13.479 we'll have a specific integration 00:12:13.480 --> 00:12:15.999 to activities built into Hyperbole. 00:12:16.000 --> 00:12:21.519 But right now, we don't. But of course, you can call 00:12:21.520 --> 00:12:23.279 any of its functions or key bindings 00:12:23.280 --> 00:12:26.079 using the techniques that I just showed you earlier. 00:12:26.080 --> 00:12:33.599 But what we do have built in if you go to the menu again. 00:12:33.600 --> 00:12:35.959 and you see C-h h, 00:12:35.960 --> 00:12:43.039 and then there's a w, Windows, WinConfig menu, 00:12:43.040 --> 00:12:48.399 and there's two types of window configurations that you can save here. 00:12:48.400 --> 00:12:52.599 They are, right now, they're per Emacs session. 00:12:52.600 --> 00:12:55.759 They're not stored beyond that, 00:12:55.760 --> 00:12:58.519 but we'll probably add that in as well, 00:12:58.520 --> 00:12:59.879 or we'll use activities for that. 00:12:59.880 --> 00:13:03.165 so the two types are you can either 00:13:03.166 --> 00:13:07.199 just save a window configuration in a frame... 00:13:07.200 --> 00:13:10.319 Actually, it stores the frame configuration 00:13:10.320 --> 00:13:13.359 to a ring just like the kill ring. 00:13:13.360 --> 00:13:16.119 So you have the three commands at the right. 00:13:16.120 --> 00:13:21.239 you can save with an s, you can pop one off the ring with p, 00:13:21.240 --> 00:13:25.959 or you can just yank and keep cycling through with a y 00:13:25.960 --> 00:13:31.119 and it will restore the frame configuration that you saved. 00:13:31.120 --> 00:13:35.079 Similarly, you can just do it by name, 00:13:35.080 --> 00:13:36.839 and you can say "I want to add a name" 00:13:36.840 --> 00:13:43.667 and then just give it a name again, winc, 00:13:43.668 --> 00:13:45.799 and store it and it stores it there 00:13:45.800 --> 00:13:48.559 and then you can get back to it by name as well. 00:13:48.560 --> 00:13:51.319 So fairly easy to use as well 00:13:51.320 --> 00:13:54.999 and again integrated in the same simple menu system. 00:13:55.000 --> 00:13:57.079 So thanks for that question. 00:14:05.020 --> 00:14:07.119 Should I just go to the next question? NOTE Q: How well do Hyperbole and org-mode work together? Is there any kind of integration? 00:14:07.120 --> 00:14:10.079 How well do hyperbole and org mode work together? 00:14:10.080 --> 00:14:12.759 Is there any kind of integration? 00:14:12.760 --> 00:14:18.079 Yes, in fact, that's really good. 00:14:18.080 --> 00:14:22.359 I'll just mention something. Let me go back to my homepage. 00:14:22.360 --> 00:14:26.679 I just stored that here. So we gave a talk at an earlier 00:14:26.680 --> 00:14:31.559 Emacs conference right here on org 00:14:31.560 --> 00:14:33.199 and hyperbole integration. 00:14:33.200 --> 00:14:35.919 So that's a good one to go back to. 00:14:35.920 --> 00:14:39.479 And I believe it's in this files 00:14:39.480 --> 00:14:41.599 included with hyperbole as well. 00:14:41.600 --> 00:14:45.079 So you can learn various techniques 00:14:45.080 --> 00:14:48.199 of how the action key helps you in org. 00:14:48.200 --> 00:14:51.679 It does special things in tables. 00:14:51.680 --> 00:15:00.239 And there's some nice support for, for example, working with code blocks. 00:15:00.240 --> 00:15:02.639 Let me see where that is. Okay, so right back here. 00:15:02.640 --> 00:15:09.759 So you can run them with the action key. 00:15:09.760 --> 00:15:15.039 You can refresh the output and do things like that. 00:15:15.040 --> 00:15:17.559 So again, if I just hit C-h A, 00:15:17.560 --> 00:15:20.439 it'll tell me that it's in smart org, 00:15:20.440 --> 00:15:22.928 and it'll give me all the different contexts 00:15:22.929 --> 00:15:24.359 that that operates within. 00:15:24.360 --> 00:15:26.559 So there's a lot that it does in here. 00:15:26.560 --> 00:15:28.173 And you can see it would point 00:15:28.174 --> 00:15:30.479 on the dir value of a code block definition 00:15:30.480 --> 00:15:33.559 that will actually display a summary 00:15:33.560 --> 00:15:35.199 and all sorts of functionality. 00:15:35.200 --> 00:15:37.439 So the integration is quite tight. 00:15:37.440 --> 00:15:39.679 And one of the things we do 00:15:39.680 --> 00:15:41.799 since M-RET is used in org, 00:15:41.800 --> 00:15:44.719 we have a customization setting, c then o. 00:15:44.720 --> 00:15:48.239 And you have these three settings where you can say, 00:15:48.240 --> 00:15:53.359 I want M-RET to... I want hyperbole to control that 00:15:53.360 --> 00:15:57.279 and everything that the action key does I want to happen, 00:15:57.280 --> 00:16:00.479 or I only want hyperbole to control 00:16:00.480 --> 00:16:03.239 when I'm over a hyperbole implicit/explicit button, 00:16:03.240 --> 00:16:09.159 or I want org to control that key and never use hyperbole. 00:16:09.160 --> 00:16:10.799 So you just set that once, 00:16:10.800 --> 00:16:13.919 it's persistent across sessions and you're good to go. 00:16:13.920 --> 00:16:16.399 And again, it's built right into the menus. NOTE Hywiki 00:16:16.400 --> 00:16:23.919 But even following that we've the latest addition to hyperbole is something, 00:16:23.920 --> 00:16:25.799 and this is the first time 00:16:25.800 --> 00:16:29.799 we're really showing it publicly, is the Hywiki, 00:16:29.800 --> 00:16:33.559 which is a new subsystem as we call it, 00:16:33.560 --> 00:16:39.163 and this is I think the best wiki capability in Emacs. 00:16:39.164 --> 00:16:44.719 Now what it does is it automatically highlights... 00:16:44.720 --> 00:16:48.119 Let me turn it on. I have to turn on hywiki mode. 00:16:48.120 --> 00:16:52.758 And you see those wiki words now got highlighted, 00:16:52.759 --> 00:16:54.679 so any any wiki word 00:16:54.680 --> 00:16:58.839 which is the capitalized alpha word you know, 00:16:58.840 --> 00:17:01.439 so you can have multiple capitals in there 00:17:01.440 --> 00:17:06.039 and it'll get recognized, can be used as a wiki word. 00:17:06.040 --> 00:17:09.519 So for example when I just type HyWiki here, 00:17:09.520 --> 00:17:11.750 it automatically recognizes it, 00:17:11.751 --> 00:17:14.239 and you see it turned it into a hyperlink button, 00:17:14.240 --> 00:17:18.159 which again, C-h a will tell me exactly what it does there. 00:17:18.160 --> 00:17:21.599 But I can just hit the action key, M-RET, 00:17:21.600 --> 00:17:26.879 and it'll display my hywiki.org file. 00:17:26.880 --> 00:17:30.559 All wiki pages are org files. 00:17:30.560 --> 00:17:35.679 So we're using that for the wikis, and you have 00:17:35.680 --> 00:17:40.359 You can export an entire wiki 00:17:40.360 --> 00:17:43.159 using essentially the org export capability 00:17:43.160 --> 00:17:47.539 with a little extra set of features that we've added in, 00:17:47.540 --> 00:17:50.083 but let's say, even better. You see 00:17:50.084 --> 00:17:54.119 I have this heading here, so let me just change this. 00:17:54.120 --> 00:17:59.239 You go back here, and I'll say go to heading, 00:17:59.240 --> 00:18:01.039 so you just put a pound on it, 00:18:01.040 --> 00:18:05.679 and now that whole thing is a reference to a specific org section. 00:18:05.680 --> 00:18:08.439 Notice there's no org IDs here. 00:18:08.440 --> 00:18:11.639 There's nothing other than the text that you're seeing. 00:18:11.640 --> 00:18:13.439 There's not even a delimiter. 00:18:13.440 --> 00:18:17.839 So we have automatic implicit hyper buttons 00:18:17.840 --> 00:18:20.679 being added in any buffer. 00:18:20.680 --> 00:18:23.959 Could be a comment in a programming buffer with all you 00:18:23.960 --> 00:18:26.599 You don't have to add anything. 00:18:26.600 --> 00:18:31.999 I'll show you how to create a new page in a minute. 00:18:32.000 --> 00:18:35.959 But you see I can link to any org section without any IDs. 00:18:35.960 --> 00:18:38.799 And then I can also do like org-roam does, 00:18:38.800 --> 00:18:42.039 but without the indexing or database that it requires. 00:18:42.040 --> 00:18:46.839 I can scan over all of my wiki files and headings. 00:18:46.840 --> 00:18:48.759 find a match really quickly. 00:18:48.760 --> 00:18:53.279 So we can get into some of that a little later as well. 00:18:53.280 --> 00:18:55.759 But, you know, very convenient. 00:18:55.760 --> 00:18:58.439 There's nothing that you change on org to do this. 00:18:58.440 --> 00:19:00.879 So how do I create a wiki word? 00:19:00.880 --> 00:19:07.359 Well, let's say I wanted, you know, wiki word for me. 00:19:07.360 --> 00:19:09.999 So that's already, that was a wiki word, 00:19:10.000 --> 00:19:12.959 but now this is a new one. So you see it doesn't highlight 00:19:12.960 --> 00:19:16.559 because I haven't created a wiki page yet. 00:19:16.560 --> 00:19:20.319 So all I hit is the action key, and boom. 00:19:20.320 --> 00:19:23.519 Now it created it as a new wiki word. 00:19:23.520 --> 00:19:24.879 It created the .org file. 00:19:24.880 --> 00:19:28.279 If I don't edit this file, it won't save it, 00:19:28.280 --> 00:19:32.359 and it'll not become a word in case you made an accident. 00:19:32.360 --> 00:19:34.319 But let's just say I want to say it. 00:19:34.320 --> 00:19:39.159 So, you know, heading. That's it. I'm just in org mode. 00:19:39.160 --> 00:19:42.879 Now anytime that hywiki mode is active, 00:19:42.880 --> 00:19:46.239 in any buffer essentially, 00:19:46.240 --> 00:19:50.279 I can type that out and it'll recognize it. 00:19:50.280 --> 00:19:53.039 Notice so that's not a wiki word. 00:19:53.040 --> 00:19:55.279 So it's highlighting and it's unhighlighting 00:19:55.280 --> 00:19:56.599 right as I type. 00:19:56.600 --> 00:20:03.199 So, again, you can embed these as org links in org. 00:20:03.200 --> 00:20:09.439 There's a special format like this, HyWiki word 00:20:09.440 --> 00:20:11.239 that you can make an org link 00:20:11.240 --> 00:20:13.479 if I was in org mode, just like that. 00:20:13.480 --> 00:20:16.599 So there's all sorts of compatibility, 00:20:16.600 --> 00:20:18.319 but basically it's just words, 00:20:18.320 --> 00:20:21.119 and HyWiki takes care of the rest for you. 00:20:21.120 --> 00:20:26.679 So there's a directory where all these, it's HyWiki, 00:20:26.680 --> 00:20:31.206 hywiki, ~/hywiki is the default place 00:20:31.207 --> 00:20:32.719 where all these would be found, 00:20:32.720 --> 00:20:36.359 and there's a menu now in hyperbole for hywiki, h, 00:20:36.360 --> 00:20:40.639 and you can see, it has a lot of capabilities. 00:20:40.640 --> 00:20:44.359 But I can say, b, go into the directory of all the files, 00:20:44.360 --> 00:20:47.799 just pull them up, and any of these you'll see... 00:20:47.800 --> 00:20:56.589 Let me give you one like this. 00:20:56.590 --> 00:20:58.473 Okay. So you can see the other wiki words 00:20:58.474 --> 00:20:59.959 being highlighted in here. 00:20:59.960 --> 00:21:04.039 It's very fast too. There's almost no delay for anything, 00:21:04.040 --> 00:21:07.129 and yet very flexible, 00:21:07.130 --> 00:21:09.915 and you have this ability 00:21:09.916 --> 00:21:14.679 where you could type emacs#section-1-2 00:21:14.680 --> 00:21:16.759 and if you didn't have delimiters around it, 00:21:16.760 --> 00:21:18.479 but you can put any delimiters 00:21:18.480 --> 00:21:20.839 like double quotes or parentheses, 00:21:20.840 --> 00:21:23.502 and then it'll match without you 00:21:23.503 --> 00:21:25.159 having to change the header at all 00:21:25.160 --> 00:21:28.439 with the spaces included, and all of those 00:21:28.440 --> 00:21:31.919 will get recognized. 00:21:31.920 --> 00:21:35.599 I don't know if the section exists right there. 00:21:35.600 --> 00:21:40.454 So anyway a lot of capability you can see that here 00:21:40.455 --> 00:21:41.959 where I did the hy... 00:21:41.960 --> 00:21:45.519 it actually highlights as an org link 00:21:45.520 --> 00:21:46.839 because it is an org link, 00:21:46.840 --> 00:21:50.319 and it'll operate just like any other org link 00:21:50.320 --> 00:21:54.279 even though it's a hywiki word link as well. 00:21:54.280 --> 00:21:55.759 So very powerful stuff 00:21:55.760 --> 00:22:00.959 and totally integrated with Org Mode throughout. 00:22:00.960 --> 00:22:06.439 Great. There's another question. NOTE Q: Are there any talks from this year's emacsconf that discussed things that would work well with Hyperbole? 00:22:06.440 --> 00:22:09.039 Are there any talks from this year's Emacs Conf 00:22:09.040 --> 00:22:12.599 that discuss things that would work well with Hyperbole? 00:22:12.600 --> 00:22:19.279 No. Unfortunately, I had to work yesterday, so I haven't 00:22:19.280 --> 00:22:22.639 been following the conference as much as I do. 00:22:22.640 --> 00:22:25.559 Maybe somebody else could comment on that. 00:22:25.560 --> 00:22:29.519 But I think, you know, again, 00:22:29.520 --> 00:22:31.879 it's like pick your favorite mode, 00:22:31.880 --> 00:22:34.719 pick your favorite type of information. 00:22:34.720 --> 00:22:36.839 Can hyperbole work with that? 00:22:36.840 --> 00:22:39.999 You know, the answer is almost always yes. 00:22:40.000 --> 00:22:44.959 So, you know, if I show you just a little bit, 00:22:44.960 --> 00:22:48.679 if I show you some of these implicit button types, 00:22:48.680 --> 00:22:50.799 just so you know the amount of code 00:22:50.800 --> 00:22:53.708 involved to create a type. 00:22:53.709 --> 00:22:59.679 So here's like a mail, recognizing 00:22:59.680 --> 00:23:01.639 an email address as a button. 00:23:01.640 --> 00:23:05.519 It's a little long, so that it creates a lot of things, 00:23:05.520 --> 00:23:09.199 but you know it's less than 15 lines of code for that. 00:23:09.200 --> 00:23:12.199 Path names are complicated, so that's a longer one, 00:23:12.200 --> 00:23:14.299 but let's look at... 00:23:14.300 --> 00:23:18.799 So here's one recognizing a bibliography entry. 00:23:18.800 --> 00:23:24.879 So it can be between two and 20 lines of code 00:23:24.880 --> 00:23:27.519 to create an entirely new button type. 00:23:27.520 --> 00:23:29.818 And you create it once, 00:23:29.819 --> 00:23:32.159 and you just add it to the set of types, 00:23:32.160 --> 00:23:33.922 just like at the fun, 00:23:33.923 --> 00:23:35.479 except it's done with this macro 00:23:35.480 --> 00:23:39.479 called def implicit button type, and defib. 00:23:39.480 --> 00:23:45.559 And it's part of your hyperlinking system forever then. 00:23:45.560 --> 00:23:49.799 So say you got dumped with 5,000 documents 00:23:49.800 --> 00:23:51.519 that were in this weird text format, 00:23:51.520 --> 00:23:54.119 and they all had cross-references among them, 00:23:54.120 --> 00:23:56.792 but it was, again, using a weird format. 00:23:56.760 --> 00:23:59.919 You could just write your own little type for that, 00:23:59.920 --> 00:24:04.319 and then those 5,000 documents are hyperlinked for you 00:24:04.320 --> 00:24:08.759 every time you're browsing them in Emacs automatically. 00:24:08.760 --> 00:24:11.959 So we do that all the time, create small things, 00:24:11.960 --> 00:24:15.159 but all of these are built into Hyperbole. 00:24:15.160 --> 00:24:20.199 Markdown links, texinfo links, all of that's automatic. 00:24:20.200 --> 00:24:26.199 I could even be in a shell mode, and I just say ls, 00:24:26.200 --> 00:24:30.519 and these are hyperlinks that Hyperbole understands, right? 00:24:30.520 --> 00:24:33.125 It just jumps right to the file. 00:24:33.126 --> 00:24:36.999 So grep -n, you know, looking at any line numbers, 00:24:37.000 --> 00:24:39.839 you don't have to remember 00:24:39.840 --> 00:24:41.959 all these different commands anymore. 00:24:41.960 --> 00:24:44.319 You just hit M-RET, 00:24:44.320 --> 00:24:46.599 and Hyperbole does the right thing 00:24:46.600 --> 00:24:48.359 in all these different contexts, 00:24:48.360 --> 00:24:52.639 including following cross-references in code. 00:24:52.640 --> 00:24:56.079 So I would say that's your answer. 00:24:56.080 --> 00:24:58.399 Most things that people are talking about, 00:24:58.400 --> 00:25:02.199 we've already probably integrated with Hyperbole 00:25:02.200 --> 00:25:04.639 or with a little bit of custom coding. 00:25:04.640 --> 00:25:08.402 You can do it. 00:25:08.403 --> 00:25:11.199 I think that's the end of the etherpad questions for now, 00:25:11.200 --> 00:25:12.919 but I see a number of people in the room, 00:25:12.920 --> 00:25:15.439 so you can continue the conversation. 00:25:15.440 --> 00:25:18.719 We'll be on the stream for another five minutes or so, 00:25:18.720 --> 00:25:22.319 but yes, please go ahead. Great. Yeah. 00:25:22.320 --> 00:25:27.639 I mean, people, does everybody have, can talk on the conference? 00:25:27.640 --> 00:25:31.439 I was expecting to just talk with people here. 00:25:31.440 --> 00:25:40.799 Let's see. Yeah. Can anybody say anything here? 00:25:40.800 --> 00:25:52.039 Hi, Bob. I can say something. Hey, Matt. Hi. Yeah. 00:25:52.040 --> 00:25:55.199 Maybe you want to bring up a topic. 00:25:55.200 --> 00:25:56.839 I think I... Yes. Sorry, Bob. 00:25:56.840 --> 00:26:05.839 I think I saw a question here on IRC. It was like this. NOTE Interesting, but the many different link formats makes reading and analyzing my notes much harder and less usable outside Emacs. 00:26:05.840 --> 00:26:08.599 Interesting, but the many different link formats 00:26:08.600 --> 00:26:11.279 makes reading and analyzing my notes 00:26:11.280 --> 00:26:14.959 much harder and less usable outside Emacs. 00:26:14.960 --> 00:26:18.759 I don't know if you have some comment on that. 00:26:18.760 --> 00:26:22.319 Well, I mean, the different formats that you're saying, 00:26:22.320 --> 00:26:24.839 like angle brackets or curly braces, 00:26:24.840 --> 00:26:31.319 are just so that you can utilize many different types. 00:26:31.320 --> 00:26:35.599 of buttons, but if you just want to use key sequences, 00:26:35.600 --> 00:26:37.759 there's only one markup format. 00:26:37.760 --> 00:26:41.599 With org, you've got the square brackets, 00:26:41.600 --> 00:26:44.919 which are consistent, but in order to have different types, 00:26:44.920 --> 00:26:47.279 you have to type a prefix name, 00:26:47.280 --> 00:26:53.279 like you see the HY for the HyWiki buttons in org mode. 00:26:53.280 --> 00:26:56.999 So I think the trade-off is pretty much the same, 00:26:57.000 --> 00:27:02.239 but Hyperbole always, always works 00:27:02.240 --> 00:27:04.559 to minimize the amount of markup. 00:27:04.560 --> 00:27:07.439 Markdown is pretty simple. A lot of people like that. 00:27:07.440 --> 00:27:10.759 But I think you'll find in hyperbole texts, 00:27:10.760 --> 00:27:15.479 they read just like regular language. 00:27:15.480 --> 00:27:19.599 I mean, the delimiters are fairly invisible. 00:27:19.600 --> 00:27:23.039 So I'm not sure what the issue is there. 00:27:23.040 --> 00:27:24.919 And again, you can choose your own. 00:27:24.920 --> 00:27:27.639 You can make your own types with your own delimiters. 00:27:27.640 --> 00:27:31.359 There's even a custom macro 00:27:31.360 --> 00:27:33.399 that instead of using that defib 00:27:33.400 --> 00:27:35.559 where you have to type out Lisp code, 00:27:35.560 --> 00:27:37.519 you can use regular expressions. 00:27:37.520 --> 00:27:41.239 And in one line, you can define your own type of button 00:27:41.240 --> 00:27:42.919 with its own delimiters. 00:27:42.920 --> 00:27:47.879 So, you know, depending on what works well for your eyes, 00:27:47.880 --> 00:27:51.359 you can make Hyperbole adapt quite well to that. 00:27:51.360 --> 00:27:54.319 And again, if you start using the HyWiki, 00:27:54.320 --> 00:27:57.479 there's literally zero markup on that. 00:27:57.480 --> 00:27:59.599 So you're just reading text, 00:27:59.600 --> 00:28:01.759 and when you want something hyperlinked, 00:28:01.760 --> 00:28:04.599 it's like a glossary or a dictionary entry. 00:28:04.600 --> 00:28:09.599 It's just there, and it's just highlighted in the text. 00:28:09.600 --> 00:28:17.479 So I don't see much barrier to using it with many different types of documents. 00:28:17.480 --> 00:28:23.319 Let me go back to the Emacs here. 00:28:23.320 --> 00:28:27.039 If there are any other questions. 00:28:27.040 --> 00:28:36.639 Let me see. Let me go back to that. This Koutline here. 00:28:36.640 --> 00:28:38.719 So we covered HyWiki. 00:28:38.720 --> 00:28:42.999 We're in the... I'll just show you some things 00:28:43.000 --> 00:28:44.039 that we wanted to highlight 00:28:44.040 --> 00:28:46.279 if people didn't have specific questions. 00:28:46.280 --> 00:28:48.879 But feel free to jump in anytime 00:28:48.880 --> 00:28:51.399 if you want to ask something. NOTE Koutliner 00:28:51.400 --> 00:28:57.039 So what we're looking at here is a Koutliner document. 00:28:57.040 --> 00:29:00.399 There's, you know, hyperbole is pretty well documented. 00:29:00.400 --> 00:29:04.719 There's a large manual. There's interactive 00:29:04.720 --> 00:29:09.319 demos of it, and there are videos as well. 00:29:09.320 --> 00:29:12.079 But the Koutliner is unique in Emacs, 00:29:12.080 --> 00:29:17.258 because it can do like full legal auto numbering. 00:29:17.259 --> 00:29:21.399 You just say, I want to create a new headline, 00:29:21.400 --> 00:29:23.919 and you can see. Or I could create four, 00:29:23.920 --> 00:29:26.679 I could say I want to create three more of these, 00:29:26.680 --> 00:29:29.239 and I can do it all at once with one key. 00:29:29.240 --> 00:29:33.679 I can then just tab to make sublevels here. 00:29:33.680 --> 00:29:40.319 And you see this is using a specific outline format that we have 00:29:40.320 --> 00:29:43.919 but if we do . in the view specs here, 00:29:43.920 --> 00:29:48.239 it changes to legal outlining. So it's really that simple. 00:29:48.240 --> 00:29:51.399 All of these numbers are automatically maintained. 00:29:51.400 --> 00:29:56.639 As I move stuff around, I can use Org mode alt arrow keys 00:29:56.640 --> 00:30:00.119 to move things up and down, right? 00:30:00.120 --> 00:30:00.839 And just move them around. 00:30:00.840 --> 00:30:04.719 And when I run out, you know, when it can't go any higher, 00:30:04.720 --> 00:30:06.039 it gives me an error. 00:30:06.040 --> 00:30:11.079 And then it's just fre- form typing here with auto-wrapping. 00:30:11.080 --> 00:30:13.759 The nice thing is that 00:30:13.760 --> 00:30:17.359 there's actually these hidden, 00:30:17.360 --> 00:30:22.519 let's get, hidden what are called ID stamps. 00:30:22.520 --> 00:30:24.919 So these are permanent hyperlink anchors 00:30:24.920 --> 00:30:26.719 that are assigned to each cell. 00:30:26.720 --> 00:30:29.679 So as this cell moves in the outline, 00:30:29.680 --> 00:30:32.679 you notice that this 29 didn't change. 00:30:32.680 --> 00:30:37.439 So you can move and all those other auto numbers shift 00:30:37.440 --> 00:30:40.359 to represent the actual outline structure. 00:30:40.360 --> 00:30:44.079 But this ID stamp of 29 stays the same. 00:30:44.080 --> 00:30:47.679 So you can embed that in links and say, 00:30:47.680 --> 00:30:51.719 I want to link to cell 29. 00:30:51.720 --> 00:30:55.999 If I go, let me just go to the Koutliner example. 00:30:56.000 --> 00:30:59.039 And I'll show you one of those, which is really cool. 00:30:59.040 --> 00:31:02.599 Because what you can do is say, I want to link 00:31:02.600 --> 00:31:06.999 Let me find that. It's down here somewhere. 00:31:07.000 --> 00:31:12.199 I think there's 3A. Where was it? Yeah, okay. 00:31:12.200 --> 00:31:16.479 So see right here, this is an internal link 00:31:16.480 --> 00:31:21.200 with just the pound and then the relative ID, as we call it, 3B. 00:31:21.200 --> 00:31:25.719 But of course, somebody may have moved 3B in the outline. 00:31:25.720 --> 00:31:27.919 So when Hyperbole inserts a link, 00:31:27.920 --> 00:31:32.039 it puts this equal with the ID stamp in it automatically. 00:31:32.040 --> 00:31:35.839 So if... What'll happen is when I reference this, 00:31:35.840 --> 00:31:37.639 okay, it's still the same. 00:31:37.640 --> 00:31:40.959 But if it had changed, it would update this link 00:31:40.960 --> 00:31:44.759 and would change the 3B to say it was 3D now 00:31:44.760 --> 00:31:50.519 based on this permalink, the 08 that's hidden away in here. 00:31:50.520 --> 00:31:52.439 So you don't have to do anything. 00:31:52.440 --> 00:31:56.599 It's just that you have these automatic hyperlink anchors 00:31:56.600 --> 00:31:58.959 that are embedded in your outlines again. 00:31:58.960 --> 00:32:04.519 sort of like org IDs, but you have to manually place those in org. 00:32:04.520 --> 00:32:09.039 And it just makes linking much simpler. 00:32:09.040 --> 00:32:10.359 And you can reference this. 00:32:10.360 --> 00:32:13.799 You can reference the file and the cell number. 00:32:13.800 --> 00:32:15.487 And again, you don't put this... 00:32:15.488 --> 00:32:17.679 Hyperbole will put this in. 00:32:17.680 --> 00:32:20.719 And then you can even have these view specs, which say, 00:32:20.720 --> 00:32:25.919 I want to clip the display to one line, 00:32:25.920 --> 00:32:27.399 and I want to delete ellipses. 00:32:27.400 --> 00:32:31.079 So here we see a view over the same outline 00:32:31.080 --> 00:32:37.319 that's all in one mode. So it's just incredibly capable. 00:32:37.320 --> 00:32:40.079 So here we've said, you know, 00:32:40.080 --> 00:32:42.879 there's no blank lines between cells. 00:32:42.880 --> 00:32:46.719 Now I change the view spec and put a blank line in there, 00:32:46.720 --> 00:32:51.879 and it's all changed. So lots of consistency that you get. 00:32:51.880 --> 00:32:55.599 When you change a node in the outline, 00:32:55.600 --> 00:32:58.799 the whole tree shifts, and all of this is maintained, 00:32:58.800 --> 00:33:02.839 all of the structure is maintained automatically by Hyperbole. NOTE Org tables 00:33:02.840 --> 00:33:09.479 You can embed Org tables in here as well. 00:33:09.480 --> 00:33:17.079 So if I just press M-RET action key again on this... Org disabled. 00:33:17.080 --> 00:33:21.799 Okay. So now I enabled Org mode here, 00:33:21.800 --> 00:33:25.340 and where you see, like, tab here shifts a cell. 00:33:25.341 --> 00:33:27.606 When I'm inside the table, 00:33:27.607 --> 00:33:31.719 tab just operates like normal Org tables. 00:33:31.720 --> 00:33:33.519 So I can do all of the things 00:33:33.520 --> 00:33:40.839 that I can do in org table mode as well within this koutline. 00:33:40.840 --> 00:33:43.399 So it seems pretty useful to me, 00:33:43.400 --> 00:33:48.519 but of course, I helped write it. 00:33:48.520 --> 00:33:51.279 But I think you see some of the benefits 00:33:51.280 --> 00:33:53.959 that can accrue by using that format. 00:33:53.960 --> 00:33:57.839 But this is just one piece of Hyperbole, 00:33:57.840 --> 00:34:02.179 a major mode that you can choose to use or ignore entirely, 00:34:02.180 --> 00:34:04.039 you know, dependent on your needs. 00:34:04.040 --> 00:34:06.399 If you're writing requirements, documents, 00:34:06.400 --> 00:34:08.879 or anything that needs structure, 00:34:08.880 --> 00:34:12.079 I think that's where this is really ideal. 00:34:12.080 --> 00:34:14.279 You can write a legal document, 00:34:14.280 --> 00:34:16.159 and you've got auto-numbering, 00:34:16.160 --> 00:34:18.679 which is always, if you've ever used Word 00:34:18.680 --> 00:34:21.039 or any of those word processors, 00:34:21.040 --> 00:34:24.589 it's really a pain to maintain those hierarchies 00:34:24.590 --> 00:34:26.479 in those compared to here. 00:34:26.480 --> 00:34:32.239 Okay, so that was just showing you the Koutliner. 00:34:32.240 --> 00:34:35.279 Does anybody have any questions 00:34:35.280 --> 00:34:43.279 or I'll just continue down a bit? NOTE Selecting between delimiters 00:34:43.280 --> 00:34:47.999 Okay, so some other capabilities 00:34:48.000 --> 00:34:49.959 that we've fairly recently put in. 00:34:49.960 --> 00:34:52.799 Well, this has been here for a long time. 00:34:52.800 --> 00:34:58.719 You can, I think the binding I use is C-c m. 00:34:58.720 --> 00:35:00.159 I forget what it is. 00:35:00.160 --> 00:35:07.159 No, sorry, that's C-c C-m. 00:35:07.160 --> 00:35:14.319 Now let's C-c \. 00:35:14.320 --> 00:35:21.719 Okay, so what I wanted to show you here is that the action key 00:35:21.720 --> 00:35:26.679 on any double quote, single quote, usually, 00:35:26.680 --> 00:35:30.079 or paired delimiters will select that whole thing. 00:35:30.080 --> 00:35:33.239 There is this capability, and I probably just select bigger 00:35:33.240 --> 00:35:35.119 and bigger chunks of text, 00:35:35.120 --> 00:35:39.319 but this is really nice that you can just go anywhere 00:35:39.320 --> 00:35:42.479 in pretty much any mode and hit M-RET. 00:35:42.480 --> 00:35:46.559 And so in Lisp, you can be on the trailing paren 00:35:46.560 --> 00:35:50.599 and it will select the whole expression, or the opening 00:35:50.600 --> 00:35:52.879 and it'll select just that piece, 00:35:52.880 --> 00:35:56.159 but even better when you're copying, pasting, 00:35:56.160 --> 00:36:02.039 I can... Now if there's no region selected, C-w, M-w, 00:36:02.040 --> 00:36:05.679 will act on the structured entity 00:36:05.680 --> 00:36:09.359 that you're at the beginning or ending delimiter for 00:36:09.360 --> 00:36:12.199 without you having to highlight the region 00:36:12.200 --> 00:36:14.719 So if I hit M-RET, it would highlight it, 00:36:14.720 --> 00:36:19.085 but let's just do M-w to cut that 00:36:19.086 --> 00:36:20.917 and then I'll yank it here. 00:36:20.918 --> 00:36:23.599 And you see it grabbed the whole expression 00:36:23.600 --> 00:36:25.599 and just let you yank it. 00:36:25.600 --> 00:36:29.679 So it's a nice add on to the basic Emacs commands 00:36:29.680 --> 00:36:33.159 that just let you operate a lot more efficiently. 00:36:33.160 --> 00:36:35.359 You can do something similar in C mode. 00:36:35.360 --> 00:36:39.439 You know, on the braces, you can select the whole function 00:36:39.440 --> 00:36:40.439 with one key press, 00:36:40.440 --> 00:36:43.079 M-RET, and then copy it somewhere. NOTE Ace-window 00:36:43.080 --> 00:36:50.559 And Hyperbole integrates with Ace Window if you use that. 00:36:50.560 --> 00:36:56.799 So let me split this a few ways. And let's do it over here. 00:36:56.800 --> 00:37:06.799 We'll just go to scratch. Okay. And then I can go, 00:37:06.800 --> 00:37:08.119 it's sort of interesting, 00:37:08.120 --> 00:37:11.120 it works with Dired as well. 00:37:11.120 --> 00:37:16.519 So I can go here and say, I want to... So if I do M-o, 00:37:16.520 --> 00:37:22.159 Ace-window will show me the labels to use, a, d, or s, to do something. 00:37:22.160 --> 00:37:24.559 Like I can move to any of those windows. 00:37:24.560 --> 00:37:27.959 But what Hyperbole lets you do 00:37:27.960 --> 00:37:30.759 is say I want to throw with t, 00:37:30.760 --> 00:37:36.399 like this glass.org file over to the bottom window. 00:37:36.400 --> 00:37:42.479 So I go M-o to invoke it. I say I want a t to throw it. 00:37:42.480 --> 00:37:46.399 Then where do I want to throw it to? s, the window, and 00:37:46.400 --> 00:37:49.879 then you see it's now displaying glass.org. 00:37:49.880 --> 00:37:55.763 So I can do that with files. I can do it with regions of text. 00:37:55.764 --> 00:37:58.719 You can replace things in a buffer, 00:37:58.720 --> 00:38:01.199 or throw the whole thing to the window. NOTE Dired 00:38:01.200 --> 00:38:02.759 So a couple extra commands 00:38:02.760 --> 00:38:05.034 that it extends ace window with... 00:38:05.035 --> 00:38:12.159 you can even, I think, well, we also have this command, 00:38:12.160 --> 00:38:16.799 I think it's C-c @, yeah. 00:38:16.800 --> 00:38:21.719 So what it did there was it just selected the files 00:38:21.720 --> 00:38:22.799 that I had marked in Dired, 00:38:22.800 --> 00:38:26.839 it selected and created a window grid out of all of them. 00:38:26.840 --> 00:38:29.559 You know, so I hit like three keystrokes. 00:38:29.560 --> 00:38:35.159 That's kind of convenient if you want to see 00:38:35.160 --> 00:38:38.159 a lot of information all at once. 00:38:38.160 --> 00:38:42.239 And so we covered all that. I won't go into it too much, NOTE Controlling windows or frames 00:38:42.240 --> 00:38:46.639 but there's a whole 'nother window and frame control system 00:38:46.640 --> 00:38:50.799 under the screen menu here if you type C-h h s. 00:38:50.800 --> 00:38:54.479 then you can select either controlling windows or frames. 00:38:54.480 --> 00:38:56.119 Let's do windows. 00:38:56.120 --> 00:39:00.479 And it has this menu where it's just sort of showing you. 00:39:00.480 --> 00:39:07.839 I can like split my windows vertically or horizontally. 00:39:07.840 --> 00:39:13.759 I can widen by a pixel or I can say, or character. 00:39:13.760 --> 00:39:18.319 I can say, use my prefix argument to change that to 10. 00:39:18.320 --> 00:39:22.479 And then when I shrink it, shrinks it up by 10 00:39:22.480 --> 00:39:27.319 or it narrows it width by 10 or it widens it by 10. 00:39:27.320 --> 00:39:33.679 So it has this concept of prefix arguments that persist 00:39:33.680 --> 00:39:35.719 and you just type in the number 00:39:35.720 --> 00:39:38.359 and then you can issue any number of the commands. 00:39:38.360 --> 00:39:41.679 So you could move windows or frames 00:39:41.680 --> 00:39:44.919 or create them, delete them, cycle through them, 00:39:44.920 --> 00:39:48.279 all sorts of things, including relative to movement, 00:39:48.280 --> 00:39:50.719 relative to the edges of your screens. 00:39:50.720 --> 00:39:52.559 So if you have multiple screens 00:39:52.560 --> 00:39:54.479 and many frames that you use, 00:39:54.480 --> 00:39:59.639 it just makes management very convenient. 00:39:59.640 --> 00:40:02.439 And then you just q to quit out of there 00:40:02.440 --> 00:40:04.959 and you're back wherever you were. NOTE Documentation 00:40:04.960 --> 00:40:10.439 So, finally, we have a lot of documentation. 00:40:10.440 --> 00:40:12.599 This is just a link to the videos, 00:40:12.600 --> 00:40:16.239 which is in the readme and in the manuals. 00:40:16.240 --> 00:40:21.399 There's two demos or tutorials. One to get you started. 00:40:21.400 --> 00:40:24.719 Notice I'm using these implicit buttons, so keystrokes, 00:40:24.720 --> 00:40:26.879 and I can just M-RET on that. 00:40:26.880 --> 00:40:30.519 And that takes me to, here's all the videos. 00:40:30.520 --> 00:40:34.239 And you can get started with that 00:40:34.240 --> 00:40:38.279 or just interact with this demo that we have. 00:40:38.280 --> 00:40:41.519 And there's one for the Koutliner as well. NOTE Videos 00:40:41.520 --> 00:40:45.399 One of the things that... If you're into videos 00:40:45.400 --> 00:40:46.919 and you need to link to them, 00:40:46.920 --> 00:40:50.519 notice what you're seeing here. This is a hyperbole feature 00:40:50.520 --> 00:40:54.919 which is very difficult to achieve any other way that I've seen 00:40:54.920 --> 00:40:59.279 where you want a specific start and stop time 00:40:59.280 --> 00:41:01.039 in a video that you want to play. 00:41:01.040 --> 00:41:05.639 Hyperbole has a built-in link type for that. 00:41:05.640 --> 00:41:08.760 as you see here. So this is the name of the link 00:41:08.760 --> 00:41:10.919 that you can reference it by, 00:41:10.920 --> 00:41:14.279 and then this is the actual link expression. 00:41:14.280 --> 00:41:17.479 So I could just go and play a video right here, 00:41:17.480 --> 00:41:22.079 and this is from one long intro to hyperbole that we did. 00:41:22.080 --> 00:41:25.759 So it's just linking to the specific sections. 00:41:25.760 --> 00:41:27.439 But that's something, again, 00:41:27.440 --> 00:41:29.519 this could be embedded anywhere. 00:41:29.520 --> 00:41:33.759 in any file and it would start to play. 00:41:33.760 --> 00:41:36.559 Uh, I guess I could try YouTube. 00:41:36.560 --> 00:41:43.239 Well, I don't want to. Yeah. Okay. It's on my other screen. 00:41:43.240 --> 00:41:48.199 So, but it did, it did, uh, link to it. 00:41:48.200 --> 00:41:53.319 So, um, yeah, just, you know, tremendous capability 00:41:53.320 --> 00:41:56.919 to interlink your information that way. 00:41:56.920 --> 00:42:00.359 And, uh, You know, again, you learn it bit by bit. 00:42:00.360 --> 00:42:04.279 You can study one particular section right here. 00:42:04.280 --> 00:42:09.039 Just jump directly to that if you want to know about it. NOTE Manual 00:42:09.040 --> 00:42:13.319 The manual is interlinked, has an extensive glossary, 00:42:13.320 --> 00:42:16.119 cross-references of sections. 00:42:16.120 --> 00:42:23.119 And if you go in there, this is the hyperlinked manual. 00:42:23.120 --> 00:42:25.119 So this is the structure of it 00:42:25.120 --> 00:42:27.799 with all the subsystems documented. 00:42:27.800 --> 00:42:31.519 But one of the sections we've added 00:42:31.520 --> 00:42:33.559 is developing with hyperbole. 00:42:33.560 --> 00:42:37.319 So if you are or you want to create your own button types, 00:42:37.320 --> 00:42:38.919 this explains how to do it. 00:42:38.920 --> 00:42:42.959 Creating types, you can create your own action 00:42:42.960 --> 00:42:44.999 and implicit button types. 00:42:45.000 --> 00:42:48.359 And if you look in here, there are three ways 00:42:48.360 --> 00:42:55.039 to create implicit button types from simpler to harder. 00:42:55.040 --> 00:42:59.079 So like, here's an example 00:42:59.080 --> 00:43:03.679 where pressing C-x after this expression 00:43:03.680 --> 00:43:07.199 defines a new action button link type called pilot. 00:43:07.200 --> 00:43:13.359 So let's say, I don't know if I have this set up, but we can try it. 00:43:13.360 --> 00:43:21.999 Yeah, I don't have the variable setup, 00:43:22.000 --> 00:43:25.759 but basically, you know, it can get you. 00:43:25.760 --> 00:43:31.359 This is a one line definition of a new action type. 00:43:31.360 --> 00:43:36.399 that can get you to a Python file 00:43:36.400 --> 00:43:39.639 based on whatever your Python path is set to 00:43:39.640 --> 00:43:42.919 with this simple syntax right here. 00:43:42.920 --> 00:43:45.199 And here we're going to the file. 00:43:45.200 --> 00:43:48.399 So we have no idea where this is on the file system. 00:43:48.400 --> 00:43:54.959 And the same way like if you use man path, Python path, 00:43:54.960 --> 00:44:08.599 you can embed buttons. Let's just go to scratch buffer. 00:44:08.600 --> 00:44:17.919 My first read-only. It doesn't want me to go. 00:44:17.920 --> 00:44:24.999 It must be kind of strange. 00:44:25.000 --> 00:44:32.559 Something with this key window that I have over here. 00:44:32.560 --> 00:44:35.679 Let me just move off there. Look at that. 00:44:35.680 --> 00:44:38.319 Maybe it's just activating that. 00:44:38.320 --> 00:44:46.319 Yeah, it keeps jumping back there. 00:44:46.320 --> 00:44:49.542 I don't know. I have to get this straight. 00:44:49.543 --> 00:44:53.958 Yeah, it's not letting me type the buttons. 00:44:53.959 --> 00:44:57.875 Let me see if I can turn off the key casting. 00:44:57.876 --> 00:45:23.999 Yeah, maybe that'll help. I don't know, that put me in some strange... 00:45:24.000 --> 00:45:30.719 Just going to exit out of here if I can. 00:45:30.720 --> 00:45:32.960 Does anybody have any questions they want to cover? 00:45:33.000 --> 00:45:39.079 I was just gonna show you yeah a little more on type definitions 00:45:39.080 --> 00:45:53.119 if there was any interest OK, there's nobody piping up. 00:45:53.120 --> 00:45:56.999 Let me see if there's any other questions. 00:45:57.000 --> 00:46:04.439 Hi, Bob. I haven't seen any more questions. 00:46:04.440 --> 00:46:10.839 Yeah, so maybe it's you, me, and someone called Max is here in the channel. 00:46:10.840 --> 00:46:19.479 OK. Okay, so if Max doesn't have any questions 00:46:19.480 --> 00:46:24.839 and there aren't other people, we can just end it there. 00:46:24.840 --> 00:46:34.479 I don't want to have an audience of zero or talk to that. 00:46:34.480 --> 00:46:37.919 So, but I think that was a good overview, Max, right? 00:46:37.920 --> 00:46:45.479 Yes, definitely covered a lot in a short time. 00:46:45.480 --> 00:46:48.639 And hopefully, you know, just try it out. 00:46:48.640 --> 00:46:52.399 At the top here, it shows you how to install it. 00:46:52.400 --> 00:46:56.559 It's pretty simple, basic package and installation. 00:46:56.560 --> 00:47:02.719 And we're happy to help anybody get started if they need to. 00:47:02.720 --> 00:47:05.199 So thanks, everyone. 00:47:05.200 --> 00:47:09.279 And we'll answer any further questions on the Etherpad after this.