Back to the talks Previous by track: Emacs core development: how it works Next by track: Using Koutline for stream of thought journaling Track: General

Top 10 ways Hyperbole amps up Emacs

Robert Weiner - Pronunciation: like fine 'wine' and 'er', https://gnu.org/s/hyperbole https://github.com/rswgnu/hyperbole, rsw@gnu.org

Work in progress: main talk does not have captions (Volunteered: sachac)

This talk does not have captions yet. Would you like to help caption this talk? You may be able to start with these autogenerated captions.

Format: 66-min talk; Q&A: BigBlueButton conference room
Status: TO_REVIEW_QA

Talk

Duration: 1:05:16 minutes

Q&A

Description

We will count down the top ten ways that GNU Hyperbole can improve your Emacs productivity and experience through:

  • its magical ability to turn ordinary text into hypertext

  • its legal-style auto-numbered outlining

  • its fast, record-based lookups

  • and its rapid, programmable ability to control all of your frames and windows.

Hyperbole has no required external package dependencies and is compatible with and tested against every major Emacs version from 27 to the latest master branch and works on every major computer operating system and window system in use today, so you can run it regardless of your environment.

Discussion

Questions and answers

  • Q: Do buttons keep their metadata within the same file? E.g. would I see it if I change to fundamental-mode?
    • A: Summarizing: if it's an explicit button the metadata is in a different file in the same directory, ".hypb". If it's an implicit button, no, no metadata in the buffer; such buttons have no metadata, Hyperbole creates all of the button properties from the existing text in the buffer.
  • Q: Is it possible to link to a file by its ID (denote, Org ID, or some similar unique string inside)?
    • A:
  • Q: Re: the frames example: any thoughts or consideration for a transient interface? Or, is this something one could already toggle?
    • A: Hyperbole predates many of the newer features and packages and Emacs but they integrate as they find them useful for Hyperbole. They think the current minibuffer menu is pretty good and don't have plans to have a transient menu
  • Q: Re: multi-file search functionality. Why not implementing it within the existing framework of M-x grep or similar built-in commands? Yet another search interface sounds a bit redundant.
    • A:
    • The point is: why not upstream search interface?
  • Q:
    • A:
  • Q: Hyperbole's been around for a number of years now.  What inspired you to write it back around the time of its birth?
    • A: Born before the Web.  The Web was born in the middle of a Hyperbole version's development.  Seemed like an explosion of unstructured information was imminent, e.g. needing to deal with many emails, non-database-structured info.  Needed a general system that could work with other general systems like emails, document production.  Was researching at a university on "Personalized Information Environments" (PIEs).  PIEs was an architecture with managers (like Hyperbole) and point tools that would leverage the managers (e.g. an email reader as a point tool to leverage the hypertext manager).  Wrote a Gmail-like system years before Gmail (also similar to Rmail).  Allowed buttons embedded in Rmail drawn from the subject of the email message.  Rule-based processing was included, etc.
  • Are you familiar with embark package? I think there is some overlapping functionality with Hyperbole. 
    • A: Yes, recently started using it.  Have talked to oantolin (Omar Antolin Camarena), the author.  Thinks that Embark and Hyperbole are compatible, much like Hyperbole and Org are.  All of these tools can be used together well.
  • Q: Wow. What you are describing now reminds me a lot about HyperCard that I grew up on. Do you know if Hyperbole inspired Bill Atkinson or if you were inspired by HyperCard? Or were there just a lot of thought about hypercontextuality around that time?
    • A: Bob's research on PIEs was seen by Apple and helped to inspire their work on the Newton, which later also inspired the iPhone, et al.
  • Q: Is it possible to only use one feature of hyperbole without the others (i.e. using only the implicit/explicit buttons without hycontrol, hyrolo...)? (without having to rewrite part of the code in hyperbole) in order to be able to load a smaller hyperbole (hyperbole is now quite large).
  • Q: Is there a link to the video for this talk?  I woke up too late for it! It was done live, so the recording will be added after the conference organizers have time.

  • thanks bob i heard about hyperbole long time ago now it is time to revisit with this beautiful presentation

  • nice presentation, bob!
  • no metadata no problemo
  • Q: for anyone who uses hyperbole is there a way to delimit a button like you create text that is shaped like a button but you don't want it to be a button?
  • i'm intersted in hyperbole it's on my todo list of looking into for emacs stuff
  • Great talk thank you bob!
  • thanks for showing hyperbole, always been curious about it. makes me think there's an overlap with ffap, hyperbole and even treesitter in a way
  • i'm going to look into hyperbole for sure now. it's been on my to do list
  • Bob has a long history of doing impressive work :)
  • I didn't know about rsw other packages, look at that http://ftp.ntua.gr/mirror/python/workshops/1996-06/papers/h.pasanen/oobr4.html

Transcript (unedited)

I keep forgetting that we have an introduction now. The introduction is flying. So hi again, everyone. I promised you we would be back in about 30 seconds. I lied, it was actually 1 minute, but we are here with Bob. Hi, Bob, how are you doing? and so are we. We're glad to have you again this year. So what we're going to do, we're not going to waste any time right now with chit-chats. What we're going to do, we're going to move straight into your presentation, Bob, so that you have as much time as you can. I'm going to recede into the background. I am going to full screen your presentation on a stream. And Bob, the floor is all yours. Glad to be here. I hope everybody has an idea of what Hyperbole is, but it's a broad information management system inside Emacs that works in all major modes. It's a global minor mode that you can turn on and off very rapidly so that you can just get in and out of hyperbole. And it works mostly from a mini buffer menu that if we just hit ctrl H H we see at the bottom of the screen here and as you see in some of this text right here, Dee will show you a demo with all these video links of Hyperbole now. But let's just get into the top 10 reasons to use Hyperbole. Number 10 is a key series curly braces. So you just put curly braces around any set of key sequences that you want and hyperbole magically turns that into what we call an implicit button a hyper button and any kind of text that you have so if we go down here and we just click click here we see it that was a complex button that said let's start a shell, let's set an environment variable as you see the command right up there, and then let's do a grep over the hyperbole code and find all instances of a particular label. So if we hit made a return, that's called the action key. That's what you use throughout hyperbole when you just want to activate any kind of button. So you see it jumped to the grep output and this is in a shell buffer it's not in a compilation buffer so anywhere that you have this sort of thing it's also an implicit button and any sort of grep output or compiler output you can just jump to with the same key, made a return. So that's key series, the first part. And then just to note that you can also just do a, well I'll just do it here and show you that you can do a recursive grep with this hyperbole command, HYPBR grep. And if you're in an Emacs list buffer, it will only grep across the Emacs list. So a very handy way to just go through your code very rapidly and then jump to various points in it. So we have a lot to cover today, so I'm going to go through this rapidly. This isn't a tutorial, it's just to get you interested in some of the features, and then there's a ton of reference material and videos now available for Hyperlink. So let's go to number 9. Path names become implicit buttons. You don't even have to quote them. You can add environment variables or elist variables with the syntax right here. So here we have a shell script that's somewhere on our path. And notice path is an environment variable with many different paths within it, right? But Hyperbole knows that and it searches the path, gets the first match, finds it, and finds the actual shell script. So you can just embed that anywhere. Here we have a list variable, hyperbdur, which is the home directory for hyperbole, and then a markdown file, and a link to a direct section in the file, and the 5 colon 5 means go to line 5 within that section and column 5. So let's just try it. Boom, we're right there, and we're on another link that we could activate as well. So notice the next line is the same link but this is how you normally have to do it in a markdown file. You have to change the section header to have dashes but with hyperbole you don't have to. You can just put it exactly like you see it in your file. Here the pound syntax for sections is really a generic syntax in the hyperbole. And so it works in all different kinds of files, your programming files. Here's a shell script and we said let's just go to the first comment that has alias in it. Notice we didn't have to say the whole line, just the first part of it. And it matched to it. Here we have a link to our hyperbole structured outliner called the K Outliner. And you can see it auto-numbers all these cells. But in addition to just displaying, you can also add a pipe symbol near the end and use this view syntax to clip to 2 lines and show blank lines. So let's see if each node gets clipped to 2 lines. So you see they're all just 2 now with the ellipses and then we can expand them. So a lot of power there just with path names. Let's continue to number 8. up in case your internet misbehaves and we've set this up before we started, but I think the vibration is a little loud whenever it does. Can you maybe move it a little bit? I think so. It will have to vibrate again. Okay. It shouldn't have been vibrating. but definitely we had vibration. Anyway, carry on. Sorry for the interruption. special prefixes. There are 3 prefixes you can attach to path names. The first, if you want to load, instead of just finding a file, an ELIST file, you can actually load it. And so I can just hit made a return on this, and you see in the mini buffer, it loaded it as compiled e-list. I could put a .el on here, a .elc, .gz, all of that'll work, and just put a dash in front to load it. If you want to run a shell command, just put an exclamation mark in front of something and again you can have the environment variable. So here we're saying run the program date and you see, let's see, let's do it again. There we go. It ran date and you see the output right there. And what if you want to run a graphical program on your system? Well here, we want to open a PDF file and I'm just using XDG Open on Linux, you could use Open on Mac and you just put an ampersand in front and there's the Hyperbole manual instantly displayed. So lots of power there and all of that actually .pdf's and many other file types are automatically linked to various programs by Hyperbole. So you could just use the path name itself and it would probably behave the same way. Number 7, bookmarks on steroids. So Hyperbole gives you a personal button file, which is on the menu you see here under button files, and then personal. So here we'll just display it. And you can put whatever you want in here, these implicit buttons of any type. You can name them the way here and you can activate either the name with MetaReturn or the button itself. So, of course, if we did MetaReturn here, we'd just display that in a web browser. I'll just do a few of these. So here's a section of line. Let's just jump there. But these can be all sorts of different actions that are going on. And you just, whatever cross references you want, you put in here. And the neat thing is that this then becomes a list of what we call global buttons. So when I go into the menu and I go control HHGA to activate a global button, you can see that all the names from this file appear here. So only the name buttons appear, and I could like go to the hyperbole to-do list and things like that. So very, very quick access to all your information whenever you need it. And that could be an org file as well if you prefer that. So we just took care of that. Number 6, instant test case running and debugging. This is a fairly new feature. What we're seeing here is a pre-release of version 9, which should be out within the next week. But the instructions at the beginning of the presentation tell you how to get the development version of HyperBlade, which is right now 8.01 pre, but that's virtually the same as what 9 will be. So you can grab that as of today. So let's just jump to a test file. What you see here is called an explicit button. You can actually make buttons where similar to org, where you just see a bit of the button and all of the metadata is hidden. I can say control A J and I see all about that button, exactly what it's going to do before I activate it and even who created it or last modified it. Then just queue out of here and you're back where you were. So now, what this did is link us to an ERT test. If you write tests in Emacs, you probably use ERT tests. So if I hit made a return on here it'll just run the test tell me it passed great okay but maybe I had a problem so let me use control you made a return and that will e-debug the test instantly. So now I'll step through it and it says, well, let's, this single line actually creates that explicit button. You see we have an empty buffer here that we're in. Now I step through that and now there's the explicit button that got put in there. Now the next line I step through it and this is going to check if we have the right action type and it returns true so that's good and now we should be it should be associated with the temp buffer returns true good And that's why what you saw before is this passed. The whole thing passed. So lots of power there. Simple to use. You're just using your made a return and prefix arguments. It's something everybody who develops should have. So number, let's go on. I think we're making pretty good time here, but I turned off my timer. Let's go to number 5. This is a very new feature, which is very cool too. You used to have to use the mouse probably and you could drag across windows to go from a source to a referent buffer and that would create a hyperlink for you. But now we've installed it and made it even easier on, we've installed it on a, on the hyperbole menus. So let's just go back to our presentation here and say we want to link to this line that we're on there. And I'll just create the button in our scratch buffer here so it doesn't really mess anything up. So I just put my point in where I want the button to appear and then I put point where I want it to link to in the other the other buffer and then I just say control HH to get my menu, I for implicit button, and then L for link. Boom, it inserts it, right at point. What did it do? It knew that this was in the hyperbole directory and I have a variable for that, so that if you sent this link to your friend who uses Hyperbole, it would still work right because they have a different hyperbole there. And then I want to go directly to line 116. So boom, it just took me there. So that's it. And Hyperbole is doing all this for you. You just say I want a link to this thing and it figures out what's at point and it determines the right type of implicit link to put there. And that's the whole point is that you're just working like when you're programming or you're writing an article and you just hit made a return or or pull up a menu and hit a key binding and you're off to the races. So that was implicit linking We can also create those explicit link buttons, and as well as the global link, where we would just give it a name, and it would automatically put it in our global button file without us even having that on screen. So lots of power there as well, lots of consistency. Now let's take a look at the K Outliner a little more. I'm just going to show you 1 feature actually. I don't have time to show you the K Outliner in detail, but it's a really cool structured outliner that even if you love Org Mode, you should try it. And this is 1 thing that you can't get with Org Mode, is let's say Hyperlink comes with an example file which teaches you about the K Outliner. So we'll just use that right here. And when you're in the K Outliner, you can bring up and go into the K Outliner menu right here at the bottom. And there's a format menu there. You always take the first letter of a menu, the first capital letter of a menu item. So F for format and then D for display in browser. So just let's do it. We have with 1 button or 1 key we've produced the entire outline in a collapsible outline in HTML. So I can go here. I just have to use my mouse. So I can expand and collapse these trees live with very basic coding. We tried to keep this as simple as possible. But you see it maintains the structure of the outline and even tables. So all the formatting is maintained and again it's instant. Or you can just export it to a file without displaying it. Very efficient kinds of operations. So that was number 4. Number 3 is a subsystem, another subsystem in Hyperbole called Hycontrol, which is for window and frame management. And I just wanted to show you 1 thing in there. It's got a lot of capabilities. But I always had the problem that Emacs wouldn't let me scale my fonts, all of my faces at the same time. I wanted to zoom. I didn't want to increase the default font size and all the others stay the same. So let's just display our faces right here and then we have a choice of either controlling frames or windows. So let's start by controlling frames. So you get another submenu when you're in high control to tell you what to do here. And there's just lowercase z and uppercase z. So let's try it. So it's scaling the entire frame. And you can see from the list of faces that they're all scaling at the same time. And I can go back down. Now if I switch to window mode, and there's a special fast way to do that, just hit T to toggle. And if you look at the bottom menu it says frames right now now it says windows when I hit T so now if I do the same Z to increase it's just this window and but it's you know it's the faces in there so a lot of power again but I just haven't found anywhere else that you can get that kind of control over your faces very rapidly. So that's number 3. Now number 2, let's put that in there. So the HiROLO is the final subsystem in Hyperbole and this has gotten much cooler. So it started off as a contact management system, but it's really just a hierarchical record management system that lets you have as many files, directories as you want, and you can search across all of them without any external utilities necessary, just what's built into Emacs and Hyperlink. So as you can see, we've expanded it to handle org files, markdown, K outlines, Emacs outlines. So what I'm going to do is just say, I want to search using my Hyberlo file list. You just set that to what you wanted to search. But now you have all this flexibility. You can use environment variables in it. You can just specify a directory and it will find all those matching files below that directory recursively. You can give it the markdown file here and you can use file wildcards as well. I mean, look at this. It's got a list variable in it and a wildcard, and it's just all I'm gonna do is I change this from a Lisp expression to make it a hyper button. You just change the outer parens to angle brackets, and then it's automatically an implicit button that you can activate with made a return so just ran that and now I've set my file list so now let's do a search it would be ctrl H H roll it X R and then S for search But I'll just do it this way. And boom, it found everything that fast. And I can just get like, show the top items in there. So I kind of have outlining in this buffer. I can just move to each match that I hit. And notice, although everything was collapsed, it's expanding here. When I move in and out of each of the entry matches, it expands or collapses as I move to the next 1. So a lot of power there. What else? So just tabbing through these things. And you notice that it's working across all of these different types, and it's telling you which file everything came from right up here. So I could just made a return here, should work. Yes, revisit the file normally. And it just pulls it right up. So everything is live and hyperbole. You've got hyperlinks everywhere. Let's just get rid of that. Go back to our demo. So if you are fans of Vertico and Consult, you can now use that with the High Rollo. So all you have to do is let's just format our windows, and then I'll say, let's use ConsultGrep over the Rolodex. Now, it found all the matches there, and I can just move live through them in the buffer like you may be used to or I can filter back down and say using orderless joystick or anything that has joy in it just match to those lines and then I can you know either jump there or quit out of here. I'll just quit out of it right now. So very cool. And all of that is using whatever you personally set as the set of files and directories you want to search. And finally, our number 1 feature of Hyperbole is you can customize this to give you these kinds of implicit buttons, whatever kind you want. And there are 3 levels of doing this. The first is for non-programmers. You can just set a string, like a URL with a parameter in it. So the %s represents the parameter, and This is how you do a search on DuckDuckGo. So all I have to do is evaluate this defal for action link. And now I have a new implicit button type that I can put between angle brackets. And I just give it that name, DDG, and some parameter, whatever I want to search for, and this is a button that does that search. Very cool, right? So you can embed these. This could be a hyperlink in, you know, a comment in a programming file. Anything on the entire web that you want to link to, whatever kind of compact notation you want to give it. So that's what we're going to learn as we get more advanced here you can give it even more compact notations. So as you get more advanced you can say, well I don't like this angle bracket, I want to have an implicit button that uses these square brackets and then an angle bracket inside it. So then you need the defile for implicit link. This lets you specify your start and end delimiters for your new type and and then you can give it a function that you wanted to run and that will take the text of whatever is in the button, in this case, test release here, and feed it to the function that I gave here. So what this function does is grep over my git log and find any commits that include the term test release in it. So let's try it. First I have to add the button type and that's all it takes and it defined it now. So anywhere in Emacs now I can use this button type essentially. So let me try to activate it. Okay, and it says yeah let's save it. Okay so now it's running a git log command. It found all the commits and now of course if I had made a return on this commit it recognizes it as an implicit link, and if I search for what was a test release, there it is. So this commit had that in there. So all these matches, so I don't know how other people do this, but for me this makes it a lot simpler. So a lot of power that any programmer can use. And finally, if you've mastered Emacs Lisp, or you're starting to, you can look in the hib types file in Hyperbole and see all sorts of uses of defib, which is defined implicit button. And that's the full power of e-LISP when you want to define 1. So what we're going to do here is I wanted to know, given a date, what the day of the week is. And because the date primitives weren't quite written the way I might like, it's a little longer than some. But I'm just going to evaluate this list. And I've now defined DOW as an action type. Now, how do I know I'm doing that? So I can always say Control-H, capital A here to see what a button's going to do. And it tells me When I'm there, I'm at a hyperbole button, and the type is from category DOW. And what's it gonna do? It takes a mark, it's gonna do a message action. Okay, so let's try it. It tells me that's a date, and it falls on a Sunday, which is today. That's correct. So 2 days from today is a Tuesday. Beautiful. So we've just totally transformed what we can do with text. You notice there's no markup here. And this is working with all of the other implicit types that we have everywhere in Emacs. It's only going to match to this kind of pattern and anywhere else, you know, it just won't trigger that type. So lots of power. You just need to get started with Hyperbole. There's great documentation both inside the code and in the manual. There's a fast demo that you can start with and there's about 10 different videos. There'll be 3 presentations on hyperbole here at the conference, and I hope you've enjoyed this presentation. I'd love to answer your questions and get some new users for Hyperbole. So lastly, I'd like to thank my co-maintainer, Matt, who's going to speak later about the extensive test protocols we have in Hyperbole. Hyperbole works on every version of Emacs from 27.1 up, and every operating system and Windows system that you use. And thanks so much to the volunteers and the speakers at EmacsConf. You do a great job, and we're all really appreciative that you take all the time that you do to make this happen. Thank you very much. So I'll let you do the gymnastics to join us back on BBB and put your webcam. In the meantime, I'll invite people, as Sasha told you in the introduction, to go put your question in the pad. The link is on the talks page and also on IRC. So take your time. We've already got some people who've asked questions. You can also start joining the room. Let me just ping Sasha. Ping to open ID HyperAmp. So, you'll be able to join us on BigBlueButton as well to go chat with Bob more directly. I'm not sure if people have joined already. Not yet. So, Bob, what I'll do, we already have 4 questions. I'm gonna read them to you and you can take your time answering them, but we do have about 7 minutes until we go to the next talk, so we need to be a little bit questions, and I'm also going to display them for the stream to see, do buttons keep their metadata within the same file? E.g., would I see it if I change to fundamental mode, for instance? implicit buttons have no metadata. That's the great thing about them, is you just type them in the buffer and what you see is all there is to that button and hyperbole generates all the smarts associated with them. When you create an explicit button, which I showed you 1 or 2 examples of, that metadata is, there is metadata with that, and that is stored in a separate file in the same directory called .hypb. So it's hidden away and it doesn't affect the format of the buffer that it's in. So again, what you see is what you get. You just see the delimiters around the explicit button and that's it. So Hyperbole takes care of all that for you. However, if you embed them into like a mail message, which you can, you can mail buttons, then there is a hidden area at the end of the mail message that encodes the metadata for the explicit buttons. Is it possible to link to a file by its ID, like the node, org ID or some similar unique string inside?

  1. You just made a return on an ID and it
takes you right to the org node, works with org Rome and org straight out of the box. We're looking at ways to make it easier to just insert those in places, but since you have word keys that do that already, you can just insert them in any documents and Hyperbole will recognize them. I think In some cases you may need to put ID colon in front of the ID as well. Generally it works. Regarding the frames example, any thoughts or considerations for a transient interface or is this something 1 could already toggle? Are you familiar with transient interface? you know, Hyperbole started out in 1991, though it's had much much work since then so we predate a lot of newer things in Emacs and then we just use them as as they Become useful too hyperbole We think the The mini buffer menu is pretty good. We could rewrite stuff in transient, but we haven't seen the need yet. Maybe high control, that might be a good candidate, because there are so many keys in it. So we'll think about that. But it would be a while before we got to it. Sorry I got really confused because there's a French salut, you know, in the text of it. Is someone saying hi to me or something? All right, next question. Regarding multi-file search functionality, why not implement it within the existing framework of MetaX grep or similar built-in commands? Yet another search interface sounds a bit redundant. talking about. I think what you missed there is that High Rollo matches to records, multi-line records, so it's not a line-oriented match, it's a record-oriented match. So Grep, you can say maybe give me 3 lines of context, but what if I have a 20-line record? I want to see the whole thing. And so, it's a full-text search interface, which lets you have any size entries or nodes in the match buffer. So that's 1 reason. MADAX grep works with hyperbole. I mean, you use it if you want and then you can hit MADA return on grep lines. So we basically take everything from POSIX and everything in Emacs and we try to make a lot of it simpler to use. We don't take away any of the functionality, we just augment it. of the packages, you know, the philosophy is just you create your little bit, your little island where you do your stuff. And if you can resonate with other islands so much the better. And it feels like between those islands, you know, hyperbole is a great way to connect things that are just text. So it's always been a lovely philosophy. There's always been a lovely philosophy behind it. Hyrolo also contains logical search operators. So when I typed in that string you could just as well type with like Lisp expressions, semi Lisp expressions. You can say open paren and word 1, word 2, close paren. You know you can have or and XOR and not and it'll do the search and just retrieve the entries, again, multi-line entries that match all of the criteria that you specified there. So that's fairly unique, I think. So you basically got a full text search platform with logical operators, instantly, you know, fast moving, rapid keys that you can control everything with and it's all integrated into this larger framework. you have 2 more questions, but there's a big 1 about what inspired you to write it back. It's being hyperbole around the time of its birth, but sadly, we only have about 1 more minute. So what I'm going to ask you to do, feel free to answer the question. If you go on BBB, I've pasted the link to the other pad. I think you can see it on your so what are we going to do? I'm Sorry, I'm just a little bit pressed by time because it's not me controlling when we move on to the next talk, as was evidenced yesterday when we got yonked to the next talk. So Bob, feel free to take all the time you want to answer questions. People, if you wanna join the Big Blue Button room, the links are available and open on the talk page. You can join and ask as many questions as you want to Bob. And for us, with a live stream, we'll be moving on to the next talk in about 30 seconds. So Bob, all that's left is for me to thank you for your presentation again this year and Bye bye, Bob. And we'll be moving on to the next talk in about 10 seconds. See you in a bit. All right, Bob, we are off air I think now. Thank you so much. I need to get moving for in here or I need to type them in? read the questions on your own and answer them. We'll collate everything together, we'd just like to have your answers. bye-bye. So let me take a second here to see what questions we have. Did we cover that? OK. The point is why not upstream search interface? Could you clarify that question? I don't quite know what that means. So I'll go on to the next 1 and come back to that. Hyperlinks been around for a number of years now. What inspired you to write it back around the time of its birth? Well, that's a great question. It was born before the World Wide Web, actually. And it was right before. I remember we were in the midst of a version when the first version of the web occurred. And I was thinking that there was going to be an information explosion of unstructured information. And like we needed to have much better tools to be able to manage say like 5,000 email messages coming in and all sorts of non-database-oriented information structures. So I said we need an advanced interactive hypertext system and it needs to work with all the general capabilities that we use like email and our document production systems. So I was doing research at the time at a university And I decided to work on something that we called personalized information environments. And there's a paper about this out there if you want to dig it out on the web. So Pies, as they were called, was an architecture which would have a bunch of managers, like Hyperbole was 1 of the managers, the hypertext manager, and then a bunch of point tools that would leverage the managers, like an email reader would be a point tool that would leverage the hypertext manager. And so the first, I did in fact write something called PyMail, which was very much Gmail-like, before Gmail. And so inside, and I did a, it was like our mail in a way, but inside your our mail summaries, for example, you could have explicit buttons embedded and that were drawn from the subject of your email message, and they'd work just like the regular button. So it was very flexible, and it had rule-based processing and things. So Hyperbole came out of that, and it's come a long way, but it's still a very useful core hypertext system, hypermedia system, I should say. Are you familiar with the Embark package? I am a bit. I've just started using it. I think there's some overlapping functionality with hyperbole. Yes, we've found that people over time have enjoyed hyperbole and have started replicating some of its features, you know, small amounts of the features. I talked to, I hope I don't miss his name, but O'Adam who writes that once in a while we dialogue and I think Embark is great, you know, I'll give him some pointers too and he thinks that Embark and hyperbole are quite compatible too, just like organ hyperbole. So that's how we like to keep it. Some people prefer just a small package of mBARC, and it does different things than what Hyperbole does. So I think you use all of these tools together, and they can work very well together. Any other questions? Anybody still here? If not, probably people are off to another talk. So thank you very much And again look for Hyperbole version 9 in the next week. Thanks very much. Bye. Should I leave BBB? Oh Alpha Papa's here. Hey. Good to see you. Alright, well... Well, I'll stay for another minute, but I think I'm going to go off video 2 and start listening to another talk. Thanks, everyone. Thanks everyone. Yes, I can hear you. Yes, questions. We're all done. I'm going to close the room unless you want to go a little longer, because this talk that we're playing right now is finishing really quick and we don't have a Q&A afterwards. So, do you want to stay on air or something? because someone went to go hear that presentation, I can stay. And you can stay, we'll just put on BBB. You can stay muted until people join, but this way it opens up menus for people to join and if no 1 shows up in 5 minutes we'll all go on break. Does that sound okay? background and I'll let you know. Okay, Bob, I've won the stream. We are joining it now. We've got about 5 seconds. And I think we are back. so we are gone, Bob, please. can we see if anybody comes back in the room? How do you tell? you've got on BbBlueButton, you've got a button, I'm showing it on the screen, but you've got a little button that allows you to show the people joining. So, hello everyone. Let's see if you had more question on your pad that we could be taking in the meantime, just give me a second to find this stuff on the pad. Has it? Is this the last pad? Oh no, this is a different 1, here we go. Okay, I'm back. So, yeah, it looks like... Is anybody back? Send, if you're here, send a chat message. You have, apparently, whenever we leave those BBB chat room open, the moment we go off air, people start joining and asking a lot of very interesting questions and you know that's all well and good, we'll be able to put them on the page later on. But it'd be great if you could also have those discussions when we are live because a lot of people would benefit from the brilliance that goes on in this room. So please don't be shy, general stream. We have about until 10 of the next hour, which is 19 minutes. So have you ever tried hyperbole, Leo? it feels like every year when you present something, it feels like I already know so much. Because of the buttons, it feels like it's also something that we've reinvented many times in Emacs. It's like conversion to evolution, except you're the 1 who started ahead of everyone else. you know, we have, Emacs itself has push buttons, which you see like in the help buffers. And those used to, we didn't really do anything with those, but now we've subsumed them as implicit buttons as well. So you're made a return, we'll work on those anywhere too. So, we're trying to get, you use 1 key, right? To control every type of button that you have. It works on org links, org buttons anywhere, or URLs. Because it's so simple. All you need is like 5 to 10 lines of code to map. You map the pattern that represents a concept, right? And then you can create an infinite number of those buttons from that type. That's what's really cool about Hyperbole, is say I have a 500 page document and it uses a really weird format for cross-referencing, right? I write my 3 lines of pattern match to work with that. And then everywhere throughout that document and the hundreds of other documents that will be created with that format, they're all live buttons instantly. Nothing changed about the document. That's really cool. You know, word mode, we have global word buttons, but mostly it has to be embedded within an org file, right? And follow that syntax. With hyperbole, it's like we can adapt as the world adapts around us to whatever formats people want to use that day. And you can even change things to look the way you want, right, and have your own cross-references. There's something built into Hyperbole that's not really active, which was sort of along the Zettelkasten way. We wrote this a long time ago. It's called hib-doc.el, and it's a card catalog notion. So it uses the high rollo in the background but it lets you create these forms that are cards that you fill out with whatever kind of data you want and then it gives you the full text searching across the cards and each card has a unique ID that you can reference similar to org IDs but these are human readable and human typable and so you can you can just have a cross-reference to any doc ID and essentially create what Engelbart used to call a journal, which is all these IDs on documents that point you directly to the document archive so that you could have like your internal publishing system and you know it's very simple to do and it's just 1 module added on to Hyperbole. know because coming back to the side of convergent evolutions it's funny because the parameters are a little different. For us with org buttons, we're very happy. A lot of the stuff during EmacsConf is run with org mode, like we have Elisp going everywhere to compile a lot of org properties, like speaker information, for instance, how long the talk is, the title, and all this. We have all of this in an org file, which we use as a database, but then we can do so much stuff. We can send email and we can update the schedule. By the way, if you're interested in this, we'll have a talk on the DevTrack in the afternoon today that Sacha did and it's wonderful. I'm just teasing it. for you, it feels like the parameters were slightly different because the feeling was, I just want a tunnel that can work between any type of files. Now, it's all well and good. Org-Rome, D-Note, and all the stuff like this, they create bidirectional links. But it's only between org-mode files. Whereas what you're achieving with Hyperbole, and you've done it much earlier than everyone else, is that you have this concept regardless of the type of file that you're using. And I find this to be beautiful. Like 5 years ago, whenever you were talking about hyperbole, I did not have a concrete idea of what was happening. But ever since I've gone through the journey of really understanding what the El Caster method were about, it feels like you were foreigners in the topic. Obviously, you've mentioned the mother of all demos by Edward Engelbart, but those ideas are not novel, but it feels like only now are they starting to be appropriated by people, especially in free software, and it's really good to see. I'm really excited to, well, have my small part to play in this. And I'm also excited to be able to chat with you and people like Bastien and other people about all those topics. it's fun that we can laugh now about when people say people are still using Emacs, you know, is because they're not used, certain people aren't using it. They have no idea of how far it's come and how powerful it is. And, you know, we're leveraging Elisp heavily, obviously, but if you look at the definition of our types, they look exactly like DIP funds in ELisp. And we've been able to do that because of Lisp macros. You know, we so we basically have our own domain specific language there, but there's almost nothing to learn because it's just like what you know from UList. So again, you know, taking the concept and leveraging it, abstracting it and leveraging it multiple times gives you a lot of power. And people, you know, somebody said the other day, and I said, finally, this quote happened. He said, there's so many things that I do with hyperbole every day that I forget that I'm using hyperbole. Because it's just so embedded in this guy's workflow. And that's really how I use it. You know, there are features in there, can't use everything, right? So there are features that I don't use, but I use a lot of things and it's all like muscle memory, just like the keyboard, the Emacs key bindings. So it's very exciting to get to that level. And now, you know, we haven't started with the chatbots or any of the AI integration, but I'm starting to think about that a little bit and how we'll interface to that world and I think it's going to be very exciting. what we were talking about before when we mentioned Hyperbole being a package inside of an ecosystem that is Emacs. But it's not because something is well circumscribed in terms of feature set that it does not influence everything around it. Like Hyperbole can be used with something completely at the opposite end of what it was intended for, just because it provides a good set of tools that can be used wherever else you want in Emacs. And it's the same thing with Org Mode, it's the same thing with many, many different things. And it feels like integrating AIs, or generative AIs, into Emacs would provide such a tool that could apply to any kind of other major mode or any kind of other use. So I'm also excited to see this. It feels like we are sitting at the brink of a revolution. I'm not going to say the acne stuff, but it definitely feels like right now, by trying to see what we can do with AI, it's definitely going to change the way not only we program, but also the way we take notes and the way we design stuff, arcing back to what John Wigley said yesterday about his draft program on macOS. Bob, if you don't mind, I see people typing questions and I also see people joining on people buttons, so I'm going to read you the 2 questions that have been added. Is that okay? Wow, what you're describing now, and that's when you were talking about the bi-directional links and especially the last question in its entirety, What you're describing now reminds me a lot about HyperCard that I grew up on. Do you know if Hyperbole inspired Bill Atkinson or if you were inspired by HyperCard? Or were there just a lot of thoughts about hyper-contextuality around that time? anecdote. I don't know if it's true or not, but I think HyperCard predated our stuff. It was right around the same time when Hyperbole was starting out. But when I was doing the Pi research, I worked at, when I left school, I worked at Motorola, and we did a lot of work with Apple back then. And somebody came back and he said, you know, the people over there have seen your Pi research and they really liked it a lot. And so they were leveraging that when they decided to create the division that they called Apple Pi, which was the originator of the Newton which eventually led to the iPhone. So it all kind of is interconnected just like the impact that free software has had around the world. So you never know where your stuff is gonna go or end up. question. Is it possible to only use 1 feature of hyperbole without the others, i.e. Using only the implicit explicit buttons without I control I roller or without having to rewrite part of the code in hyperbole in order to be able to load a smaller hyperbole. Does it make sense? So you can use any little bit that you want anywhere right you can even just call code from Hyperbole. I mean you don't use everything in Emacs, right? But you still install Emacs on your machine. It's exactly the same thing. Those libraries don't take up any memory, they take up a little disk space and it's so trivial compared to the amount of disk we have today. So a lot of things are not loaded unless you activate them. And so I know that you do have to build all those things. So maybe that's what bothers people. It takes 2 minutes if you're using, it depends how fast your computer is. But you build it once on install like every other package. And it used to be that there would be a lot of warnings just because of the way we wrote the code and we didn't really have to deal with some of those warnings. But with this new release, we've gotten rid of almost all of them, including the native compiler messages. So it should be a very clean install now, and just use 1 part at a time. But the other parts are there in case you make a link to something and you use a facility just like I was showing as I went across subsystems today. It may take you a year, but then all of a sudden you find the use case for Hyrule and you say, oh, I'm glad I have it there. And yes, some of these things could be split into sub packages like you do in the org ecosystem. But given our limited resources on the team, we find having them all in 1 gives us a higher level of quality and lets us deliver a better integrated system for your use. you know, it's, it's not a monolith. I mean, it's usually easier, easy, more easy, more easy. Sorry, I was right on the first try. It's usually easier to maintain a monolith that contains many bits of functionality like org. You have plenty of people using org mode, not using org-agenda, for instance, or you've got plenty of people using org-mode and barely using Babel because it doesn't really translate to their use. And I feel like I very much agree with you. It's okay to install a package and only use some of the functions. I was reminded, as you were discussing this, of the consults package, which is part of the VertiCo, mbark and marginalia and all this. Consult, it replaces a lot of the Emacs built-in commands like for finding your buffers or finding text inside of your buffer. It's great. And you do not need to completely move to consult as you get started. You can start colonizing 1 step at a time the function that you usually use. And I highly recommend to people to not let the size of a project deter them from trying it out because, again, in Emacs, everything is horizontal. If somehow you want to use something that was not intended primarily for this, or if you only want to use 10% of a package, well, do it. An example that I have for me is that Lispy is the minor mode that I use for editing Elisp documents, and it's great. Elisp provides similar functions to ParaEdit, which might be a little more popular, which allows you to have modal editing when you are on specific parts of a file, like the opening parenthesis or the closing parenthesis. It's great, it provides modal editing for those modes, but I certainly do not know everything, every modal command associated to it. I just use the 1 that makes the most sense to me. So feel free to explore. It's not that large. I mean there's a fair number of files but it's just like 1 major directory and then the KOutliner directory. And when you look at these things, you install web applications, everything else, just when you download the source code, it's much, much smaller than any of that. So I don't know why people you know accept that it's larger than your typical package. Why there's really an issue there. that a paradigm like the 1 you're describing, which seems to be changing the way you use Emacs in a way because you're no longer thinking of as buffers as separate entities, you can tunnel between them. You know, it feels like a huge paradigm shift and you assume that the code behind it is going to be humongous as well, but it's usually not the case. It's just that the idea is very pure at the start, and the paradigm shift that it allows is also magnificent. But at the end of the day, the code is fairly simple, because it does 1 thing and it does it well. I mean I'm a big believer in turnkey kind of systems. In fact a long time ago when I built an IDE on Emacs called InfoDoc that was delivered pre-compiled. So it's like you download it like every other app and you run it. And so I think eliminating all the friction that occurs, and you know, I just got going recently with the wonderful packages that you just mentioned, VertiCo and Consult, but they don't have a manual that covers all that. They use sort of like a cookbook, a wiki online to answer a lot of the questions that people have and everybody has to figure out their configurations you know to make these things all work together. We'd like to do that engineering and say here it is you know it's like if you want to configure it and make it your own, you can do it. But there is a default configuration that handles all the typical use cases and you can just load it up and run because it's made to use, you don't have to hack it to make it useful for you. with Stéphane yesterday about sane defaults. And I think the question was, Emacs should probably ship with sane defaults for people. And Stéphane's answer was, well, my sane defaults might not be the same thing as your sane defaults. And that's why I think it's important, really, to have a core set of features, be it with hyperbole of org mode, that is well-documented, as you mentioned. But what I like about this in a way, and I think hyperbole is perhaps taking more benefits of this than Org Mode, is that the self-documentation aspect of it feels like it's easier with hyperbole because you're not bound by Org Mode buffers. You can link to just about everything. And for me, this ability to self-document is, well, first, very true to the philosophy of Emacs in the first place, but also opens up those resonance cycles where, oh, you get interested and then you start reading up and then the documentation is so good that it feeds into your practice and then it goes nuclear and you gain so much knowledge as a result of this. All right, Bob, we are about out of time. We only have about 1 minute until we go to the next talk. Do you have any passing words? the world's complex, it's getting more complex. I think that's why people use Emacs in the first place, because it's a big system. You wouldn't use it unless you wanted it to simplify your life. Hyperbole is built with the same idea in mind. You may not get it just like Lisp. A lot of people don't understand when they first encounter it, but when they do understand it, they're blown away. It changes their life. You know, when you really understand implicit buttons, I think that's 1 of the things in hyperbole that can change your Emacs working life. So just give that a try and I think you'll be pleasantly surprised across time. next talk in about 20 seconds so everyone see you in a bit and Bob thank you so much again. So thank you so much, Bob. I'm going to need to step out and get ready it. But I wanted to ask you where in London I'm in France, and I just moved to London. Sorry, I thought you were. Take care. Thanks a lot. Bye-bye. Bye-bye.

Questions or comments? Please e-mail rsw@gnu.org

Back to the talks Previous by track: Emacs core development: how it works Next by track: Using Koutline for stream of thought journaling Track: General