summaryrefslogtreecommitdiffstats
path: root/2020/info/22.md
blob: d6e3d717800b133c29f0bbd44794fc8f7cc6cc73 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
# Powering-up Special Blocks
Musa Al-hassy

[[!template id=vid vidid="mainVideo"  src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.webm" subtitles="/2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt" video]]  
[Download compressed .webm video (29.2M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)

Users will generally only make use of a few predefined \`special
blocks', such as \`example, centre, quote', and will not bother with
the effort required to make new ones.  When new encapsulating notions
are required, users will either fallback on HTML or LaTeX specific
solutions, usually littered with \`#+ATTR' clauses to pass around
configurations or parameters.

Efforts have been exerted to mitigate the trouble of producing new
special blocks.  However, the issue of passing parameters is still
handled in a clumsy fashion; e.g., by having parameters be expressed
in a special block's content using specific keywords.

We present a novel approach to making special blocks in a familiar
fashion and their use also in a familiar fashion. We achieve the
former by presenting \`\`defblock'', an anaphoric macro exceedingly
similar to \`\`defun'', and for the latter we mimic the usual
\`\`src''-block syntax for argument passing to support special blocks.

For instance, here is a sample declaration.

    (defblock stutter () (reps 2)
      "Output the CONTENTS of the block REPS many times"
      (org-parse (s-repeat reps contents)))

Here is an invocation that passes an *optional* argument; which
defaults to 2 when not given.

<div class="stutter">
<p>
Emacs for the win ⌣̈
</p>

</div>

Upon export, to HTML or LaTeX for instance, the contents of this block
are repeated (\`stuttered') 5 times.  The use of \`\`src''-like
invocation may lead to a decrease in \`#+ATTR' clauses.

In the presentation, we aim to show a few \`practical' special blocks
that users may want: A block that &#x2026;

-   translates *some selected* text &#x2014;useful for multilingual blogs
-   hides *some selected* text &#x2014;useful for learning, quizzes
-   folds/boxes text &#x2014;useful in blogs for folding away details

In particular, all of these examples will be around ~5 lines long!

We also have a larger collection of more useful block types, already
implemented.

The notable features of the system are as follows.

-   Familiar \`\`defun'' syntax for making block &#x2014;\`\`defblock''
-   Familiar \`\`src'' syntax for passing arguments &#x2014;e.g., \`\`:key
    value''
-   Fine-grained control over export translation phases &#x2014;c.f.,
    \`\`org-parse'' above
-   **Modular**: New blocks can be made out of existing blocks really
    quickly using \`\`blockcall'' &#x2014;similar to Lisp's \`\`funcall''.  We
    will show how to fuse two blocks to make a new one, also within ~5
    lines.

It is hoped that the ease of creating custom special blocks will be a
gateway for many Emacs users to start using Lisp.

## Resources

<https://alhassy.github.io/org-special-block-extras/emacs-conf-2020>

<!-- from the pad --->

- Actual start and end time (EST): Start: 2020-11-29T09.19.39; Q&A:
  2020-11-29T09.36.14; End: 2020-11-29T09.48.34

# Questions

## Should packages implement the interface to one specific format, or attempt to be conclusive to all the potential output targets?

## How to share "recipes"? Will this become a "large" project, or minimal that requires you to write most customizations yourself?

## Could you make slides that show the source form on the left and the output on the right? That would make understanding each capability much simpler.

## Does typing in a block mess up the syntax highlighting? Usually themes use a single color inside an example block, for example.
"You found my crutch!". Colors in source code blocks within blocks are
hard. Didn't have time yet to implement it. Any help is appreciated!
:)

- That's where you can get help from org-mode core developers ;)

## If you export to LaTeX->PDF does that work well with beamer as well? To create slides with columns for example?
You have to format the LaTeX appropriately for the backend "beamer".

## How does this relate to pandoc, which is used for converting between markup formats?

## Side question about org-reveal: How do you get bespoke/multiple-column layouts without using #+HTML (and <div>) everywhere in the Org file?
It's a custom `#begin_parallel` block! See the main article linked
below.

Parallel section:
<https://alhassy.github.io/org-special-block-extras/#Parallel>

## What is used to produce colorful boxes around the cursor in your browser?
Commercial software called ScreenBrush.

## Why did you put optional arguments in a separate list rather than using cl-style argument lists?  e.g. (defblock feedback (who &optional (color "red")) &#x2026;)
The first argument may take some meta-information when you define it,
which is easier to handle with two arguments.

## Do you intend to try to upstream this amazing work into Org? :)
No prior experience on how to upstream; suggestions and help
appreciated.

- <https://orgmode.org/contribute.html>.
- Yes, I would suggest simply posting a short proposal for an
  org-defblock macro on the orgmode mailing list, and hopefully
  Bastien and other maintainers like Nicolas will discuss it with you.
  I think they would be excited to have this feature standardized in
  Org. +1+1+1+1 I am excited+1+1

Add a little beginner-focused documentation and this becomes another
great reason to use Org over Markdown, I imagine the maintainers would
love to have it.

# Notes
- Main article: <https://alhassy.github.io/org-special-block-extras/>
  (HTML or 48 page PDF).
- Slides for this talk:
  <https://alhassy.github.io/org-special-block-extras/emacs-conf-2020>.
- [Reddit
  discussion](https://www.reddit.com/r/emacs/comments/k2whsy/declaring_new_special_blocks_with_arguments/).
- Elisp Reference Sheet:
  <https://alhassy.github.io/ElispCheatSheet/CheatSheet.pdf>.
- My Emacs init:
  <https://github.com/alhassy/emacs.d#a-life-configuring-emacs>.

<a name="transcript"></a>
# Transcript

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