summaryrefslogtreecommitdiffstats
path: root/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.vtt
blob: 3f132c9aaec0626a4af4003fe3e4f1daa290dd29 (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
WEBVTT captioned by MetroWind

NOTE Introduction

00:02.140 --> 00:05.440
Hi my name is MetroWind.

00:05.440 --> 00:12.910
In this talk I will take you through my journey into Emacs themes.

00:12.970 --> 00:15.730
I am a long-time Emacs user. I started using

00:15.760 --> 00:17.770
Emacs since version 21.

00:19.090 --> 00:22.960
The goal of this talk is to inspire more people into making themes.

00:24.070 --> 00:26.350
Maybe you are already making themes.

00:26.350 --> 00:29.410
In that case I hope you could find some tips and tricks

00:30.550 --> 00:33.670
you know in this one

00:33.670 --> 00:36.070
I will basically go through all the themes

00:36.130 --> 00:36.910
that I created.

00:37.960 --> 00:40.000
But I think the most important thing

00:40.000 --> 00:42.910
here is to understand why some of

00:42.910 --> 00:44.620
the some of the colors are picked,

00:44.860 --> 00:47.560
and the motivations behind them.

NOTE Deviant

00:48.820 --> 00:50.800
So the first theme I created is

00:50.800 --> 00:54.190
called Deviant. It looks like this.

00:55.810 --> 00:57.730
The inspiration for this one is a

00:57.730 --> 01:00.820
website called DeviantArt. Basically I just

01:00.850 --> 01:03.580
use their color palette, you know, from their design.

01:04.810 --> 01:10.750
It was a like a community for indie artists.

01:10.750 --> 01:12.820
I was really into that, you know,

01:12.820 --> 01:14.470
back in the day so that’s that.

NOTE FlucUI

01:15.640 --> 01:19.090
Otherwise, nothing special. The next theme

01:19.120 --> 01:21.220
I created was called FlucUI

01:24.820 --> 01:25.630
It’s in MELPA.

01:26.530 --> 01:27.640
And let me just show you.

01:35.260 --> 01:37.600
So yeah that's how it looks like.

01:42.280 --> 01:45.250
So... but where where did the colors

01:45.250 --> 01:49.060
come from, right? To understand that,

01:50.290 --> 01:55.270
I'll need to take you back in time, you know, to where iOS 7

01:55.330 --> 01:58.000
was released by Apple. That was a

01:58.000 --> 02:01.900
big deal, because that popularized the idea

02:01.930 --> 02:05.290
of flat UI color designs; sorry, flat UI

02:05.290 --> 02:10.360
designs. And after that, everybody followed suit,

02:10.360 --> 02:14.440
and changed their design, you know

02:14.440 --> 02:22.420
of all of their websites and applications to use some sort of flat UI design concepts.

02:23.470 --> 02:27.550
And about the same time, there came a website called flatuicolors.com.

02:28.720 --> 02:30.820
It hosted one color palette,

02:32.110 --> 02:34.030
and that was really good!

02:35.110 --> 02:39.490
So I picked that as the basis of my theme.

02:40.900 --> 02:43.959
And initially I named it FlatUI,

02:43.959 --> 02:46.717
But that name was taken in MELPA

02:46.717 --> 02:50.320
So i just rename it to something random, FlucUI.

NOTE Lab

02:51.910 --> 02:55.060
The next one is called lab.

02:57.310 --> 03:00.340
To understand why I needed to create the theme,

03:03.850 --> 03:08.620
it's because I thought some of the colors in FlucUI

03:10.780 --> 03:15.250
was standing out too much, like the green here.

03:18.010 --> 03:18.640
This one.

03:20.170 --> 03:22.090
I thought this was too bright.

03:22.780 --> 03:26.050
Just a little bit.

03:27.100 --> 03:30.100
So I thought I needed way to pick

03:30.100 --> 03:32.890
some colors that are about the same

03:32.890 --> 03:35.350
lightness essentially. So how would I do that?

03:35.350 --> 03:42.370
The answer is to go into a color space called LAB.

03:42.880 --> 03:45.130
Now normally you'd do color work in RGB,

03:46.420 --> 03:49.300
which is red, green, and blue.

03:49.660 --> 03:52.420
It doesn't tell you a lot about lightness.

03:53.830 --> 03:56.440
If you do a pure blue,

03:56.440 --> 03:58.600
it actually looks a lot darker than a

03:58.600 --> 04:01.510
pure red or pure green. So that

04:01.631 --> 04:04.990
that doesn't work. But in LAB,

04:04.990 --> 04:07.120
thing are different, because one of the channel

04:07.360 --> 04:10.810
is L which is lightness. The other

04:10.810 --> 04:13.600
two channels are a and b, which are just

04:13.750 --> 04:17.140
for colors. This is great because

04:17.140 --> 04:19.630
I could just fix L meaning

04:19.630 --> 04:21.790
I fixed the lightness, and then I can

04:21.790 --> 04:25.300
vary a and b however I want.

04:25.300 --> 04:27.850
The color will stay roughly in the same

04:27.850 --> 04:30.310
lightness, which is exactly what I wanted.

04:31.780 --> 04:34.210
So for that I created a

04:34.210 --> 04:38.230
Mac app, where I could just

04:38.230 --> 04:40.330
fix lightness like I said, and then

04:40.330 --> 04:42.550
I could click on this colorful thing,

04:42.670 --> 04:45.010
to pick a color. The app will

04:45.010 --> 04:47.950
pick another five according to some pattern.

04:48.430 --> 04:50.140
And then I could just like hard-code

04:50.140 --> 04:51.640
these colors in Emacs.

04:52.930 --> 04:54.160
Let me show you.

04:56.230 --> 04:58.000
apply theme... lab...

04:59.590 --> 05:02.110
Yeah not very different from FlucUI colors,

05:02.140 --> 05:04.300
which was intentional.

05:05.350 --> 05:08.200
The idea here again is

05:08.380 --> 05:10.660
all the colors will be in about

05:10.660 --> 05:13.570
the same lightness, which I guess it was.

05:14.230 --> 05:18.250
So yeah... So this one was

05:18.280 --> 05:20.830
a success. I use it for a

05:20.830 --> 05:23.440
really long time. And then I got bored...

NOTE NotInk: grayscale

05:25.090 --> 05:28.150
So I needed something interesting.

05:28.150 --> 05:31.900
The idea at the time was then to create a theme

05:33.460 --> 05:36.310
that doesn't have any colors essentially.

05:36.310 --> 05:41.740
A grayscale theme. So I called

05:41.740 --> 05:44.830
it NotInk. It is also in Melpa

05:46.060 --> 05:46.960
It looks like this.

05:49.210 --> 05:50.650
Yeah like I said, everything is grey.

05:51.310 --> 05:53.530
There's no color. But to my

05:53.530 --> 05:56.500
surprise, this is actually very useable.

05:56.500 --> 05:59.500
I didn't have any problem in readability;

05:59.500 --> 06:02.170
I didn't have any problem distinguishing, you know,

06:02.170 --> 06:05.857
different elements in the code. So a

06:05.857 --> 06:09.460
big surprise. And also a big success actually.

06:10.720 --> 06:13.930
And then I got bored.

NOTE Random theme

06:13.930 --> 06:16.360
I just decided to install a whole bunch

06:16.360 --> 06:17.710
of themes from MELPA,

06:18.310 --> 06:20.650
and every time I start Emacs I

06:20.650 --> 06:21.760
just pick a random theme.

06:23.200 --> 06:25.660
There are some caveats to that,

06:25.660 --> 06:27.280
which I don't want to get into.

06:28.660 --> 06:31.210
But let me just show you.

06:31.210 --> 06:33.130
apply-random-theme, so it picked one for

06:33.130 --> 06:37.030
me. And then it picked another... another...

06:37.060 --> 06:37.600
So yeah.

06:39.490 --> 06:42.340
It's an interesting setup. I'm still using

06:42.340 --> 06:45.010
this setup today. Actually a good one

06:46.150 --> 06:48.580
Walls of text...

NOTE Monte Carlo

06:50.020 --> 06:52.240
Now the final theme I want to look into,

06:53.380 --> 06:55.750
which is the latest, is called Monte Carlo.

06:56.650 --> 06:59.110
...which you know, idea here is to

06:59.110 --> 07:01.947
bring the idea of picking a random

07:01.990 --> 07:05.620
theme to the next level.

07:05.620 --> 07:08.440
So this is just one theme that generates

07:08.470 --> 07:11.530
a random color palette for me everytime.

07:12.880 --> 07:15.400
Not in MELPA, because I'm not ...

07:15.419 --> 07:18.370
I'm not completely satisfied with it.

NOTE How to pick a random color palette

07:19.780 --> 07:22.510
But anyway... How do I... How do I pick

07:22.540 --> 07:23.830
a random color palette right?

07:25.030 --> 07:29.680
The answer is again to look at a different color space.

07:29.680 --> 07:32.890
This time it's called HLC, which is hue,

07:32.950 --> 07:36.370
lightness, and chroma. So hue is just

07:36.670 --> 07:40.270
colors, red, green, blue, or yellow, whatever.

07:40.810 --> 07:44.200
Lightness is lightness. Chroma is saturation,

07:45.160 --> 07:47.800
essentially. This is great because I could

07:48.160 --> 07:52.150
fix both lightness and saturation, and only

07:52.150 --> 07:55.180
vary in hue to pick my colors.

07:57.580 --> 08:00.190
Now the problem is

08:01.660 --> 08:03.220
once I have the color palette in

08:03.250 --> 08:06.105
HLC, how would I convert it to

08:06.105 --> 08:09.250
sRGB, because Emacs only knows

08:09.250 --> 08:10.870
about colors in sRGB.

NOTE XYZ

08:12.070 --> 08:14.230
The answer here is to go through

08:14.230 --> 08:16.450
another color space called XYZ.

08:17.950 --> 08:21.340
This is an extremely important color space,

08:21.670 --> 08:25.870
because basically all other color spaces are

08:25.870 --> 08:27.790
defined on top of XYZ.

08:28.930 --> 08:31.180
So you would have like transformations

08:31.180 --> 08:34.450
from XYZ to all other

08:34.480 --> 08:37.570
color spaces. Now if you invert this

08:37.750 --> 08:41.440
these transformations, you could go from,

08:41.440 --> 08:43.870
for example, HLC back into XYZ

08:43.900 --> 08:46.960
and then go to another color

08:46.960 --> 08:48.910
space of your choosing, right.

08:49.750 --> 08:51.400
So this is how to convert colors

08:51.430 --> 08:54.970
between color spaces. In this case,

08:55.270 --> 08:57.850
I have to convert colors from HLC

08:57.850 --> 08:59.920
to LAB, and from LAB to XYZ,

08:59.920 --> 09:02.530
and from XYZ to sRGB.

09:02.530 --> 09:05.710
So this time the conversions are

09:05.710 --> 09:08.200
all done in Emacs Lisp, and I

09:08.200 --> 09:13.270
have the code in here in this URL.

09:13.270 --> 09:14.830
You could take a look, or you

09:14.830 --> 09:17.350
could actually just use maybe some package

09:18.310 --> 09:19.390
to convert colors.

09:20.470 --> 09:23.740
Anyway let me show you how

09:23.740 --> 09:26.560
this works. So in this case I

09:26.590 --> 09:29.200
could apply theme, Monte Carlo.

09:30.670 --> 09:33.760
So this is now a random theme.

09:33.790 --> 09:36.730
Actually, well, a theme with random colors,

09:37.150 --> 09:39.580
because I could apply the same theme,

09:40.960 --> 09:41.920
and it will look different.

09:45.250 --> 09:45.790
Every time.

09:48.640 --> 09:52.060
I could also look at the colors it picked.

09:53.750 --> 09:55.100
as a list of colors.

09:57.740 --> 10:00.260
I could also look at this like

10:00.260 --> 10:04.370
fancy chart of colors. This is

10:04.370 --> 10:06.920
too small. So let me show you this.

10:06.920 --> 10:10.400
So basically the same thing.

10:10.400 --> 10:15.650
This is actually a cross-section in HLC space,

10:16.310 --> 10:18.650
and the colors it picked are these like

10:18.650 --> 10:19.520
white circles.

10:20.660 --> 10:23.060
So that's that.

10:24.740 --> 10:26.150
But like I said, I'm not

10:26.150 --> 10:30.170
fully satisfied, because most of time the

10:30.170 --> 10:32.540
colors are pretty boring from it.

10:33.770 --> 10:36.320
I could think of some

10:36.320 --> 10:38.570
ways to improve this. For example I

10:38.570 --> 10:43.485
could choose different patterns for the color

10:43.490 --> 10:47.540
samples. but I don't know of any

10:47.900 --> 10:49.880
good patterns. So I need to try

10:49.880 --> 10:52.130
things out. And then another way is

10:52.130 --> 10:59.960
probably to use different color spaces like the HSL, or HSV.

10:59.960 --> 11:01.100
Again I need to try this out.

11:02.240 --> 11:04.880
So yeah there are room for improvements.

11:05.120 --> 11:07.220
If you... If you have and idea,

11:07.520 --> 11:09.860
you know, let me know, and we

11:09.860 --> 11:10.580
can try it out.

11:11.960 --> 11:13.610
So that's the end of my talk.

11:13.880 --> 11:17.390
Hopefully you have some new ideas.

11:17.450 --> 11:20.240
Thanks for listening in, and yeah.

11:20.240 --> 11:22.400
Go create more themes because we can't have enough.

11:22.400 --> 11:23.540
Thanks!