0:00:01.680,0:00:07.359 oh you are now muted 0:00:04.080,0:00:09.840 all right then well uh hello everyone 0:00:07.359,0:00:11.519 I hope uh you're all enjoying the Emacs 0:00:09.840,0:00:14.480 conf 0:00:11.519,0:00:15.040 my name is musa alhassi and I hope 0:00:14.480,0:00:17.920 you're 0:00:15.040,0:00:19.840 excited to learn about uh powering up 0:00:17.920,0:00:22.880 special blocks 0:00:19.840,0:00:24.800 um so let's let's first off uh find out 0:00:22.880,0:00:27.920 what these special blocks are and 0:00:24.800,0:00:30.240 and see what we can uh go from so 0:00:27.920,0:00:32.719 uh yesterday I saw a lot of cool talks 0:00:30.240,0:00:33.200 and uh people were chatting about how do 0:00:32.719,0:00:35.520 you 0:00:33.200,0:00:37.200 I know how should you present should you 0:00:35.520,0:00:38.640 do it this way or that way and 0:00:37.200,0:00:41.120 I thought maybe I should try a different 0:00:38.640,0:00:42.239 way uh but but I'm talking about special 0:00:41.120,0:00:45.039 blocks and if I 0:00:42.239,0:00:47.039 show you an emax then I have to export 0:00:45.039,0:00:47.840 the html so you can see what it looks 0:00:47.039,0:00:50.800 like 0:00:47.840,0:00:51.920 or export to a pdf so you can see what 0:00:50.800,0:00:54.239 it looks like 0:00:51.920,0:00:56.399 uh so I ended up writing an org reveal 0:00:54.239,0:00:58.960 and 0:00:56.399,0:01:00.879 joyously this this just works you can 0:00:58.960,0:01:02.960 you can just see things here 0:01:00.879,0:01:04.559 uh I was worried that I'd have to take 0:01:02.960,0:01:07.600 pictures and then you know 0:01:04.559,0:01:09.760 uh uh you know insert pings so that that 0:01:07.600,0:01:12.159 was a delight 0:01:09.760,0:01:12.960 okay uh so special blocks are these 0:01:12.159,0:01:16.000 things like 0:01:12.960,0:01:17.280 a center small quote uh that's what a 0:01:16.000,0:01:19.360 special block is 0:01:17.280,0:01:20.720 and with a bit of lisp we can we can 0:01:19.360,0:01:23.200 make special blocks 0:01:20.720,0:01:24.799 and link types right so uh using a 0:01:23.200,0:01:26.720 single interface 0:01:24.799,0:01:27.840 um and the interface is going to be 0:01:26.720,0:01:29.439 similar to one 0:01:27.840,0:01:32.560 many people are familiar with in 0:01:29.439,0:01:35.840 particular org babel's 0:01:32.560,0:01:37.840 source interface as well as using global 0:01:35.840,0:01:39.680 header arguments for link types 0:01:37.840,0:01:41.200 and the idea is to write it once and 0:01:39.680,0:01:44.159 generate many different kinds 0:01:41.200,0:01:44.720 right you write uh an org markup and you 0:01:44.159,0:01:47.680 can have 0:01:44.720,0:01:48.560 uh html you can have pdf and and 0:01:47.680,0:01:51.840 joyously 0:01:48.560,0:01:53.600 uh org reveal so that was uh that was an 0:01:51.840,0:01:56.640 unexpected delight 0:01:53.600,0:01:57.840 um so here is a few that you'll you'll 0:01:56.640,0:02:01.759 just see as we 0:01:57.840,0:02:04.000 uh in this presentation you know some uh 0:02:01.759,0:02:05.040 uh I won't show some of these uh link 0:02:04.000,0:02:06.799 only ones 0:02:05.040,0:02:08.080 but we'll see a few of these other ones 0:02:06.799,0:02:09.920 just to make the uh 0:02:08.080,0:02:11.520 presentation look nice so the 0:02:09.920,0:02:14.000 presentation is really going to 0:02:11.520,0:02:15.120 present these blocks and the mechanism 0:02:14.000,0:02:18.400 at the same time 0:02:15.120,0:02:21.280 so uh so this no no html was written 0:02:18.400,0:02:22.000 look ma no html just pure org mode and 0:02:21.280,0:02:23.520 and 0:02:22.000,0:02:25.840 you get all these beautiful boxes and 0:02:23.520,0:02:27.680 things okay 0:02:25.840,0:02:29.120 so the motivation for this is you know 0:02:27.680,0:02:31.200 what uh 0:02:29.120,0:02:32.239 you're you're online you run into a blog 0:02:31.200,0:02:33.120 and you see something you like and 0:02:32.239,0:02:35.280 you're like man 0:02:33.120,0:02:36.640 you know I wish I could uh you know 0:02:35.280,0:02:39.519 produce that 0:02:36.640,0:02:40.160 um uh but you you check in the author 0:02:39.519,0:02:44.239 wrote raw 0:02:40.160,0:02:46.800 html you know plus html everywhere 0:02:44.239,0:02:47.840 and uh that's that's you know gonna 0:02:46.800,0:02:49.680 obscure 0:02:47.840,0:02:51.200 your your real content it's going to be 0:02:49.680,0:02:54.239 surrounded by all this uh 0:02:51.200,0:02:56.400 styling information that's unfortunate 0:02:54.239,0:02:58.959 uh the author decides to use an org 0:02:56.400,0:03:01.120 macro all right a bit better 0:02:58.959,0:03:03.360 but then what if you decide hey I want 0:03:01.120,0:03:06.000 to make a 0:03:03.360,0:03:07.840 not pdf great and then the worst of all 0:03:06.000,0:03:10.159 the author doesn't give you the source 0:03:07.840,0:03:10.879 and then you have to view page source 0:03:10.159,0:03:13.760 and 0:03:10.879,0:03:14.239 learn cascading style sheets and and you 0:03:13.760,0:03:16.159 know 0:03:14.239,0:03:18.080 sit in a corner and cry decide to do 0:03:16.159,0:03:20.959 other things with your life 0:03:18.080,0:03:22.640 so uh we want to give you org users 0:03:20.959,0:03:26.000 numerous styles 0:03:22.640,0:03:27.200 and uh and an extensible mechanism to 0:03:26.000,0:03:28.799 add more of these 0:03:27.200,0:03:31.200 aesthetically pleasing styles you know 0:03:28.799,0:03:34.720 to have really nice things 0:03:31.200,0:03:35.599 look one way in the html and look almost 0:03:34.720,0:03:39.120 the same way 0:03:35.599,0:03:41.680 in the pdf and other uh back ends and 0:03:39.120,0:03:42.159 if by having these newer ones you know 0:03:41.680,0:03:44.879 people 0:03:42.159,0:03:45.519 might be encouraged to try making new 0:03:44.879,0:03:47.920 ones 0:03:45.519,0:03:49.040 especially when the interface is uh not 0:03:47.920,0:03:54.080 so difficult 0:03:49.040,0:03:54.080 uh that's the that's the aim okay 0:03:54.159,0:03:59.120 uh so let's let's have a a real story to 0:03:57.360,0:04:02.319 motivate this even more 0:03:59.120,0:04:03.599 um so here's three friends uh I hope I 0:04:02.319,0:04:04.640 don't butcher their names but these 0:04:03.599,0:04:07.040 friends are called 0:04:04.640,0:04:08.720 amin sasha and corwin and then they're 0:04:07.040,0:04:12.080 organizing a conference 0:04:08.720,0:04:14.239 uh EmacsConf 2020. 0:04:12.080,0:04:16.479 so sasha decides to write an org file 0:04:14.239,0:04:19.199 and and she would like some feedback 0:04:16.479,0:04:19.840 okay and and just uh make it clear 0:04:19.199,0:04:22.960 there's no 0:04:19.840,0:04:27.199 uh just how easy this looks 0:04:22.960,0:04:27.199 let's look at the source for this block 0:04:27.280,0:04:30.720 notice it's just the word green then a 0:04:30.000,0:04:34.560 colon 0:04:30.720,0:04:37.759 than amine uh so no 0:04:34.560,0:04:38.479 no div style coloring just just you know 0:04:37.759,0:04:41.520 green color 0:04:38.479,0:04:43.600 immune a very pleasant uh or markup 0:04:41.520,0:04:44.960 so that's that's quite nice put some 0:04:43.600,0:04:47.840 bold around it 0:04:44.960,0:04:49.040 not not too difficult so hopefully uh 0:04:47.840,0:04:51.680 this will be useful to 0:04:49.040,0:04:52.240 other people as well so what kind of 0:04:51.680,0:04:56.639 feedback 0:04:52.240,0:04:59.120 uh would sasha expect to get um so maybe 0:04:56.639,0:04:59.680 she would expect top level remarks 0:04:59.120,0:05:01.759 visible 0:04:59.680,0:05:04.400 in the export you know when she makes an 0:05:01.759,0:05:07.840 html she can see right there a big block 0:05:04.400,0:05:09.840 right maybe 0:05:07.840,0:05:11.120 amin will suggest to sasha please 0:05:09.840,0:05:12.960 replace this part 0:05:11.120,0:05:14.639 with this other part or replace this 0:05:12.960,0:05:16.960 word with this other word 0:05:14.639,0:05:17.680 right um this is not really possible 0:05:16.960,0:05:21.919 with raw 0:05:17.680,0:05:24.000 html or uh yeah or with even latex 0:05:21.919,0:05:25.360 you'd have to have multiple arguments 0:05:24.000,0:05:27.840 the first argument and then 0:05:25.360,0:05:28.800 the replacement argument and it's a bit 0:05:27.840,0:05:30.960 clunky 0:05:28.800,0:05:32.080 um but with our setup you just write 0:05:30.960,0:05:34.479 some text 0:05:32.080,0:05:36.240 write hashtag plus replace with and then 0:05:34.479,0:05:39.440 write more text and you're good to go 0:05:36.240,0:05:40.720 normal uh org markup um 0:05:39.440,0:05:42.479 everyone speaks different languages 0:05:40.720,0:05:45.919 maybe they want to use a 0:05:42.479,0:05:48.000 uh one word or they're arguing about 0:05:45.919,0:05:49.759 whether we talk about frames or windows 0:05:48.000,0:05:50.560 um so maybe they want to have some 0:05:49.759,0:05:52.479 translations 0:05:50.560,0:05:55.360 right so there's different kinds of 0:05:52.479,0:05:59.360 feedbacks uh let's let's take an example 0:05:55.360,0:06:02.560 uh look at what they are okay 0:05:59.360,0:06:06.160 uh so for example sasha might write 0:06:02.560,0:06:08.319 uh this org mode right here and uh 0:06:06.160,0:06:09.759 and then in her html exports you might 0:06:08.319,0:06:12.080 see this 0:06:09.759,0:06:13.840 and uh her feedback might look really 0:06:12.080,0:06:14.560 nicely from anyone who says you know 0:06:13.840,0:06:16.639 let's uh 0:06:14.560,0:06:18.560 let's do some lisp instead of uh 0:06:16.639,0:06:20.960 mathematics let's just do some list 0:06:18.560,0:06:22.479 and and corwin says you know let's let's 0:06:20.960,0:06:25.120 not be so silly 0:06:22.479,0:06:27.360 maybe let's just say 9 a.m and move on 0:06:25.120,0:06:27.360 okay 0:06:28.080,0:06:33.039 um so amin likes to export to pdf 0:06:31.360,0:06:34.720 and so he writes his top-level remarks 0:06:33.039,0:06:37.600 using latex that's how 0:06:34.720,0:06:38.960 so to get this uh square I mean please 0:06:37.600,0:06:41.440 change whatever 0:06:38.960,0:06:43.120 he might write like this hashtag you 0:06:41.440,0:06:46.960 know plus latex 0:06:43.120,0:06:50.000 hashtag plus latex right but then 0:06:46.960,0:06:50.880 sasha only exports to p to html uh for 0:06:50.000,0:06:54.880 example 0:06:50.880,0:06:57.199 um and uh so she doesn't look at the pdf 0:06:54.880,0:06:58.560 and she may not see his top-level 0:06:57.199,0:06:59.440 feedback you know with those nice 0:06:58.560,0:07:02.160 brackets and 0:06:59.440,0:07:03.120 and bold right and so she might think 0:07:02.160,0:07:06.160 everything's good 0:07:03.120,0:07:09.039 right and that can be a bit disastrous 0:07:06.160,0:07:09.440 um so maybe sasha will will then uh make 0:07:09.039,0:07:13.199 some 0:07:09.440,0:07:16.160 of her own feedback all right uh but 0:07:13.199,0:07:16.560 and to produce it she might write html 0:07:16.160,0:07:20.639 uh 0:07:16.560,0:07:21.680 um html commands hashtag plus html to 0:07:20.639,0:07:24.240 get that 0:07:21.680,0:07:25.680 uh but then amin will make a pdf and 0:07:24.240,0:07:27.759 this won't stick out 0:07:25.680,0:07:30.160 and then so he might think everything's 0:07:27.759,0:07:33.520 okay even even though it's not 0:07:30.160,0:07:36.240 um then corwin actually decides hey 0:07:33.520,0:07:36.800 uh let me read the exported result and 0:07:36.240,0:07:38.319 these 0:07:36.800,0:07:39.919 there's all those feedback from two 0:07:38.319,0:07:42.080 people who haven't uh 0:07:39.919,0:07:43.840 read anything because maybe they were in 0:07:42.080,0:07:46.400 a russian and didn't 0:07:43.840,0:07:48.160 see the top level feedback and so they 0:07:46.400,0:07:50.000 agree hey let's have a uniform org 0:07:48.160,0:07:53.280 interface that exports 0:07:50.000,0:07:54.080 to both html and pdf make both of us 0:07:53.280,0:07:57.280 happy 0:07:54.080,0:07:58.160 okay so they decide to use org special 0:07:57.280,0:08:01.840 blocks 0:07:58.160,0:08:04.400 right um and to set this up they need to 0:08:01.840,0:08:04.879 you know maybe read a little bit of lisp 0:08:04.400,0:08:08.879 hooks 0:08:04.879,0:08:10.840 advice macros to get all of this set up 0:08:08.879,0:08:12.319 and then they'll use org as the main 0:08:10.840,0:08:14.400 interface okay 0:08:12.319,0:08:16.479 it's a lot of work but it's worth it 0:08:14.400,0:08:19.360 right maybe 0:08:16.479,0:08:19.759 um but then corwin corbin's a bit tears 0:08:19.360,0:08:22.960 so 0:08:19.759,0:08:24.800 uh corwin maybe doesn't want to write 0:08:22.960,0:08:26.080 uh using blocks he thinks they're 0:08:24.800,0:08:29.360 overkill and 0:08:26.080,0:08:31.840 and sasha wants html and uh and 0:08:29.360,0:08:32.560 I mean wants pdf and corwin wants org 0:08:31.840,0:08:34.240 reveal 0:08:32.560,0:08:36.320 so now they have to reformat all their 0:08:34.240,0:08:37.120 code and then they need to use org link 0:08:36.320,0:08:39.599 types to 0:08:37.120,0:08:41.519 reduce the overkill all right so they 0:08:39.599,0:08:44.000 can try to avoid duplication by 0:08:41.519,0:08:46.800 factoring things out into self-contained 0:08:44.000,0:08:50.320 uh defined functions or defunds 0:08:46.800,0:08:53.440 um but now to set up or links 0:08:50.320,0:08:54.399 uh we'll have uh to learn a new 0:08:53.440,0:08:57.040 interface 0:08:54.399,0:08:58.000 org setup link um learn a little bit 0:08:57.040,0:09:02.160 about fonts 0:08:58.000,0:09:05.040 follow links exports handles 0:09:02.160,0:09:06.800 it's so much that's so much but but then 0:09:05.040,0:09:08.399 you know the friends they learn a lot 0:09:06.800,0:09:11.120 you know they learn about defund all 0:09:08.399,0:09:12.480 right so these these words are red 0:09:11.120,0:09:14.320 you get a little explanation I think 0:09:12.480,0:09:16.720 it's a bit too small for anyone to read 0:09:14.320,0:09:18.000 this is lisp documentation right for 0:09:16.720,0:09:19.680 defund 0:09:18.000,0:09:21.600 advice ad there's some list 0:09:19.680,0:09:23.600 documentation right 0:09:21.600,0:09:25.279 they learn about destructuring let's so 0:09:23.600,0:09:26.959 this is from the dash library 0:09:25.279,0:09:28.800 here's all that you know glorious 0:09:26.959,0:09:29.360 glorious documentation with examples 0:09:28.800,0:09:31.680 sorry 0:09:29.360,0:09:33.760 I like that they might make an ad-hoc 0:09:31.680,0:09:36.000 mechanism to simulate 0:09:33.760,0:09:37.040 arguments for special blocks so 0:09:36.000,0:09:40.399 something maybe called 0:09:37.040,0:09:41.920 extract arguments and then of course to 0:09:40.399,0:09:42.480 make new link types they have to learn 0:09:41.920,0:09:45.120 about 0:09:42.480,0:09:46.480 org link set parameters and then it's 0:09:45.120,0:09:49.920 numerous uh 0:09:46.480,0:09:50.720 bits and pieces all right so let's oh 0:09:49.920,0:09:53.600 let's uh 0:09:50.720,0:09:55.040 close all these ones down and and uh of 0:09:53.600,0:09:56.080 course they also need to be uh 0:09:55.040,0:09:58.720 comfortable with 0:09:56.080,0:09:59.920 uh loops and maps and matching and 0:09:58.720,0:10:02.560 string functions 0:09:59.920,0:10:03.360 so it's it's a bit of a pain it's a bit 0:10:02.560,0:10:05.839 of a pain 0:10:03.360,0:10:06.560 um so it's probably not worth it so 0:10:05.839,0:10:09.360 maybe I'll just 0:10:06.560,0:10:10.320 rush things quickly or do an ad hoc you 0:10:09.360,0:10:13.680 know 0:10:10.320,0:10:15.920 we have things to do right 0:10:13.680,0:10:17.839 so maybe maybe the squad wants to have a 0:10:15.920,0:10:21.120 modular 0:10:17.839,0:10:23.040 and unified interface so everyone's 0:10:21.120,0:10:25.279 comfortable with defunct to define a 0:10:23.040,0:10:26.480 function and they say you know what 0:10:25.279,0:10:29.440 it would be nice if we could just you 0:10:26.480,0:10:32.959 know define simultaneously 0:10:29.440,0:10:34.880 both a block and the link type right 0:10:32.959,0:10:36.000 and uh that way we have a single 0:10:34.880,0:10:38.240 interface 0:10:36.000,0:10:39.040 org mode for for these things and it 0:10:38.240,0:10:42.079 would be nice was 0:10:39.040,0:10:43.680 modular so if I defined a 0:10:42.079,0:10:45.519 one kind of block and you defined 0:10:43.680,0:10:47.600 another we could compose them 0:10:45.519,0:10:49.360 right and then get a you know a nice 0:10:47.600,0:10:52.320 bigger block like lego 0:10:49.360,0:10:54.160 that would be nice building box okay and 0:10:52.320,0:10:56.240 uh this is uh what we 0:10:54.160,0:10:57.600 have come up with called death block and 0:10:56.240,0:11:00.240 it also has a 0:10:57.600,0:11:01.760 long documentation string containing 0:11:00.240,0:11:04.800 examples and things 0:11:01.760,0:11:08.320 so that way you can try to be useful 0:11:04.800,0:11:10.880 okay um so let's let's look at a a 0:11:08.320,0:11:12.800 solution to these friends uh trilemma 0:11:10.880,0:11:14.320 all right so here's here's a way to 0:11:12.800,0:11:17.040 define a block 0:11:14.320,0:11:19.200 um it looks it's it doesn't look that 0:11:17.040,0:11:22.320 difficult but this is how they can 0:11:19.200,0:11:25.920 define a block for um 0:11:22.320,0:11:27.680 for uh their top-level feedback right 0:11:25.920,0:11:28.959 so let's let's look at the three main 0:11:27.680,0:11:31.920 parts together 0:11:28.959,0:11:33.040 it's not that uh difficult I hope just 0:11:31.920,0:11:34.720 six lines 0:11:33.040,0:11:36.160 and that's including a documentation 0:11:34.720,0:11:39.440 string and you know 0:11:36.160,0:11:41.279 uh new lines and things okay so in line 0:11:39.440,0:11:42.000 one we just define the block just like 0:11:41.279,0:11:44.880 you define 0:11:42.000,0:11:46.399 a function we define a block the flag 0:11:44.880,0:11:49.680 the block name is going to be called 0:11:46.399,0:11:53.360 feedback it has an author who 0:11:49.680,0:11:56.160 right the author has no default 0:11:53.360,0:11:57.760 value it has a color and the color has a 0:11:56.160,0:12:00.560 default value of red 0:11:57.760,0:12:01.680 okay so just just as when you define 0:12:00.560,0:12:04.880 functions they 0:12:01.680,0:12:08.639 they uh you start by uh define 0:12:04.880,0:12:10.720 or def block than the name some 0:12:08.639,0:12:13.440 mandatory argument and some optional 0:12:10.720,0:12:15.760 arguments okay 0:12:13.440,0:12:18.480 then the next stage is well and 0:12:15.760,0:12:20.880 definition a documentation you know 0:12:18.480,0:12:22.880 uh the people who use this which are 0:12:20.880,0:12:25.519 future you or future me you know 0:12:22.880,0:12:27.839 uh might want to know what this is all 0:12:25.519,0:12:30.560 right so let's get to document this 0:12:27.839,0:12:32.079 uh and uh for for corwin who might want 0:12:30.560,0:12:34.560 to use uh tooltips 0:12:32.079,0:12:35.120 uh when corwin writes feedback whatever 0:12:34.560,0:12:37.120 and 0:12:35.120,0:12:38.639 Emacs they'll see a nice little tooltip 0:12:37.120,0:12:41.279 and the tooltip will have 0:12:38.639,0:12:43.279 this uh documentation string right so 0:12:41.279,0:12:45.200 that'll be nice 0:12:43.279,0:12:46.480 okay and then here's the third part the 0:12:45.200,0:12:49.440 last three lines are 0:12:46.480,0:12:49.680 not not so difficult if the back end is 0:12:49.440,0:12:52.800 in 0:12:49.680,0:12:55.360 is html the backend is html 0:12:52.800,0:12:57.440 please use this template string 0:12:55.360,0:13:00.639 otherwise use the other string 0:12:57.440,0:13:01.279 okay and for each of these uh string 0:13:00.639,0:13:03.600 markers 0:13:01.279,0:13:04.959 please put in the color who wrote it and 0:13:03.600,0:13:07.279 then the contents 0:13:04.959,0:13:08.160 of the special block or the link type 0:13:07.279,0:13:10.639 okay 0:13:08.160,0:13:11.600 um so that's pretty neat not not so 0:13:10.639,0:13:14.639 difficult 0:13:11.600,0:13:15.519 so I thought that was kind of cool and 0:13:14.639,0:13:18.480 then notice it's 0:13:15.519,0:13:19.519 anaphoric it's it's a this this def 0:13:18.480,0:13:21.760 block 0:13:19.519,0:13:22.560 gives you two new names it gives you a 0:13:21.760,0:13:25.120 name called 0:13:22.560,0:13:26.480 uh contents and it gives you a name 0:13:25.120,0:13:29.040 called back end 0:13:26.480,0:13:31.040 right and so even if you're writing a 0:13:29.040,0:13:32.560 def block and you intend it to be used 0:13:31.040,0:13:35.440 only for links 0:13:32.560,0:13:37.600 uh like the uh these colors for example 0:13:35.440,0:13:38.399 uh these colors were defined using dev 0:13:37.600,0:13:41.279 block 0:13:38.399,0:13:43.360 uh and I used them as links right here 0:13:41.279,0:13:44.880 and you don't need to worry 0:13:43.360,0:13:48.160 where does the text come from in the 0:13:44.880,0:13:48.959 link you know if I say red colon bob uh 0:13:48.160,0:13:50.720 is it bob 0:13:48.959,0:13:52.000 or if I put a description is it the 0:13:50.720,0:13:54.000 description so 0:13:52.000,0:13:56.720 it's whatever is available will will 0:13:54.000,0:13:59.199 become uh the value of contents 0:13:56.720,0:14:00.320 and if you're really you know interested 0:13:59.199,0:14:03.839 and you want to do some 0:14:00.320,0:14:04.959 intricate stuff uh def block also gives 0:14:03.839,0:14:08.160 you something called 0:14:04.959,0:14:09.360 raw dash contents if you really want to 0:14:08.160,0:14:11.920 touch the raw 0:14:09.360,0:14:12.639 uh contents with all of the org markups 0:14:11.920,0:14:16.000 still there 0:14:12.639,0:14:18.320 okay so let's uh let's see 0:14:16.000,0:14:19.440 how uh everyone can uh communicate 0:14:18.320,0:14:22.480 amongst themselves 0:14:19.440,0:14:26.000 using this new interface okay so 0:14:22.480,0:14:28.399 uh uh sasha speculates and she how does 0:14:26.000,0:14:31.440 she speculate for her organ html 0:14:28.399,0:14:34.800 she might just write hey look at that no 0:14:31.440,0:14:37.519 no no html nice and and 0:14:34.800,0:14:39.600 amin wants to have some green and so he 0:14:37.519,0:14:42.240 just says hey here's some color green 0:14:39.600,0:14:42.959 and and uh there you go it looks almost 0:14:42.240,0:14:46.560 the same 0:14:42.959,0:14:49.680 right uh notice that the main argument 0:14:46.560,0:14:52.480 is right here def block took an author 0:14:49.680,0:14:53.920 and here's the author again and now the 0:14:52.480,0:14:57.360 optional argument 0:14:53.920,0:14:58.000 uses the org babel source interface you 0:14:57.360,0:15:00.639 just say 0:14:58.000,0:15:01.440 colon and then a key and then the 0:15:00.639,0:15:05.040 argument 0:15:01.440,0:15:05.519 quite quite nice and and corwin doesn't 0:15:05.040,0:15:07.920 want to 0:15:05.519,0:15:09.760 use blocks it's a bit of an overkill and 0:15:07.920,0:15:12.959 can just write a 0:15:09.760,0:15:16.000 a little um right 0:15:12.959,0:15:17.440 so the main argument is now the uh uh 0:15:16.000,0:15:19.360 the label of the link 0:15:17.440,0:15:21.600 all right and then the description of 0:15:19.360,0:15:24.959 the link is the contents 0:15:21.600,0:15:25.680 of uh of the feedback so that was quite 0:15:24.959,0:15:28.079 nice 0:15:25.680,0:15:29.360 so it looks like uh everyone uses the 0:15:28.079,0:15:32.800 same interface on the left 0:15:29.360,0:15:34.480 and can have varying uh outputs 0:15:32.800,0:15:36.639 and it looks I think it looks quite nice 0:15:34.480,0:15:40.000 and I hope you do too 0:15:36.639,0:15:42.160 um and there's a few more maybe 0:15:40.000,0:15:43.920 as you saw in some previous ones we had 0:15:42.160,0:15:46.800 text side beside side 0:15:43.920,0:15:47.440 right now um or we folded some regions 0:15:46.800,0:15:49.360 away 0:15:47.440,0:15:50.959 that was quite nice we put some things 0:15:49.360,0:15:54.000 in pretty boxes 0:15:50.959,0:15:57.120 um uh we had some spoilers at the very 0:15:54.000,0:15:58.160 beginning that we we uh hit some text uh 0:15:57.120,0:15:59.600 we demoed uh 0:15:58.160,0:16:01.680 some texts right you know here's some 0:15:59.600,0:16:04.480 org and here's what it looks like 0:16:01.680,0:16:05.199 um and and most importantly uh they they 0:16:04.480,0:16:08.320 compose 0:16:05.199,0:16:12.639 right there's uh uh there's a 0:16:08.320,0:16:14.720 a macro called uh uh thread block 0:16:12.639,0:16:16.160 uh thread block a thread block call and 0:16:14.720,0:16:18.000 it lets you thread the 0:16:16.160,0:16:20.639 the contents through a number of blocks 0:16:18.000,0:16:22.480 treating them as if they were functions 0:16:20.639,0:16:23.680 and so really you can think of a block 0:16:22.480,0:16:26.560 as a as a 0:16:23.680,0:16:27.360 as a string valued function so that's 0:16:26.560,0:16:30.959 pretty neat 0:16:27.360,0:16:31.759 I I think and uh thank you for listening 0:16:30.959,0:16:34.320 and uh 0:16:31.759,0:16:34.880 I I hope you've uh enjoyed this little 0:16:34.320,0:16:37.600 uh 0:16:34.880,0:16:38.160 happy fun time with uh with the Emacs 0:16:37.600,0:16:40.720 and friends 0:16:38.160,0:16:41.759 and uh I'll I'm I'll happy happily 0:16:40.720,0:16:43.730 answer questions 0:16:41.759,0:16:45.360 uh right now um 0:16:43.730,0:16:48.160 [Music] 0:16:45.360,0:16:50.480 so uh someone says why did you put 0:16:48.160,0:16:53.600 optional arguments in a separate list 0:16:50.480,0:16:54.560 rather than using cl style argument 0:16:53.600,0:16:58.399 lists 0:16:54.560,0:17:01.680 um so that's a very good question 0:16:58.399,0:17:04.400 and I will answer that by 0:17:01.680,0:17:04.880 showing you a more involved definition 0:17:04.400,0:17:08.959 of 0:17:04.880,0:17:12.079 feedback so let's look at a 0:17:08.959,0:17:12.079 a more involved one 0:17:13.039,0:17:19.280 right right here so for example 0:17:16.079,0:17:21.760 this one is called rural mark all right 0:17:19.280,0:17:23.439 and uh please let me know if my text is 0:17:21.760,0:17:26.799 not sufficiently big 0:17:23.439,0:17:29.520 so here is here is why uh we have 0:17:26.799,0:17:30.720 two arguments that takes two arguments 0:17:29.520,0:17:33.360 uh instead of one 0:17:30.720,0:17:34.799 for for its argument list right so you 0:17:33.360,0:17:37.679 you have def block 0:17:34.799,0:17:38.400 then you have the name right then you 0:17:37.679,0:17:40.960 have 0:17:38.400,0:17:42.880 the first uh argument list and the 0:17:40.960,0:17:46.080 second argument list 0:17:42.880,0:17:49.280 the first argument list uh takes the 0:17:46.080,0:17:51.760 takes the text right after the begin 0:17:49.280,0:17:52.320 right the text right after the begin is 0:17:51.760,0:17:55.760 the main 0:17:52.320,0:17:57.039 argument okay and then the remaining key 0:17:55.760,0:18:00.320 value pairs 0:17:57.039,0:18:03.280 are in the second argument list okay 0:18:00.320,0:18:04.640 now the reason we have two is because uh 0:18:03.280,0:18:06.799 in order to 0:18:04.640,0:18:08.880 streamline the interface to account for 0:18:06.799,0:18:12.320 both uh special blocks 0:18:08.880,0:18:13.360 and or link types uh what we do is we 0:18:12.320,0:18:16.160 say hey 0:18:13.360,0:18:18.000 uh in the first argument list uh you can 0:18:16.160,0:18:21.039 give a name to the first argument 0:18:18.000,0:18:24.240 give it a default value and anything 0:18:21.039,0:18:27.760 else you provide will become uh 0:18:24.240,0:18:30.000 uh part of the I'll co link 0:18:27.760,0:18:32.000 information so for example this link we 0:18:30.000,0:18:34.799 decided to make its face 0:18:32.000,0:18:35.840 angry red um you might want to give 0:18:34.799,0:18:37.919 other features to 0:18:35.840,0:18:39.679 links so we're trying to streamline the 0:18:37.919,0:18:42.320 interface for both 0:18:39.679,0:18:42.880 special blocks and org link types and we 0:18:42.320,0:18:46.240 thought 0:18:42.880,0:18:49.840 this way was quite nice um so 0:18:46.240,0:18:52.480 that was the main reason uh someone asks 0:18:49.840,0:18:55.039 uh so if if you uh if that's uh if you 0:18:52.480,0:18:57.600 need if you have follow-up please ask 0:18:55.039,0:19:00.559 someone asks do you intend to try to 0:18:57.600,0:19:03.600 upstream this amazing work into org 0:19:00.559,0:19:04.559 well I'm glad you like it I I don't know 0:19:03.600,0:19:06.880 how to upstream 0:19:04.559,0:19:08.799 but but I I will look into it and any 0:19:06.880,0:19:11.840 advice or guidance would be 0:19:08.799,0:19:14.640 much appreciated um you know 0:19:11.840,0:19:17.120 lisp is awesome and just as defunded as 0:19:14.640,0:19:20.240 a macro deathblock is a macro and then 0:19:17.120,0:19:21.919 source blocks are awesome and then now 0:19:20.240,0:19:24.080 maybe we can have arguments and special 0:19:21.919,0:19:25.280 blocks and motivate and encourage more 0:19:24.080,0:19:28.799 people to uh 0:19:25.280,0:19:32.559 to uh learn lisp right 0:19:28.799,0:19:35.280 so another person asks 0:19:32.559,0:19:38.559 um what is used to produce colorful 0:19:35.280,0:19:40.400 boxes around the cursor 0:19:38.559,0:19:41.840 I I'm not quite sure if you're asking 0:19:40.400,0:19:42.559 are you talking about my cursor right 0:19:41.840,0:19:47.840 here 0:19:42.559,0:19:47.840 or are you talking about in the slide um 0:19:48.400,0:19:52.400 so this this this cursor is some 0:19:50.559,0:19:55.440 application called 0:19:52.400,0:19:57.679 a stream brush that I had to purchase uh 0:19:55.440,0:19:59.039 unfortunately I could not find a a 0:19:57.679,0:20:02.159 suitable free one 0:19:59.039,0:20:03.840 um and the blocks I can demonstrate some 0:20:02.159,0:20:05.679 Emacs list but I can open up my Emacs if 0:20:03.840,0:20:06.320 people like and we can try some things 0:20:05.679,0:20:09.440 out 0:20:06.320,0:20:12.480 happy to do that uh 0:20:09.440,0:20:14.880 you're welcome uh someone asks 0:20:12.480,0:20:15.520 a side question about org reveal how do 0:20:14.880,0:20:17.440 you get 0:20:15.520,0:20:19.120 bespoke or multiple column layouts 0:20:17.440,0:20:22.559 without using html 0:20:19.120,0:20:24.640 ah excellent question that's what we do 0:20:22.559,0:20:26.000 that's that's what this uh project is 0:20:24.640,0:20:28.960 about so it's not 0:20:26.000,0:20:29.440 org reveal it's it's our fancy parallel 0:20:28.960,0:20:32.240 uh 0:20:29.440,0:20:33.440 uh block so we have this thing you say 0:20:32.240,0:20:35.679 begin parallel 0:20:33.440,0:20:37.120 you say how many columns you would like 0:20:35.679,0:20:39.679 uh do you want a bar 0:20:37.120,0:20:40.960 or not and then you write some text and 0:20:39.679,0:20:42.480 then you uh 0:20:40.960,0:20:44.400 you get some text and according with the 0:20:42.480,0:20:47.520 bar or not right so that's 0:20:44.400,0:20:50.080 that's how we achieve that in our slides 0:20:47.520,0:20:52.559 so I'm not uh I'm not quite sure where 0:20:50.080,0:20:52.559 this was 0:20:52.880,0:20:55.919 somewhere here I think 0:20:59.520,0:21:03.840 let me try to find this for you 0:21:06.240,0:21:09.440 I can't seem to find where the parallel 0:21:08.320,0:21:12.159 blocks were 0:21:09.440,0:21:15.039 apologies let's move on to the next 0:21:12.159,0:21:17.760 question I suppose 0:21:15.039,0:21:18.400 uh I'm pretty sure they're here ah there 0:21:17.760,0:21:21.360 they are 0:21:18.400,0:21:22.640 yes so these these uh were just 0:21:21.360,0:21:25.440 instances of using 0:21:22.640,0:21:26.480 uh the parallel block and it makes 0:21:25.440,0:21:29.600 things parallel 0:21:26.480,0:21:33.360 so that's quite nice um another person 0:21:29.600,0:21:36.720 asks uh yes 0:21:33.360,0:21:37.840 excellent um how does this relate to 0:21:36.720,0:21:39.360 banda pandoc 0:21:37.840,0:21:40.960 which is used for converting between 0:21:39.360,0:21:43.919 markup formats 0:21:40.960,0:21:44.400 so all we're doing is we're we're saying 0:21:43.919,0:21:46.799 hey 0:21:44.400,0:21:47.679 please write org because org is just 0:21:46.799,0:21:50.400 fantastic 0:21:47.679,0:21:51.760 and we love it and it's the dream and if 0:21:50.400,0:21:55.039 you would like to view things 0:21:51.760,0:21:58.559 in html or in org reveal or 0:21:55.039,0:22:02.320 in pdf that's up to the user so 0:21:58.559,0:22:05.039 here is a um oh 0:22:02.320,0:22:06.080 made it too small now so here is a an 0:22:05.039,0:22:08.880 example 0:22:06.080,0:22:10.240 so here's an uh how here's how parallel 0:22:08.880,0:22:13.120 is implemented 0:22:10.240,0:22:14.320 uh just as a quick example uh not too 0:22:13.120,0:22:16.880 long 0:22:14.320,0:22:18.400 uh about half of the implementation is 0:22:16.880,0:22:20.720 documentation so 0:22:18.400,0:22:22.720 uh hopefully that speaks for for how 0:22:20.720,0:22:25.280 useful this feature is 0:22:22.720,0:22:28.080 uh so we decide if there's a rule or not 0:22:25.280,0:22:29.760 um we look for the column break 0:22:28.080,0:22:31.840 and really here we're looking at the 0:22:29.760,0:22:34.960 back end if the back end is latex 0:22:31.840,0:22:37.679 uh please use this uh incantation with 0:22:34.960,0:22:38.559 multi columns mini pages what have you 0:22:37.679,0:22:41.039 and if the 0:22:38.559,0:22:41.600 back end is something else uh please uh 0:22:41.039,0:22:44.960 do this 0:22:41.600,0:22:46.640 uh div and style and uh other uh 0:22:44.960,0:22:48.080 gibberish that we don't really wanna 0:22:46.640,0:22:51.760 look at uh so 0:22:48.080,0:22:55.280 uh when you pandoc works from org 0:22:51.760,0:22:58.080 so it might not work directly since our 0:22:55.280,0:22:59.679 interface the way we set it up is when 0:22:58.080,0:23:01.919 you try to export 0:22:59.679,0:23:03.039 uh we hook in and we do a bunch of 0:23:01.919,0:23:05.919 pre-processing 0:23:03.039,0:23:07.440 so this this uh def block is a is a 0:23:05.919,0:23:10.880 string valued function 0:23:07.440,0:23:13.919 and so whenever we see these uh begin 0:23:10.880,0:23:16.480 parallel uh when you do an export 0:23:13.919,0:23:16.960 I tell Emacs hold up look for those 0:23:16.480,0:23:19.360 begin 0:23:16.960,0:23:20.320 parallels please oh you found them grab 0:23:19.360,0:23:22.400 that text 0:23:20.320,0:23:24.080 you grabbed it great now please apply 0:23:22.400,0:23:27.120 this person's uh function 0:23:24.080,0:23:29.760 onto that text and splice in the result 0:23:27.120,0:23:30.400 okay so so when you export uh we're 0:23:29.760,0:23:33.600 performing 0:23:30.400,0:23:35.120 arbitrary computations on your uh uh on 0:23:33.600,0:23:38.799 your text 0:23:35.120,0:23:40.159 so uh um some people might not find that 0:23:38.799,0:23:43.039 comforting to have 0:23:40.159,0:23:45.039 arbitrary uh computations happening so 0:23:43.039,0:23:47.520 in this article there's a few where 0:23:45.039,0:23:48.320 uh we change your text upon export we 0:23:47.520,0:23:51.760 translate it 0:23:48.320,0:23:55.360 we do other things to it um 0:23:51.760,0:23:57.360 so someone says uh if you export to 0:23:55.360,0:23:58.640 latex to pdf does that work well with 0:23:57.360,0:24:00.320 beamer as well 0:23:58.640,0:24:02.080 to create slides with columns for 0:24:00.320,0:24:05.200 example for uh 0:24:02.080,0:24:08.000 um so uh actually uh 0:24:05.200,0:24:09.200 so uh I I made a bunch of these changes 0:24:08.000,0:24:12.320 earlier this morning 0:24:09.200,0:24:14.480 and it just says latex right here um 0:24:12.320,0:24:15.360 so if you want to go to beamer I think 0:24:14.480,0:24:18.240 the back end for me 0:24:15.360,0:24:18.960 beamer is called well beamer so instead 0:24:18.240,0:24:21.200 of a 0:24:18.960,0:24:22.000 a p case what we would do is we would 0:24:21.200,0:24:25.360 say oh 0:24:22.000,0:24:29.279 if it's a latex or it's a beamer 0:24:25.360,0:24:31.120 then uh use this uh otherwise 0:24:29.279,0:24:33.039 it's not a latex it will simply default 0:24:31.120,0:24:36.400 to this one which could be 0:24:33.039,0:24:39.679 dangerous for your needs um I think it's 0:24:36.400,0:24:41.279 a bad practice to put a underscore but I 0:24:39.679,0:24:43.679 did it really quickly because I just 0:24:41.279,0:24:46.559 wanted to show you that it works fine in 0:24:43.679,0:24:47.440 org reveal contributions are more than 0:24:46.559,0:24:51.039 welcome 0:24:47.440,0:24:52.240 I I uh happily uh would love any 0:24:51.039,0:24:56.080 assistance 0:24:52.240,0:24:58.640 um and and I have a uh we have a 0:24:56.080,0:25:00.159 list a reference cheat sheet here to to 0:24:58.640,0:25:02.000 learn a little bit about lisp if you're 0:25:00.159,0:25:04.640 not comfortable or to 0:25:02.000,0:25:06.400 ask some questions lots of helpful 0:25:04.640,0:25:09.440 people 0:25:06.400,0:25:11.679 so there's another question that says uh 0:25:09.440,0:25:13.120 does typing in a block mess up with a 0:25:11.679,0:25:15.679 syntax highlighting 0:25:13.120,0:25:17.279 usually you use a single color inside an 0:25:15.679,0:25:21.279 example block for example 0:25:17.279,0:25:25.279 ah you found my crutch you found 0:25:21.279,0:25:27.440 my crutch um so I so there's 0:25:25.279,0:25:29.760 emax's is all encompassing and I'm not 0:25:27.440,0:25:32.559 quite sure how fonts work or are 0:25:29.760,0:25:33.840 you know I I learned enough to get by I 0:25:32.559,0:25:37.440 learned enough to get by 0:25:33.840,0:25:39.760 so let me um but here's 0:25:37.440,0:25:40.799 here's how links work they're they're a 0:25:39.760,0:25:42.960 bit complicated 0:25:40.799,0:25:43.919 this this is a bit scary I don't 0:25:42.960,0:25:47.039 recommend anyone 0:25:43.919,0:25:49.840 uh read it um 0:25:47.039,0:25:50.559 but uh actually let me open up an email 0:25:49.840,0:25:53.600 and you can 0:25:50.559,0:25:54.799 you can see what I see uh so here's an 0:25:53.600,0:25:56.799 Emacs 0:25:54.799,0:25:58.400 all right let's make that a bit bigger 0:25:56.799,0:26:01.200 uh let's change this 0:25:58.400,0:26:01.919 slightly nope that's worse there you go 0:26:01.200,0:26:05.760 so 0:26:01.919,0:26:09.360 here's here's some words um so here's 0:26:05.760,0:26:12.000 red hello um 0:26:09.360,0:26:12.400 but you're worried about uh preserving 0:26:12.000,0:26:15.679 uh 0:26:12.400,0:26:18.480 uh uh um quantification 0:26:15.679,0:26:18.880 so let's make an emax list block all 0:26:18.480,0:26:22.840 right 0:26:18.880,0:26:27.520 and let's say plus one two ah 0:26:22.840,0:26:27.520 where's the fun hello 0:26:28.000,0:26:34.880 um bye okay where's the coloring 0:26:32.080,0:26:36.000 if we if we zoom in on this on this 0:26:34.880,0:26:39.200 begin source block 0:26:36.000,0:26:42.159 if we zoom in you can see down here 0:26:39.200,0:26:43.279 uh we have our our coloring all right 0:26:42.159,0:26:46.960 when we zoom in 0:26:43.279,0:26:50.080 if we if we zoom out ah no coloring 0:26:46.960,0:26:50.880 zoom in coloring it's about ah no 0:26:50.080,0:26:53.840 coloring 0:26:50.880,0:26:55.679 let's take off these bad boys and oh 0:26:53.840,0:26:59.360 look my coloring's back 0:26:55.679,0:27:02.320 so um in a previous 0:26:59.360,0:27:03.760 uh iteration of the system I was able to 0:27:02.320,0:27:06.400 maintain coloring 0:27:03.760,0:27:08.559 uh in this new iteration I am not I 0:27:06.400,0:27:11.039 don't know how to do it I haven't uh 0:27:08.559,0:27:13.279 had the time to to implement it I spent 0:27:11.039,0:27:17.279 a lot of time writing this uh 0:27:13.279,0:27:19.679 48 page uh documentation uh with uh 0:27:17.279,0:27:20.320 with some fun examples to to to try to 0:27:19.679,0:27:21.760 help 0:27:20.320,0:27:23.760 people learn so but but I would 0:27:21.760,0:27:26.240 appreciate any help or guidance on 0:27:23.760,0:27:28.000 how to uh maintain the quantification I 0:27:26.240,0:27:29.200 I really would like to keep those colors 0:27:28.000,0:27:31.840 in 0:27:29.200,0:27:32.640 um musa we have time for maybe one more 0:27:31.840,0:27:34.960 question 0:27:32.640,0:27:37.039 um one or two more questions and then we 0:27:34.960,0:27:39.120 have to move on to the next talk 0:27:37.039,0:27:40.799 um but yeah you're more than welcome to 0:27:39.120,0:27:42.559 take continue taking the questions via 0:27:40.799,0:27:45.760 irc or the pad 0:27:42.559,0:27:48.480 okay thank you thank you 0:27:45.760,0:27:48.880 let's uh the final question we'll take 0:27:48.480,0:27:52.320 is 0:27:48.880,0:27:54.399 um should packages implement 0:27:52.320,0:27:55.840 interface to one specific format or 0:27:54.399,0:27:57.279 attempt to be conclusive to all the 0:27:55.840,0:27:58.880 potential output targets 0:27:57.279,0:28:01.120 I think you should just make them as you 0:27:58.880,0:28:02.559 go and you know add them as you need 0:28:01.120,0:28:05.600 them we'll make uh 0:28:02.559,0:28:07.840 help requests or things and uh 0:28:05.600,0:28:09.279 we can we can share recipes in this uh 0:28:07.840,0:28:12.799 document and then 0:28:09.279,0:28:16.000 try to add other uh techniques and then 0:28:12.799,0:28:19.200 and we can uh use these blocks as a 0:28:16.000,0:28:22.240 common uh interface for 0:28:19.200,0:28:26.000 for exporting to pdf and other things 0:28:22.240,0:28:28.399 and since someone asked here is a um 0:28:26.000,0:28:30.159 here is uh what a pdf looks like this is 0:28:28.399,0:28:33.840 the same pdf and 0:28:30.159,0:28:34.960 uh rendered uh just I made no effort to 0:28:33.840,0:28:37.840 make it look good 0:28:34.960,0:28:38.559 but it surprisingly does look good so so 0:28:37.840,0:28:41.600 uh that was 0:28:38.559,0:28:44.320 uh that was nice um that was a 0:28:41.600,0:28:44.880 terrible magenta but that is life uh 0:28:44.320,0:28:47.279 anyhow 0:28:44.880,0:28:48.960 I hope you all enjoyed this talk I hope 0:28:47.279,0:28:51.679 you will find um 0:28:48.960,0:28:52.799 death block uh useful to you it is 0:28:51.679,0:28:54.960 available on melbourne 0:28:52.799,0:28:57.679 uh in a rush to make it available for 0:28:54.960,0:29:00.159 EmacsConf 2020 some melba 0:28:57.679,0:29:00.960 guidelines may not have been in here too 0:29:00.159,0:29:03.200 please do not 0:29:00.960,0:29:04.720 hit me um and I hope everyone enjoys the 0:29:03.200,0:29:08.559 rest of the EmacsConf 0:29:04.720,0:29:08.559 2020 thank you