WEBVTT 00:00.000 --> 00:01.783 Welcome to my talk "Emacs with Nyxt: 00:01.783 --> 00:02.823 extend your editor with 00:02.823 --> 00:04.623 the power of a Lisp browser". 00:04.623 --> 00:06.583 Who am I? I'm Andrea. I work as 00:06.583 --> 00:08.303 a Clojure software engineer somewhere 00:08.303 --> 00:09.743 in the middle of the UK. 00:09.743 --> 00:11.743 And I inherited my passion for Emacs 00:11.743 --> 00:13.703 from my Ph.D. supervisor, and from that 00:13.703 --> 00:15.943 moment on Emacs became a core tool 00:15.943 --> 00:17.863 of my daily routine. 00:17.863 --> 00:20.863 You can find more about me and my interests 00:20.863 --> 00:23.983 at ag91.github.io, that is my blog. 00:23.983 --> 00:25.183 Let's get into the talk. 00:25.183 --> 00:28.183 So, why Nyxt? Nyxt is an extensible 00:28.183 --> 00:29.543 Common Lisp browser. 00:29.543 --> 00:31.903 Fundamentally, it's Emacs for web browsing. 00:31.903 --> 00:34.063 And why do I say that? I say that 00:34.063 --> 00:36.063 because is a…, this is Nyxt. 00:36.063 --> 00:40.223 You can see that is organized with buffers, 00:40.223 --> 00:44.063 and you can see that I can invoke command, 00:44.063 --> 00:47.183 like, I was in Emacs with this. 00:47.183 --> 00:48.983 So, I'm using even the same keybindings, 00:48.983 --> 00:52.783 so, for that I used M-x. 00:52.783 --> 00:55.983 And some of the features of Nyxt 00:55.983 --> 01:00.103 are just amazing. For example, say that 01:00.103 --> 01:03.823 you want to mark some text, this is the way, 01:03.823 --> 01:08.703 so, I just pressed Control space (C-SPC), 01:08.703 --> 01:10.423 and now I will start the marker, 01:10.423 --> 01:13.223 and now I can copy the text, and when 01:13.223 --> 01:15.663 I'm done, I can finish to use visual mode. 01:15.663 --> 01:18.023 Or, for example, what about…, 01:18.023 --> 01:21.183 I want to navigate without using my mouse. 01:21.183 --> 01:25.183 I can do something like follow-hint, 01:25.183 --> 01:28.023 and this opens the possibility to press 01:28.023 --> 01:29.903 AC to jump on the Articles, 01:29.903 --> 01:33.063 and all of a sudden I'm on the page 01:33.063 --> 01:36.023 with the blog posts of the Atlas team. 01:36.023 --> 01:39.383 Or, for example, I can extend my browser 01:39.383 --> 01:40.783 from within the browser. 01:40.783 --> 01:43.223 So, you can see I can evaluate a command, 01:43.223 --> 01:48.663 a Common Lisp code, 01:48.663 --> 01:50.903 and it produces the result. 01:50.903 --> 01:56.183 And then, for example, I can also auto…. 01:56.183 --> 01:58.663 This browser comes by default with an 01:58.663 --> 02:01.143 integration with your password manager, 02:01.143 --> 02:04.223 in my case it's pass, and I can copy 02:04.223 --> 02:08.783 a password. This is just as easy as is, 02:08.783 --> 02:10.543 it comes by default. 02:10.543 --> 02:13.583 Another incredibly useful feature 02:13.583 --> 02:18.023 that I didn't find in other browsers is 02:18.023 --> 02:20.503 searching between multiple buffers. 02:20.503 --> 02:23.503 So, this function search-buffers, 02:23.503 --> 02:25.823 this command lets me select 02:25.823 --> 02:29.503 some of my open buffers, 02:29.503 --> 02:32.503 and I can look for a string in there. 02:32.503 --> 02:34.623 And you would see that the hits are 02:34.623 --> 02:37.423 from the buffers that I have open, 02:37.423 --> 02:42.583 for example, Clojure or 02:42.583 --> 02:46.103 the YouTube video about Clojure. 02:46.103 --> 02:49.623 Let me get into something very interesting. 02:49.623 --> 02:52.783 How can I make Emacs speak to Nyxt. 02:52.783 --> 02:55.103 And for that, let me show you something 02:55.103 --> 02:57.143 in the literate programming approach. 02:57.143 --> 03:00.183 So, this Org mode source block is 03:00.183 --> 03:04.423 linked to this Nyxt REPL. 03:04.423 --> 03:06.983 I can define a new command, 03:06.983 --> 03:09.343 and when I go in Nyxt, 03:09.343 --> 03:10.863 I can find this new command, 03:10.863 --> 03:12.503 and I can invoke it, and you can see 03:12.503 --> 03:16.943 there is something in the minibuffer. 03:16.943 --> 03:21.543 I can use it from Nyxt, but I can do it here. 03:21.543 --> 03:24.703 I can also use it directly from the REPL. 03:24.703 --> 03:27.743 You can see that the same thing is logged 03:27.743 --> 03:30.423 in the REPL. 03:30.423 --> 03:32.663 And then with something that I would speak 03:32.663 --> 03:36.423 about in another talk in the conference 03:36.423 --> 03:39.143 — Moldable Emacs. I can also just 03:39.143 --> 03:42.823 evaluate JavaScript outside. Let's create 03:42.823 --> 03:46.703 a playground that allows me to write some 03:46.703 --> 03:49.903 JavaScript code. And if I evaluate this code, 03:49.903 --> 03:52.023 I get the title of the webpage 03:52.023 --> 03:54.583 that is currently open in Nyxt. 03:54.583 --> 03:58.343 The cool thing is that I can do it also 03:58.343 --> 04:02.263 directly in Lisp, this is Parenscript 04:02.263 --> 04:05.223 that evaluates to the same thing, 04:05.223 --> 04:07.823 (it) is just the same, just document.title, 04:07.823 --> 04:10.743 only that is in Common Lisp. 04:10.743 --> 04:14.343 You see that Emacs can speak to Nyxt, 04:14.343 --> 04:16.103 but also the reverse is true. 04:16.103 --> 04:19.023 Nyxt can speak to Emacs. So, for example, 04:19.023 --> 04:21.943 if I'm in Nyxt, and for example, 04:21.943 --> 04:26.623 let me go to my blog, if I press here, 04:26.623 --> 04:30.863 this is an email link, automatically in Emacs 04:30.863 --> 04:33.943 it will let me compone a message 04:33.943 --> 04:35.943 using my email manager. 04:35.943 --> 04:39.823 Or, say that always in my blog I want 04:39.823 --> 04:43.543 to write something here in the searchbar, 04:43.543 --> 04:46.303 I think that I don't want to write it in 04:46.303 --> 04:50.623 the browser but in my Emacs because 04:50.623 --> 04:52.903 I have some template for search. 04:52.903 --> 04:55.503 If I do this, all of a sudden 04:55.503 --> 04:59.103 the text is added. 04:59.103 --> 05:03.423 Or say I'm watching that Clojure video, 05:03.423 --> 05:06.343 and I get to this point, and then I say 05:06.343 --> 05:09.703 "Yuu! This is a very interesting thing, 05:09.703 --> 05:12.783 let me take a note". So, I take some note 05:12.783 --> 05:16.903 with some text, and if I go back in Emacs, 05:16.903 --> 05:19.023 tadam! I found the note, 05:19.023 --> 05:21.903 and I found it with the duration, 05:21.903 --> 05:25.063 so I can just jump to the same point. 05:25.063 --> 05:28.743 And what else? 05:28.743 --> 05:31.903 There is something even bigger 05:31.903 --> 05:32.663 that we can do, 05:32.663 --> 05:34.063 this is a bit more advanced, 05:34.063 --> 05:35.823 and this is something that I do 05:35.823 --> 05:39.023 again with my Moldable Emacs. 05:39.023 --> 05:41.183 Say that you want to do some 05:41.183 --> 05:43.223 data visualization. 05:43.223 --> 05:44.863 If we use Vega-Lite…, for example, 05:44.863 --> 05:47.823 we want to visualize a scatter plot. 05:47.823 --> 05:49.623 Let me take some example data 05:49.623 --> 05:52.423 that could be interesting also to you. 05:52.423 --> 05:55.063 So, say that I have this playground 05:55.063 --> 05:57.263 that lets me evaluate 05:57.263 --> 06:01.703 some query on my Org-roam database. 06:01.703 --> 06:03.663 What I'm doing here is I'm gonna 06:03.663 --> 06:05.703 go through my first 100 notes 06:05.703 --> 06:09.823 and collect their backlinks, 06:09.823 --> 06:13.183 so some information that I find interesting. 06:13.183 --> 06:16.343 If I convert this to JSON, 06:16.343 --> 06:18.903 now, all of a sudden this is something 06:18.903 --> 06:22.623 that I can put in that Vega-Lite template 06:22.623 --> 06:26.183 that I showed you a moment ago. 06:26.183 --> 06:28.343 So, I'm gonna find out that file, 06:28.343 --> 06:30.463 you see that I left a question mark, 06:30.463 --> 06:31.703 (this is) something that I still 06:31.703 --> 06:33.783 didn't automate completely. 06:33.783 --> 06:37.983 By saving this file and opening it with Nyxt, 06:37.983 --> 06:41.183 you can see that now I have a scatter plot. 06:41.183 --> 06:43.943 And these are my actual notes, 06:43.943 --> 06:48.343 so you can see that if I stay on it, 06:48.343 --> 06:53.063 these are actually my notes. 06:53.063 --> 06:55.343 When I'm in Emacs, what I can do is 06:55.343 --> 06:58.303 I click here, and now in the background 06:58.303 --> 07:00.903 it opened my note, 07:00.903 --> 07:04.303 and it opened with all my backlinks. 07:04.303 --> 07:07.703 You can see that I have embedded in my 07:07.703 --> 07:11.303 browser some functionality of Emacs. 07:11.303 --> 07:13.463 You understand that this is the power of 07:13.463 --> 07:16.983 unifying, integrating these two experiences, 07:16.983 --> 07:18.943 and it opens the doors for 07:18.943 --> 07:22.223 a lot of interesting interactivity. 07:22.223 --> 07:24.743 Anyway, what is next? 07:24.743 --> 07:29.023 This was my talk, what is next is 07:29.023 --> 07:32.143 continue merging it with Moldable Emacs. 07:32.143 --> 07:34.023 (This) is something I will present in 07:34.023 --> 07:37.463 another talk in this conference with web, 07:37.463 --> 07:39.263 so that we can extract meaning from 07:39.263 --> 07:41.103 the web, and we can bring it in Emacs. 07:41.103 --> 07:43.583 And from Emacs bringing back stuff 07:43.583 --> 07:46.543 like a picture into a web page, 07:46.543 --> 07:48.903 so that we can do fancy visualization. 07:48.903 --> 07:51.063 Another thing I want to do is to 07:51.063 --> 07:54.263 automate the boring browser flows 07:54.263 --> 07:55.543 that I do, like, for example, 07:55.543 --> 07:58.263 if I periodically buy something, 07:58.263 --> 08:00.863 I could do it from within Emacs 08:00.863 --> 08:05.263 instead of always clicking around. 08:05.263 --> 08:08.383 And then I'm just gonna cross fingers, 08:08.383 --> 08:10.023 I hope that this browser will 08:10.023 --> 08:11.783 become mainstream. 08:11.783 --> 08:13.263 So, this was my talk, 08:13.263 --> 08:14.663 thank you for listening, 08:14.663 --> 08:17.343 and you can find more about it at 08:17.343 --> 08:19.823 ag91.github.io, my blog, 08:19.823 --> 08:22.680 and enjoy the rest of the conference, bye! 08:22.680 --> 08:25.520 [captions: bhavin192 (Bhavin Gandhi)]