From 809bc9922266236d7e791087a30983b44353d71c Mon Sep 17 00:00:00 2001 From: Sacha Chua Date: Sun, 21 Feb 2021 00:35:55 -0500 Subject: Subtitles for talk 22 --- ...2-powering-up-special-blocks--musa-al-hassy.vtt | 1723 ++++++++++++++++++++ 1 file changed, 1723 insertions(+) create mode 100644 2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt (limited to '2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt') diff --git a/2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt b/2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt new file mode 100644 index 00000000..46b7433f --- /dev/null +++ b/2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt @@ -0,0 +1,1723 @@ +WEBVTT + +00:00:04.080 --> 00:00:07.359 +All right, then. Well, hello everyone. + +00:00:07.359 --> 00:00:11.519 +I hope you're all enjoying the EmacsConf. + +00:00:11.519 --> 00:00:15.040 +My name is Musa Al-hassy, and I hope you're + +00:00:15.040 --> 00:00:19.840 +excited to learn about powering up special blocks. + +00:00:19.840 --> 00:00:25.574 +Let's first off find out +what these special blocks are, + +00:00:25.574 --> 00:00:27.920 +and see what we can go from. + +00:00:27.920 --> 00:00:30.240 +Yesterday, I saw a lot of cool talks + +00:00:30.240 --> 00:00:33.200 +and people were chatting about + +00:00:33.200 --> 00:00:37.200 +how should you present? Should you +do it this way or that way? + +00:00:37.200 --> 00:00:39.931 +I thought maybe I should try a different way. + +00:00:39.931 --> 00:00:42.567 +But I'm talking about special blocks + +00:00:42.567 --> 00:00:45.039 +and if I show you an Emacs, then I have to export + +00:00:45.039 --> 00:00:47.840 +the HTML so you can see what it looks like + +00:00:47.840 --> 00:00:51.920 +or export to a PDF so you can see what it looks like. + +00:00:51.920 --> 00:00:54.239 +So I ended up writing in org-reveal, + +00:00:54.239 --> 00:00:58.233 +and joyously, this just works. + +00:00:58.960 --> 00:01:00.879 +You can just see things here. + +00:01:00.879 --> 00:01:03.452 +I was worried that I'd have to take pictures + +00:01:03.452 --> 00:01:09.760 +and then insert pings, so that was a delight. + +00:01:09.760 --> 00:01:15.704 +Okay. Special blocks are these things like a center small quote. + +00:01:15.704 --> 00:01:17.280 +That's what a special block is, + +00:01:17.280 --> 00:01:19.733 +and with a bit of Lisp, we can make + +00:01:19.733 --> 00:01:22.741 +special blocks and link types. + +00:01:22.741 --> 00:01:24.799 +Right. Using a single interface. + +00:01:24.799 --> 00:01:27.344 +The interface is going to be similar + +00:01:27.344 --> 00:01:29.281 +to one many people are familiar with. + +00:01:29.281 --> 00:01:34.712 +In particular, Org Babel's src interface + +00:01:34.712 --> 00:01:37.840 +as well as using global header arguments for link types. + +00:01:37.840 --> 00:01:39.450 +The idea is to write it once + +00:01:39.450 --> 00:01:41.200 +and generate many different kinds. + +00:01:41.200 --> 00:01:45.213 +You write in Org markup and you can have HTML, + +00:01:45.213 --> 00:01:49.767 +you can have PDF, and joyously, org-reveal. + +00:01:49.767 --> 00:01:53.600 +That was an unexpected delight. + +00:01:53.600 --> 00:01:57.840 +Here are a few that you'll just see + +00:01:57.840 --> 00:02:01.759 +in this presentation. + +00:02:01.759 --> 00:02:05.040 +I won't show some of these link-only ones, + +00:02:05.040 --> 00:02:06.799 +but we'll see a few of these other ones + +00:02:06.799 --> 00:02:09.500 +just to make the presentation look nice + +00:02:09.500 --> 00:02:11.520 +So the presentation is really going to + +00:02:11.520 --> 00:02:14.000 +present these blocks and the mechanism + +00:02:14.000 --> 00:02:15.120 +at the same time. + +00:02:15.120 --> 00:02:18.400 +No HTML was written. + +00:02:18.400 --> 00:02:21.280 +Look, Ma! No HTML, just pure Org Mode, + +00:02:21.280 --> 00:02:25.840 +and you get all these beautiful boxes and things. + +00:02:25.840 --> 00:02:27.680 +The motivation for this is... + +00:02:29.120 --> 00:02:31.200 +you're online, you run into a blog, + +00:02:31.200 --> 00:02:32.120 +and you see something you like, + +00:02:32.120 --> 00:02:33.120 +and you're like, man, + +00:02:33.120 --> 00:02:36.640 +you know, I wish I could produce that. + +00:02:36.640 --> 00:02:41.639 +But you check, and the author wrote raw HTML. + +00:02:41.639 --> 00:02:44.239 +You know, #+HTML: everywhere. + +00:02:44.239 --> 00:02:49.533 +That's going to obscure your real content. + +00:02:49.533 --> 00:02:51.200 +It's going to be surrounded by all this + +00:02:51.200 --> 00:02:54.239 +styling information. That's unfortunate. + +00:02:54.239 --> 00:02:57.033 +The author decides to use an Org macro. + +00:02:57.033 --> 00:02:58.959 +All right, a bit better, + +00:02:58.959 --> 00:03:00.333 +but then what if you decide, + +00:03:00.333 --> 00:03:04.667 +hey I want to make a PDF? Not great. + +00:03:04.667 --> 00:03:06.000 +And then the worst of all, + +00:03:06.000 --> 00:03:07.840 +the author doesn't give you the source, + +00:03:07.840 --> 00:03:10.159 +and then you have to view page source, + +00:03:10.159 --> 00:03:13.760 +and learn cascading style sheets, + +00:03:14.239 --> 00:03:15.767 +and sit in a corner and cry, + +00:03:15.767 --> 00:03:18.080 +and decide to do other things with your life. + +00:03:18.080 --> 00:03:22.640 +We want to give you Org users numerous styles + +00:03:22.640 --> 00:03:27.200 +and an extensible mechanism to add more of these + +00:03:27.200 --> 00:03:28.799 +aesthetically pleasing styles, + +00:03:28.799 --> 00:03:31.200 +to have really nice things + +00:03:31.200 --> 00:03:33.933 +look one way in the HTML + +00:03:33.933 --> 00:03:36.567 +and look almost the same way in the PDF + +00:03:36.567 --> 00:03:38.667 +and other back ends. + +00:03:38.667 --> 00:03:41.680 +And if by having these newer ones, + +00:03:41.680 --> 00:03:45.519 +people might be encouraged to try making new ones, + +00:03:45.519 --> 00:03:49.040 +especially when the interface is not so difficult, + +00:03:49.040 --> 00:03:54.159 +that's the aim. + +00:03:54.159 --> 00:03:59.120 +So let's have a real story to motivate this even more. + +00:03:59.120 --> 00:04:03.533 +Here's three friends. I hope I don't butcher their names, + +00:04:03.533 --> 00:04:04.640 +but these friends are called + +00:04:04.640 --> 00:04:08.720 +Amin, Sacha, and Corwin. They're organizing a conference, + +00:04:08.720 --> 00:04:12.080 +EmacsConf 2020. + +00:04:12.080 --> 00:04:14.239 +So Sacha decides to write an Org file + +00:04:14.239 --> 00:04:16.479 +and she would like some feedback. + +00:04:16.479 --> 00:04:19.840 +Okay. Just to make it clear, there's no... + +00:04:19.840 --> 00:04:22.960 +just how easy this looks, + +00:04:22.960 --> 00:04:27.280 +let's look at the source for this block. + +00:04:27.280 --> 00:04:30.720 +Notice it's just the word "green," then a colon, + +00:04:30.720 --> 00:04:37.333 +then Amin. No div style coloring, + +00:04:37.333 --> 00:04:38.479 +just green:Amin. + +00:04:38.479 --> 00:04:41.520 +A very pleasant Org markup. + +00:04:41.520 --> 00:04:44.960 +So that's quite nice. Put some bold around it. + +00:04:44.960 --> 00:04:46.433 +Not too difficult. + +00:04:46.433 --> 00:04:49.900 +Hopefully, this will be useful to other people as well. + +00:04:49.900 --> 00:04:52.240 +So what kind of feedback + +00:04:52.240 --> 00:04:55.233 +would Sacha expect to get? + +00:04:55.233 --> 00:04:59.120 +Maybe she would expect top-level remarks + +00:04:59.120 --> 00:05:00.833 +visible in the export. + +00:05:00.833 --> 00:05:04.400 +When she makes an HTML, she can see right there a big block. + +00:05:04.400 --> 00:05:09.533 +Right. Maybe Amin will suggest to Sacha, + +00:05:09.533 --> 00:05:11.120 +please replace this part + +00:05:11.120 --> 00:05:12.267 +with this other part + +00:05:12.267 --> 00:05:13.333 +or replace this word + +00:05:13.333 --> 00:05:14.639 +with this other word. + +00:05:14.639 --> 00:05:16.960 +This is not really possible + +00:05:16.960 --> 00:05:21.919 +with raw HTML or with even LaTeX. + +00:05:21.919 --> 00:05:24.000 +You'd have to have multiple arguments: + +00:05:24.000 --> 00:05:25.360 +the first argument, and then + +00:05:25.360 --> 00:05:28.800 +the replacement argument. It's a bit clunky. + +00:05:28.800 --> 00:05:32.080 +But with our setup, you just write some text, + +00:05:32.080 --> 00:05:34.367 +write #+replace_with + +00:05:34.367 --> 00:05:36.240 +and then write more text, and you're good to go. + +00:05:36.240 --> 00:05:39.440 +Normal Org markup. + +00:05:39.440 --> 00:05:40.720 +Everyone speaks different languages. + +00:05:40.720 --> 00:05:43.833 +Maybe they want to use one word, + +00:05:43.833 --> 00:05:45.919 +or they're arguing about + +00:05:45.919 --> 00:05:48.000 +whether we talk about frames or windows, + +00:05:48.000 --> 00:05:50.560 +so maybe they want to have some translations. + +00:05:50.560 --> 00:05:53.433 +So there are different kinds of feedback. + +00:05:53.433 --> 00:05:55.360 +Let's take an example. + +00:05:55.360 --> 00:05:59.360 +Look at what they are. + +00:05:59.360 --> 00:06:02.560 +For example, Sacha might write + +00:06:02.560 --> 00:06:06.160 +this Org Mode right here, + +00:06:06.160 --> 00:06:09.759 +and then in her HTML exports, you might see this, + +00:06:09.759 --> 00:06:12.733 +and her feedback might look really nicely + +00:06:12.733 --> 00:06:13.840 +from anyone who says + +00:06:14.560 --> 00:06:17.400 +let's do some Lisp instead of mathematics. + +00:06:17.400 --> 00:06:18.560 +Let's just do some Lisp. + +00:06:18.560 --> 00:06:22.479 +Corwin says, let's not be so silly. + +00:06:22.479 --> 00:06:25.120 +Let's just say 9 a.m. and move on. + +00:06:28.080 --> 00:06:31.360 +Amin likes to export to PDF, + +00:06:31.360 --> 00:06:34.333 +and so he writes his top-level remarks using LaTeX. + +00:06:34.333 --> 00:06:36.900 +That's how. To get this square + +00:06:36.900 --> 00:06:38.960 +Amin: please change whatever, + +00:06:38.960 --> 00:06:43.120 +he might write like this: #+latex:. + +00:06:43.120 --> 00:06:50.880 +But then Sacha only exports to HTML, for example, + +00:06:50.880 --> 00:06:54.880 +so she doesn't look at the PDF, + +00:06:54.880 --> 00:06:57.867 +and she may not see his top-level feedback + +00:06:57.867 --> 00:07:00.667 +with those nice brackets and and bold. + +00:07:00.667 --> 00:07:03.120 +She might think everything's good. + +00:07:03.120 --> 00:07:06.160 +That can be a bit disastrous. + +00:07:06.160 --> 00:07:08.600 +So maybe Sacha will then + +00:07:08.600 --> 00:07:13.199 +make some of her own feedback. + +00:07:13.199 --> 00:07:16.160 +To produce it, she might write + +00:07:16.560 --> 00:07:21.680 +HTML commands, #+html: to get that. + +00:07:21.680 --> 00:07:24.100 +But then Amin will make a PDF, + +00:07:24.100 --> 00:07:25.680 +and this won't stick out. + +00:07:25.680 --> 00:07:28.367 +So he might think everything's okay, + +00:07:28.367 --> 00:07:30.160 +even though it's not. + +00:07:30.160 --> 00:07:33.100 +Then Corwin actually decides, + +00:07:33.100 --> 00:07:35.900 +"Hey, let me read the exported result + +00:07:35.900 --> 00:07:38.867 +and there's all those feedback +from two people + +00:07:38.867 --> 00:07:42.633 +who haven't read anything, +because maybe they were in a rush, + +00:07:42.633 --> 00:07:45.167 +and didn't see the top-level feedback. + +00:07:45.167 --> 00:07:50.000 +So they agree. "Hey, let's have a +uniform Org interface that exports + +00:07:50.000 --> 00:07:52.567 +to both HTML and PDF. + +00:07:52.567 --> 00:07:54.080 +Make both of us happy." + +00:07:54.080 --> 00:07:58.160 +Okay. So they decide to use +Org special blocks. + +00:07:58.160 --> 00:08:01.300 +Right. To set this up, + +00:08:01.300 --> 00:08:04.400 +they need to read a little bit of Lisp, + +00:08:04.400 --> 00:08:08.879 +hooks, advice, macros to get all of this +set up, + +00:08:08.879 --> 00:08:12.319 +and then they'll use Org as the main +interface. + +00:08:12.319 --> 00:08:16.479 +It's a lot of work, but it's worth it, +right? maybe? + +00:08:16.479 --> 00:08:19.360 +But then Corwin's a bit terse. + +00:08:19.759 --> 00:08:24.333 +Corwin maybe doesn't want to +write using blocks. + +00:08:24.333 --> 00:08:26.080 +He thinks they're overkill. + +00:08:26.080 --> 00:08:32.560 +Sacha wants HTML, and Amin wants PDF, +and Corwin wants org-reveal. + +00:08:32.560 --> 00:08:35.533 +So now they have to reformat +all their code. + +00:08:35.533 --> 00:08:36.900 +And then they need to use org link types + +00:08:36.900 --> 00:08:38.867 +to reduce the overkill, + +00:08:38.867 --> 00:08:41.367 +so they can try to avoid duplication + +00:08:41.367 --> 00:08:46.800 +by factoring things out into +self-contained functions. + +00:08:46.800 --> 00:08:50.320 +But now, to set up our links, + +00:08:50.320 --> 00:08:55.467 +we'll have to learn a new interface, org +setup link. + +00:08:55.467 --> 00:09:02.160 +Learn a little bit about fonts, follow +links, export handlers... + +00:09:02.160 --> 00:09:05.040 +It's so much. That's so much. But then, + +00:09:05.040 --> 00:09:06.800 +the friends, they learn a lot. + +00:09:06.800 --> 00:09:08.399 +They learn about defun. + +00:09:08.399 --> 00:09:11.120 +So these words are red. + +00:09:11.120 --> 00:09:12.185 +You get a little explanation. + +00:09:12.185 --> 00:09:14.320 +I think it's a bit too small for anyone +to read. + +00:09:14.320 --> 00:09:18.000 +This is Lisp documentation for defun. + +00:09:18.000 --> 00:09:21.600 +advice-add. There's some Lisp +documentation. + +00:09:21.600 --> 00:09:23.600 +They learn about destructuring -let. + +00:09:23.600 --> 00:09:25.279 +This is from the dash library. + +00:09:25.279 --> 00:09:26.959 +Here's all that glorious, + +00:09:26.959 --> 00:09:28.800 +glorious documentation with examples. + +00:09:28.800 --> 00:09:30.300 +Sorry. I like that. + +00:09:30.300 --> 00:09:32.467 +They might make +an ad-hoc mechanism + +00:09:32.467 --> 00:09:35.400 +to simulate arguments for special blocks, + +00:09:35.400 --> 00:09:38.500 +so something maybe called +extract-arguments, + +00:09:38.500 --> 00:09:41.533 +and then, of course, to make +new link types, + +00:09:41.533 --> 00:09:42.480 +they have to learn about + +00:09:42.480 --> 00:09:47.400 +org-link-set-parameters and +its numerous bits and pieces. + +00:09:49.920 --> 00:09:53.600 +Let's close all these ones down. + +00:09:53.600 --> 00:09:55.800 +Of course they also need to be +comfortable + +00:09:55.800 --> 00:09:59.920 +with loops and maps and matching and +string functions. + +00:09:59.920 --> 00:10:02.560 +So it's a bit of a pain. + +00:10:03.360 --> 00:10:05.839 +It's probably not worth it. + +00:10:05.839 --> 00:10:07.767 +Maybe I'll just rush things quickly, + +00:10:07.767 --> 00:10:09.360 +or do it ad-hoc... + +00:10:10.320 --> 00:10:13.680 +We have things to do. + +00:10:13.680 --> 00:10:19.367 +But maybe the squad wants to have a +modular and unified interface + +00:10:19.367 --> 00:10:23.700 +so everyone's comfortable with defun to +define a function + +00:10:23.700 --> 00:10:29.440 +and they say, "It would be nice if we +could just define simultaneously + +00:10:29.440 --> 00:10:32.959 +both a block and the link type." + +00:10:32.959 --> 00:10:36.000 +That way, we have a single interface + +00:10:36.000 --> 00:10:37.867 +Org mode, for these things. + +00:10:37.867 --> 00:10:39.767 +It would be nice if it was modular. + +00:10:39.767 --> 00:10:44.633 +If I defined a one kind of block and +you defined another, + +00:10:44.633 --> 00:10:45.519 +we could compose them, + +00:10:45.519 --> 00:10:49.360 +then get a nice bigger block, like LEGO. + +00:10:49.360 --> 00:10:52.320 +That would be nice. Building blocks. + +00:10:52.320 --> 00:10:56.240 +This is what we have come up with, +called defblock. + +00:10:56.240 --> 00:11:01.760 +It also has a long documentation string +containing examples and things. + +00:11:01.760 --> 00:11:04.800 +So that way, it can try to be useful. + +00:11:04.800 --> 00:11:10.880 +Let's look at a solution to these +friends' trilemma. + +00:11:10.880 --> 00:11:14.320 +So here's a way to define a block. + +00:11:14.320 --> 00:11:22.320 +It doesn't look that difficult, but this +is how they can define a block + +00:11:22.320 --> 00:11:25.920 +for their top-level feedback. + +00:11:25.920 --> 00:11:28.959 +Let's look at the three main parts +together. + +00:11:28.959 --> 00:11:31.233 +It's not that difficult, I hope. + +00:11:31.233 --> 00:11:35.300 +Just six lines, and that's including a +documentation string, + +00:11:35.300 --> 00:11:37.633 +newlines and things. + +00:11:37.633 --> 00:11:43.300 +So in line 1, we define the block just +like you define a function. + +00:11:43.300 --> 00:11:44.880 +We define a block. + +00:11:44.880 --> 00:11:47.433 +The block name is going to be called +"feedback." + +00:11:47.433 --> 00:11:49.680 +It has an author, "who." + +00:11:49.680 --> 00:11:54.133 +The author has no default value. + +00:11:54.133 --> 00:11:57.760 +It has a color, and the color has a +default value of red. + +00:11:57.760 --> 00:12:01.680 +So just as when you define functions, + +00:12:01.680 --> 00:12:06.233 +you start by define or defblock, + +00:12:06.233 --> 00:12:13.440 +then the name, some mandatory argument, +and some optional arguments. + +00:12:13.440 --> 00:12:18.480 +Then the next stage is definition. +Documentation. + +00:12:18.480 --> 00:12:20.133 +The people who use this, + +00:12:20.133 --> 00:12:22.880 +which are future you or future me, + +00:12:22.880 --> 00:12:25.519 +might want to know what this is. + +00:12:25.519 --> 00:12:27.839 +So let's get to document this. + +00:12:27.839 --> 00:12:32.079 +For Corwin, who might want to use +tooltips... + +00:12:32.079 --> 00:12:37.120 +When Corwin writes feedback in Emacs, +they'll see a nice little tooltip, + +00:12:37.120 --> 00:12:38.639 +and the tooltip will have + +00:12:38.639 --> 00:12:41.279 +this documentation string. + +00:12:41.279 --> 00:12:43.279 +That'll be nice. + +00:12:43.279 --> 00:12:45.980 +And then here's the third part. + +00:12:45.980 --> 00:12:48.067 +The last three lines are not so +difficult. + +00:12:48.067 --> 00:12:52.800 +If the backend is HTML, + +00:12:52.800 --> 00:12:55.360 +please use this template string. + +00:12:55.360 --> 00:12:57.440 +Otherwise, use the other string. + +00:12:57.440 --> 00:13:01.279 +For each of these string markers, + +00:13:01.279 --> 00:13:04.959 +please put in the color, who wrote it, +and then the contents + +00:13:04.959 --> 00:13:07.279 +of the special block or the link type. + +00:13:08.160 --> 00:13:11.600 +So that's pretty neat. Not so difficult. + +00:13:11.600 --> 00:13:14.639 +I thought that was kind of cool, + +00:13:14.639 --> 00:13:16.600 +then noticed it's anaphoric. + +00:13:16.600 --> 00:13:21.033 +This defblock gives you two new names. + +00:13:21.033 --> 00:13:23.433 +It gives you a name called contents, + +00:13:23.433 --> 00:13:26.480 +and it gives you a name called backend. + +00:13:26.480 --> 00:13:29.733 +So even if you're writing a defblock + +00:13:29.733 --> 00:13:32.560 +and you intend it to be used +only for links... + +00:13:32.560 --> 00:13:35.440 +Like these colors, for example. + +00:13:35.440 --> 00:13:38.399 +These colors were defined using defblock. + +00:13:38.399 --> 00:13:41.279 +I used them as links right here. + +00:13:41.279 --> 00:13:43.360 +You don't need to worry + +00:13:43.360 --> 00:13:45.300 +where does the text come from +in the link. + +00:13:45.300 --> 00:13:48.959 +If I say "red:Bob," is it Bob? + +00:13:48.959 --> 00:13:52.000 +Or if I put a description, is it the +description? + +00:13:52.000 --> 00:13:54.000 +So it's whatever is available will + +00:13:54.000 --> 00:13:56.720 +become the value of contents. + +00:13:56.720 --> 00:13:59.199 +If you're really interested + +00:13:59.199 --> 00:14:02.433 +and you want to do some intricate stuff, + +00:14:02.433 --> 00:14:06.933 +defblock also gives you something called +raw-contents, + +00:14:06.933 --> 00:14:08.633 +if you really want to touch + +00:14:08.633 --> 00:14:12.639 +the raw contents with all of the Org +markups still there. + +00:14:12.639 --> 00:14:19.440 +Let's see how everyone can communicate +amongst themselves + +00:14:19.440 --> 00:14:22.480 +using this new interface. + +00:14:22.480 --> 00:14:26.000 +So, Sacha speculates and she... How does + +00:14:26.000 --> 00:14:28.399 +she speculate for her Org HTML? + +00:14:28.399 --> 00:14:33.733 +She might just write. Hey look at that, +no HTML, nice. + +00:14:34.800 --> 00:14:36.833 +Amin wants to have some green, + +00:14:36.833 --> 00:14:39.600 +and so he just says, hey here's some +color green. + +00:14:39.600 --> 00:14:42.959 +There you go. It looks almost the same. + +00:14:42.959 --> 00:14:48.267 +Notice that the main argument is right +here. + +00:14:48.267 --> 00:14:49.680 +defblock took an author, + +00:14:49.680 --> 00:14:51.333 +and here's the author again. + +00:14:51.333 --> 00:14:53.920 +And now the optional argument + +00:14:53.920 --> 00:14:57.007 +uses the org babel source interface + +00:14:57.007 --> 00:15:02.867 +You just say :, then a key, and then the +argument. Quite nice. + +00:15:02.867 --> 00:15:07.920 +Corwin doesn't want to use blocks. +It's a bit of an overkill. + +00:15:07.920 --> 00:15:12.959 +He can just write a link. + +00:15:12.959 --> 00:15:17.440 +So the main argument is now +the label of the link, + +00:15:17.440 --> 00:15:23.667 +and the description of the link is the +contents of the feedback. + +00:15:23.667 --> 00:15:25.680 +So that was quite nice. + +00:15:25.680 --> 00:15:29.360 +So it looks like everyone uses the same +interface on the left + +00:15:29.360 --> 00:15:32.800 +and can have varying outputs. + +00:15:32.800 --> 00:15:34.480 +I think it looks quite nice, + +00:15:34.480 --> 00:15:36.639 +and I hope you do too. + +00:15:36.639 --> 00:15:38.800 +There's a few more. + +00:15:38.800 --> 00:15:41.800 +Maybe, as you saw in some previous ones, + +00:15:41.800 --> 00:15:43.920 +we had text side beside side, + +00:15:43.920 --> 00:15:47.440 +or we folded some regions away. + +00:15:47.440 --> 00:15:50.959 +We put some things in pretty boxes. + +00:15:50.959 --> 00:15:57.120 +We had some spoilers at the very +beginning that we hid some text. + +00:15:57.120 --> 00:16:01.680 +We demoed some texts. Here's some Org +and here's what it looks like, + +00:16:01.680 --> 00:16:05.199 +and most importantly, they compose. + +00:16:05.199 --> 00:16:12.639 +There's a a macro called thread-block. + +00:16:12.639 --> 00:16:17.000 +thread-block call, and it lets you +thread the contents + +00:16:17.000 --> 00:16:18.000 +through a number of blocks, + +00:16:18.000 --> 00:16:20.639 +treating them as if they were functions. + +00:16:20.639 --> 00:16:22.480 +So, really, you can think of a block + +00:16:23.680 --> 00:16:25.567 +as a string-valued function. + +00:16:25.567 --> 00:16:28.533 +That's pretty neat, I think. + +00:16:28.533 --> 00:16:30.959 +Thank you for listening. + +00:16:31.759 --> 00:16:34.320 +I hope you've enjoyed this little + +00:16:34.880 --> 00:16:38.160 +happy fun time with the Emacs and +friends. + +00:16:38.160 --> 00:16:43.730 +I'll happily answer questions right now. + +00:16:45.360 --> 00:16:49.467 +Someone says: "Why did you put +optional arguments + +00:16:49.467 --> 00:16:50.480 +in a separate list + +00:16:50.480 --> 00:16:54.560 +rather than using cl-style argument +lists?" + +00:16:54.560 --> 00:16:58.399 +So that's a very good question, + +00:16:58.399 --> 00:17:00.000 +and I will answer that + +00:17:00.000 --> 00:17:05.467 +by showing you a more involved +definition of feedback. + +00:17:05.467 --> 00:17:14.567 +Let's look at a more involved one right +here. + +00:17:14.567 --> 00:17:19.280 +So, for example, this one is +called rremark. + +00:17:19.280 --> 00:17:23.439 +Please let me know if my text is not +sufficiently big. + +00:17:23.439 --> 00:17:28.033 +Here is why we have two arguments. + +00:17:28.033 --> 00:17:30.720 +That takes two arguments instead of one + +00:17:30.720 --> 00:17:33.360 +for its argument list. + +00:17:33.360 --> 00:17:34.799 +You have def block, + +00:17:34.799 --> 00:17:36.000 +then you have the name, + +00:17:36.000 --> 00:17:40.467 +then you have the first argument list + +00:17:40.467 --> 00:17:42.880 +and the second argument list. + +00:17:42.880 --> 00:17:46.080 +The first argument list + +00:17:46.080 --> 00:17:49.280 +takes the text right after the begin. + +00:17:49.280 --> 00:17:53.000 +The text right after the begin is the +main argument. + +00:17:53.000 --> 00:17:59.200 +And then the remaining key-value pairs +are in the second argument list. + +00:18:00.320 --> 00:18:03.280 +Now the reason we have two is because + +00:18:03.280 --> 00:18:08.880 +in order to streamline the interface to +account for both special blocks + +00:18:08.880 --> 00:18:13.360 +and Org link types, what we do is we say, + +00:18:13.360 --> 00:18:18.000 +in the first argument list, you can give +a name to the first argument, + +00:18:18.000 --> 00:18:19.633 +give it a default value, + +00:18:19.633 --> 00:18:28.800 +and anything else you provide will +become part of the link information. + +00:18:28.800 --> 00:18:30.861 +For example, this link, + +00:18:30.861 --> 00:18:32.833 +we decided to make its face +angry red. + +00:18:32.833 --> 00:18:36.433 +You might want to give other +features to links. + +00:18:36.433 --> 00:18:39.100 +So we're trying to streamline +the interface + +00:18:39.100 --> 00:18:41.733 +for both special blocks and +Org link types, + +00:18:41.733 --> 00:18:46.240 +and we thought this way was quite nice. + +00:18:46.240 --> 00:18:47.500 +That was the main reason. + +00:18:47.500 --> 00:18:52.480 +Someone asks-- + +00:18:52.480 --> 00:18:55.039 +if you have follow-ups, please ask-- + +00:18:55.039 --> 00:18:57.600 +Someone asks, "Do you intend to try to + +00:18:57.600 --> 00:19:00.559 +upstream this amazing work into Org?" + +00:19:00.559 --> 00:19:02.300 +Well, I'm glad you like it. + +00:19:02.300 --> 00:19:04.559 +I don't know how to upstream, + +00:19:04.559 --> 00:19:06.400 +but I will look into it, + +00:19:06.400 --> 00:19:09.833 +and any advice or guidance +would be much appreciated. + +00:19:11.840 --> 00:19:15.267 +Lisp is awesome. Just as +defun is a macro, + +00:19:15.267 --> 00:19:17.120 +defblock is a macro, and then + +00:19:17.120 --> 00:19:20.240 +source blocks are awesome. + +00:19:20.240 --> 00:19:22.467 +Now maybe we can have arguments in +special blocks, + +00:19:22.467 --> 00:19:28.799 +and motivate and encourage more +people to learn Lisp. + +00:19:28.799 --> 00:19:32.559 +So another person asks, + +00:19:32.559 --> 00:19:35.280 +"What is used to produce colorful + +00:19:35.280 --> 00:19:38.559 +boxes around the cursor?" + +00:19:38.559 --> 00:19:40.400 +I'm not quite sure if you're asking... + +00:19:40.400 --> 00:19:42.559 +Are you talking about my cursor +right here, + +00:19:42.559 --> 00:19:48.400 +or are you talking about in the slide? + +00:19:48.400 --> 00:19:53.767 +So this cursor is some application +called Streambrush, + +00:19:53.767 --> 00:19:55.440 +that I had to purchase. + +00:19:55.440 --> 00:19:59.039 +Unfortunately, I could not find a a +suitable free one. + +00:19:59.039 --> 00:20:03.067 +The blocks... I can demonstrate some +Emacs Lisp. + +00:20:03.067 --> 00:20:04.467 +I can open up my Emacs, if people like, + +00:20:04.467 --> 00:20:06.320 +and we can try some things out. + +00:20:06.320 --> 00:20:09.440 +Happy to do that. + +00:20:09.440 --> 00:20:10.133 +You're welcome. + +00:20:10.133 --> 00:20:15.520 +Someone asks a side question about +org-reveal: "How do you get + +00:20:15.520 --> 00:20:17.440 +bespoke or multiple-column layouts + +00:20:17.440 --> 00:20:19.120 +without using HTML?" + +00:20:19.120 --> 00:20:22.559 +Excellent question. That's what we do. + +00:20:22.559 --> 00:20:25.533 +That's what this project is about. + +00:20:25.533 --> 00:20:27.000 +So it's not org-reveal, + +00:20:27.000 --> 00:20:30.267 +it's our fancy parallel block. + +00:20:30.267 --> 00:20:33.440 +So we have this thing. You say, +#+begin_parallel. + +00:20:33.440 --> 00:20:35.679 +You say how many columns you would like. + +00:20:35.679 --> 00:20:37.967 +Do you want a bar or not? + +00:20:37.967 --> 00:20:39.679 +And then you write some text, + +00:20:39.679 --> 00:20:44.400 +and then you get some text, and +according with the bar or not. + +00:20:44.400 --> 00:20:47.520 +That's how we achieve that in our slides. + +00:20:47.520 --> 00:20:52.880 +I'm not quite sure where this was. + +00:20:52.880 --> 00:20:59.520 +Somewhere here, I think. + +00:20:59.520 --> 00:21:06.240 +Let me try to find this for you. + +00:21:06.240 --> 00:21:10.433 +I can't seem to find where the parallel +blocks were. Apologies. + +00:21:10.433 --> 00:21:15.039 +Let's move on to the next question, +I suppose. + +00:21:15.039 --> 00:21:18.400 +I'm pretty sure they're here. Ah, there +they are. + +00:21:18.400 --> 00:21:22.640 +So these were just instances of using + +00:21:22.640 --> 00:21:26.480 +the parallel block, and it makes things +parallel. + +00:21:26.480 --> 00:21:27.633 +So that's quite nice. + +00:21:27.633 --> 00:21:33.360 +Another person asks, + +00:21:33.360 --> 00:21:37.840 +"How does this relate to pandoc, + +00:21:37.840 --> 00:21:40.960 +which is used for converting between +markup formats?" + +00:21:40.960 --> 00:21:43.919 +So all we're doing is we're saying, + +00:21:43.919 --> 00:21:47.679 +hey, please write Org because Org is +just fantastic, + +00:21:47.679 --> 00:21:49.267 +and we love it, and it's the dream, + +00:21:49.267 --> 00:21:51.760 +and if you would like to view things + +00:21:51.760 --> 00:21:55.900 +in HTML, or in org-reveal, or in PDF, + +00:21:55.900 --> 00:21:58.559 +that's up to the user. + +00:22:02.320 --> 00:22:06.080 +Made it too small now. +So here is an example. + +00:22:06.080 --> 00:22:10.240 +Here's how parallel is implemented, + +00:22:10.240 --> 00:22:14.320 +just as a quick example, not too long. + +00:22:14.320 --> 00:22:17.800 +About half of the implementation is +documentation, + +00:22:17.800 --> 00:22:22.720 +so, hopefully, that speaks for for how +useful this feature is. + +00:22:22.720 --> 00:22:25.280 +We decide if there's a rule or not. + +00:22:25.280 --> 00:22:28.080 +We look for the column break. + +00:22:28.080 --> 00:22:30.600 +Here we're looking at the backend. + +00:22:30.600 --> 00:22:31.840 +If the backend is LaTeX, + +00:22:31.840 --> 00:22:34.133 +please use this incantation + +00:22:34.133 --> 00:22:37.679 +with multicolumns, minipages, +what have you. + +00:22:37.679 --> 00:22:41.600 +If the backend is something else, please +do this: + +00:22:41.600 --> 00:22:48.080 +div, style and other gibberish that we +don't really want to look at. + +00:22:48.080 --> 00:22:51.760 +Pandoc works from Org, + +00:22:51.760 --> 00:22:53.633 +so it might not work directly, + +00:22:53.633 --> 00:22:59.679 +since our interface... The way we set it +up is: when you try to export, + +00:22:59.679 --> 00:23:03.039 +we hook in and we do a bunch of +pre-processing, + +00:23:03.039 --> 00:23:07.440 +so this defblock is a +string-valued function. + +00:23:07.440 --> 00:23:13.919 +Whenever we see these #+begin_parallel +when you do an export, + +00:23:13.919 --> 00:23:17.767 +I tell Emacs, hold up, look for those +#+begin_parallels, please. + +00:23:17.767 --> 00:23:20.320 +Oh, you found them? Grab that text. + +00:23:20.320 --> 00:23:21.533 +You grabbed it. Great. + +00:23:21.533 --> 00:23:24.080 +Now please apply this person's function + +00:23:24.080 --> 00:23:27.120 +onto that text, and splice in the result. + +00:23:27.120 --> 00:23:30.400 +So when you export, we're performing + +00:23:30.400 --> 00:23:35.120 +arbitrary computations on your text. + +00:23:35.120 --> 00:23:39.633 +Some people might not find that +comforting, + +00:23:39.633 --> 00:23:43.039 +to have arbitrary computations happening. + +00:23:43.039 --> 00:23:45.039 +In this article, there's a few where + +00:23:45.039 --> 00:23:47.167 +we change your text upon export. + +00:23:47.167 --> 00:23:51.760 +We translate it, we do other things +to it. + +00:23:51.760 --> 00:23:56.500 +So someone says, "If you export to +LaTeX, to PDF, + +00:23:56.500 --> 00:23:58.640 +does that work well with Beamer as well + +00:23:58.640 --> 00:24:00.320 +to create slides with columns?" + +00:24:05.200 --> 00:24:08.000 +I made a bunch of these changes + +00:24:08.000 --> 00:24:09.200 +earlier this morning, + +00:24:09.200 --> 00:24:12.320 +and it just says LaTeX right here. + +00:24:12.320 --> 00:24:14.400 +So if you want to go to beamer, + +00:24:14.400 --> 00:24:15.360 +I think the back end for me, + +00:24:15.360 --> 00:24:17.333 +beamer is called, well, beamer, + +00:24:17.333 --> 00:24:22.000 +so instead of a pcase, what we would do +is, we would say, + +00:24:22.000 --> 00:24:27.167 +if it's a 'latex or it's a 'beamer, then +use this. + +00:24:27.167 --> 00:24:30.267 +Otherwise, it's not a LaTeX, + +00:24:30.267 --> 00:24:31.867 +it will simply default to this one, + +00:24:31.867 --> 00:24:34.433 +which could be dangerous +for your needs. + +00:24:34.433 --> 00:24:39.167 +I think it's a bad practice to put a +underscore, + +00:24:39.167 --> 00:24:40.767 +but I did it really quickly + +00:24:40.767 --> 00:24:44.500 +because I just wanted to show you that +it works fine in org-reveal + +00:24:44.500 --> 00:24:47.440 +Contributions are more than welcome. + +00:24:47.440 --> 00:24:52.240 +I happily would love any assistance. + +00:24:52.240 --> 00:24:58.633 +We have a Lisp reference +cheat sheet here + +00:24:58.633 --> 00:25:01.000 +to learn a little bit about Lisp, if +you're not comfortable, + +00:25:01.000 --> 00:25:03.267 +or to ask some questions. + +00:25:03.267 --> 00:25:06.400 +Lots of helpful people. + +00:25:06.400 --> 00:25:09.440 +So there's another question that says, + +00:25:09.440 --> 00:25:13.120 +"Does typing in a block mess up with +syntax highlighting? + +00:25:13.120 --> 00:25:15.679 +Usually, you use a single color inside an + +00:25:15.679 --> 00:25:17.279 +example block, for example. + +00:25:17.279 --> 00:25:21.279 +Ah, you found my crutch. + +00:25:25.279 --> 00:25:27.333 +Emacs is all encompassing, + +00:25:27.333 --> 00:25:29.760 +and I'm not quite sure how fonts work. + +00:25:29.760 --> 00:25:32.559 +I learned enough to get by. + +00:25:37.440 --> 00:25:38.667 +Here's how links work. + +00:25:38.667 --> 00:25:40.799 +They're a bit complicated. + +00:25:40.799 --> 00:25:42.567 +This is a bit scary. + +00:25:42.567 --> 00:25:47.039 +I don't recommend anyone read it. + +00:25:47.039 --> 00:25:49.840 +Actually, let me open up an email + +00:25:50.559 --> 00:25:52.100 +and you can see what I see. + +00:25:52.100 --> 00:25:54.799 +So here's an Emacs. + +00:25:54.799 --> 00:25:56.799 +Let's make that a bit bigger. + +00:25:56.799 --> 00:25:59.133 +Let's change this slightly. + +00:25:59.133 --> 00:26:01.200 +Nope, that's worse. There you go. + +00:26:01.919 --> 00:26:09.360 +Here's some words. Here's red hello. + +00:26:09.360 --> 00:26:15.679 +But you're worried about preserving +fontification. + +00:26:15.679 --> 00:26:18.480 +Let's make an emacs-lisp block. + +00:26:18.880 --> 00:26:22.840 +Let's say, (+ 1 2). + +00:26:22.840 --> 00:26:31.133 +Ah, where's the fun? Hello. Bye. + +00:26:31.133 --> 00:26:32.080 +Okay. Where's the coloring? + +00:26:32.080 --> 00:26:36.000 +If we zoom in on this #+begin_src block, + +00:26:36.000 --> 00:26:39.200 +you can see down here + +00:26:39.200 --> 00:26:42.159 +we have our our coloring + +00:26:42.159 --> 00:26:43.279 +when we zoom in. + +00:26:43.279 --> 00:26:46.960 +If we zoom out, no coloring. + +00:26:46.960 --> 00:26:50.880 +Zoom in, coloring. +Zoom out, aah, no coloring. + +00:26:50.880 --> 00:26:55.679 +Let's take off these bad boys, +and oh, look, my coloring's back. + +00:26:55.679 --> 00:27:03.760 +In a previous iteration of the system, +I was able to maintain coloring. + +00:27:03.760 --> 00:27:06.400 +In this new iteration, I am not. + +00:27:06.400 --> 00:27:07.400 +I don't know how to do it. + +00:27:07.400 --> 00:27:10.333 +I haven't had the time to implement it. + +00:27:10.333 --> 00:27:17.279 +I spent a lot of time writing this +48-page documentation + +00:27:17.279 --> 00:27:21.133 +with some fun examples to try to help +people learn. + +00:27:21.133 --> 00:27:23.200 +But I would appreciate any help or +guidance + +00:27:23.200 --> 00:27:26.240 +on how to maintain the fontification. + +00:27:26.240 --> 00:27:29.200 +I really would like to keep those +colors in. + +00:27:29.200 --> 00:27:32.640 +[Amin]: Musa, we have time for maybe one +more question, + +00:27:32.640 --> 00:27:34.500 +one or two more questions, + +00:27:34.500 --> 00:27:37.039 +and then we have to move on to the +next talk. + +00:27:37.039 --> 00:27:39.120 +You're more than welcome to + +00:27:39.120 --> 00:27:42.559 +continue taking the questions via +IRC or the pad. + +00:27:42.559 --> 00:27:45.760 +[Musa]: Okay. Thank you. + +00:27:45.760 --> 00:27:48.880 +The final question we'll take is, + +00:27:48.880 --> 00:27:52.320 +"Should packages implement + +00:27:52.320 --> 00:27:53.967 +interface to one specific format, + +00:27:53.967 --> 00:27:55.600 +or attempt to be inclusive + +00:27:55.600 --> 00:27:57.279 +to all the potential output targets?" + +00:27:57.279 --> 00:27:59.300 +I think you should just make them +as you go, + +00:27:59.300 --> 00:28:01.500 +and add them as you need them. + +00:28:01.500 --> 00:28:05.600 +We'll make Github requests for things. + +00:28:05.600 --> 00:28:08.533 +We can share recipes in this document, + +00:28:08.533 --> 00:28:12.333 +and then try to add other techniques, + +00:28:12.333 --> 00:28:19.200 +and then we can use these blocks as a +common interface + +00:28:19.200 --> 00:28:22.240 +for exporting to PDF and other things. + +00:28:22.240 --> 00:28:26.000 +Since someone asked, + +00:28:26.000 --> 00:28:28.033 +here what a PDF looks like. + +00:28:28.033 --> 00:28:31.667 +This is the same PDF rendered. + +00:28:31.667 --> 00:28:34.960 +I made no effort to make it look good, + +00:28:34.960 --> 00:28:37.840 +but it surprisingly does look good. + +00:28:38.559 --> 00:28:40.067 +That was nice. + +00:28:40.067 --> 00:28:44.320 +That was a terrible magenta, +but that is life. + +00:28:44.320 --> 00:28:47.100 +Anyhow, I hope you all enjoyed this talk. + +00:28:47.100 --> 00:28:51.033 +I hope you will find +defblock useful to you. + +00:28:51.033 --> 00:28:52.799 +It is available on MELPA. + +00:28:52.799 --> 00:28:56.367 +In a rush to make it available for +EmacsConf 2020, + +00:28:56.367 --> 00:29:00.159 +some MELPA guidelines may not have been +adhered to. + +00:29:00.159 --> 00:29:01.600 +Please do not hit me. + +00:29:01.600 --> 00:29:08.559 +I hope everyone enjoys the rest of the +EmacsConf 2020. Thank you! -- cgit v1.2.3