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
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
|
WEBVTT captioned by anush
NOTE GNU Emacs and its purpose
00:00:00.000 --> 00:00:08.960
Hello! I'm going to talk about what I would like to see
00:00:08.960 --> 00:00:11.240
in GNU Emacs in the future,
00:00:11.240 --> 00:00:17.600
and what I would prefer not to find there.
00:00:17.600 --> 00:00:22.080
This is all within the context
00:00:22.080 --> 00:00:25.360
of GNU Emacs and its purpose.
00:00:25.360 --> 00:00:30.600
GNU Emacs is a part of the GNU operating system,
00:00:30.600 --> 00:00:33.300
and the purpose of the GNU operating system
00:00:33.400 --> 00:00:38.840
is not simply to do a good job technically,
00:00:38.840 --> 00:00:42.640
not simply to be good to use.
00:00:42.640 --> 00:00:45.760
Its main purpose, its overall purpose,
00:00:45.760 --> 00:00:48.560
is to give people freedom,
00:00:48.560 --> 00:00:54.760
and to help them value and defend that freedom.
00:00:54.760 --> 00:01:00.160
A GNU package, by being a convenient, well-written program,
00:01:00.160 --> 00:01:06.000
should contribute to that overall ethical and social goal,
00:01:06.000 --> 00:01:10.440
and not only to the usefulness of our software.
00:01:10.440 --> 00:01:14.080
This is true for GNU Emacs
00:01:14.080 --> 00:01:18.720
as much as it is for any other free program we’ve developed.
00:01:18.720 --> 00:01:25.320
In fact, GNU Emacs is the first GNU program that I released.
00:01:25.320 --> 00:01:28.800
I had written some other things before that,
00:01:28.800 --> 00:01:30.600
but didn't release them at that time.
00:01:30.600 --> 00:01:34.200
There was no particular use in doing so.
00:01:34.200 --> 00:01:36.007
So it was through GNU Emacs
00:01:36.107 --> 00:01:38.307
that I learned about various things
00:01:38.407 --> 00:01:44.240
such as software licenses and how to defend freedom.
00:01:44.240 --> 00:01:50.407
You're of course familiar with what GNU Emacs is today,
00:01:50.507 --> 00:01:54.240
thanks to the contributions of thousands of other people
00:01:54.340 --> 00:01:56.967
who came after me.
00:01:57.067 --> 00:01:58.880
What would I like?
00:01:58.880 --> 00:02:01.433
What would other people like?
00:02:01.533 --> 00:02:06.480
Lots of people come to Emacs familiar with VS Code,
00:02:06.480 --> 00:02:10.520
and they say, "Please make Emacs more like VS Code.
00:02:10.520 --> 00:02:15.840
Change everything that you did in the 1980s and 90s
00:02:15.840 --> 00:02:18.320
to be like that other thing."
00:02:18.320 --> 00:02:24.200
That wouldn't be feasible even if we wanted to.
00:02:24.200 --> 00:02:30.440
Our goal is not to be... not resembling VS Code.
00:02:30.440 --> 00:02:33.540
Any resemblance is coincidental.
NOTE Lisp as the extension language
00:02:33.640 --> 00:02:37.940
But in particular,
00:02:38.040 --> 00:02:43.774
we do not want to have extension languages other than Lisp.
00:02:43.874 --> 00:02:47.474
Emacs Lisp is the variant of Lisp
00:02:47.574 --> 00:02:49.474
that we've always supported,
00:02:49.574 --> 00:02:52.960
which has evolved along with Emacs.
00:02:52.960 --> 00:02:57.400
We can conceivably have Scheme as well,
00:02:57.400 --> 00:03:01.040
if we can sufficiently solve the problems,
00:03:01.140 --> 00:03:03.760
the technical problems of making Scheme
00:03:03.760 --> 00:03:06.480
and Emacs Lisp interoperate.
00:03:06.480 --> 00:03:11.600
We did some design work, I think that was with Tom Lord,
00:03:11.600 --> 00:03:15.880
whom the community will greatly miss.
00:03:15.880 --> 00:03:19.240
In the 1990s, there are challenges that remain;
00:03:19.340 --> 00:03:21.360
maybe it can be done.
00:03:21.360 --> 00:03:27.960
But a non-Lispy language would be a mistake.
00:03:27.960 --> 00:03:33.000
It would divert our development focus into areas
00:03:33.000 --> 00:03:37.480
that we don't need, languages that are less powerful,
00:03:37.480 --> 00:03:46.280
less beautiful, and less desirable for the purpose.
NOTE JavaScript versus freedom
00:03:46.280 --> 00:03:52.120
However, the language that we above all shouldn't support
00:03:52.120 --> 00:03:57.233
is JavaScript. That's not because of the language itself.
00:03:57.333 --> 00:04:00.480
I don't know the JavaScript language,
00:04:00.480 --> 00:04:04.200
I've heard people say it's rather clumsy
00:04:04.200 --> 00:04:07.520
and not well designed, but I don't know this.
00:04:07.520 --> 00:04:12.400
In any case, it's not what my views are based on.
00:04:12.400 --> 00:04:14.740
There's something much worse about JavaScript,
00:04:14.840 --> 00:04:18.800
which is not the language itself, but how people use it.
00:04:18.800 --> 00:04:23.640
Namely, it's been adopted as a way for a network server
00:04:23.640 --> 00:04:26.120
to send a program to your machine
00:04:26.120 --> 00:04:30.120
without your even noticing, so that this program,
00:04:30.120 --> 00:04:35.007
written by you don't know who, will run on your computer
00:04:35.107 --> 00:04:37.200
and do you don't know what.
00:04:37.200 --> 00:04:39.674
And you're supposed to just trust
00:04:39.774 --> 00:04:43.640
all and sundry developers of software
00:04:43.640 --> 00:04:45.840
for the sites you visit,
00:04:45.840 --> 00:04:51.320
which very commonly do malicious things, often unknown
00:04:51.320 --> 00:04:55.680
to the people who are running the server itself.
00:04:55.680 --> 00:04:59.320
They paid someone else to design a website
00:04:59.320 --> 00:05:01.307
and they probably said, oh,
00:05:01.407 --> 00:05:04.440
make it fashionable and attractive.
00:05:04.440 --> 00:05:09.760
And they didn't insist, don't snoop on the visitors,
00:05:09.760 --> 00:05:12.840
even if they understood what the issue was.
00:05:12.840 --> 00:05:20.480
So these sites snoop. It's a serious problem.
00:05:20.480 --> 00:05:24.080
The problem comes not from the language JavaScript,
00:05:24.080 --> 00:05:28.680
but from the fact that browsers, by default,
00:05:28.680 --> 00:05:32.440
will pull in JavaScript code that gets sent to them
00:05:32.440 --> 00:05:35.833
and run it to do anything at all.
00:05:35.933 --> 00:05:39.320
Emacs is supposed to defend your freedom.
00:05:39.320 --> 00:05:42.520
It's supposed to help you to defend your freedom,
00:05:42.520 --> 00:05:45.640
and lead you to defend your freedom,
00:05:45.640 --> 00:05:47.200
which means it shouldn't lead you
00:05:47.200 --> 00:05:50.960
to throw your freedom away as soon as you visit a site
00:05:50.960 --> 00:05:53.920
that tries to send you a non-free program
00:05:53.920 --> 00:05:58.280
to run straight off of that other machine.
00:05:58.280 --> 00:06:04.080
So it's important not to lead users
00:06:04.080 --> 00:06:06.520
to do computing this way.
00:06:06.520 --> 00:06:10.800
So what are some good things
00:06:10.800 --> 00:06:14.640
that we would want instead of this?
NOTE Updating "An Introduction to Emacs Lisp Programming"
00:06:14.640 --> 00:06:19.774
One thing we want
00:06:19.874 --> 00:06:26.474
is to update the "Introduction to Emacs Lisp Programming"
00:06:26.574 --> 00:06:29.480
by the late Bob Chassell.
00:06:29.480 --> 00:06:34.720
It's a book that makes it easy for even non-programmers
00:06:34.720 --> 00:06:38.000
to learn to write simple programs in Emacs Lisp.
00:06:38.000 --> 00:06:41.200
And from there, they can go on to do better.
00:06:41.200 --> 00:06:44.800
We made a pretty big change in Emacs Lisp
00:06:44.800 --> 00:06:49.480
a few years ago, implementing lexical scoping by default.
00:06:49.480 --> 00:06:57.360
Originally, Emacs Lisp used to be entirely dynamic scoping,
00:06:57.360 --> 00:07:01.960
like some of the earliest Lisp interpreters.
00:07:01.960 --> 00:07:06.520
This is a change that should have a careful job
00:07:06.520 --> 00:07:10.560
of updating for the introduction.
00:07:10.560 --> 00:07:14.600
I'm sure we've made it clear in the reference manual,
00:07:14.600 --> 00:07:18.400
but that's not what beginners read first.
00:07:18.400 --> 00:07:23.307
We need something to teach them in lexical scoping.
NOTE More memorable package names
00:07:23.407 --> 00:07:30.440
Another thing we could use is to make it easier
00:07:30.440 --> 00:07:33.880
to understand the facilities that we have.
00:07:33.880 --> 00:07:38.560
For instance, I think every package
00:07:38.560 --> 00:07:42.200
that you might load into your Emacs and run
00:07:42.200 --> 00:07:47.680
should have a name that helps you remember what job it does.
00:07:47.680 --> 00:07:51.274
It doesn't have to be super long to tell you
00:07:51.374 --> 00:07:53.507
what job that package does.
00:07:53.607 --> 00:07:56.774
You can read the description to learn that.
00:07:56.874 --> 00:07:59.600
But once you've read the description,
00:07:59.600 --> 00:08:02.974
it should be memorable. When you see that name again,
00:08:03.074 --> 00:08:06.507
you should realize, oh, that's the package I could use
00:08:06.607 --> 00:08:11.880
to do "less" and so. We've had a tendency
00:08:11.880 --> 00:08:17.840
to give packages names for the sake of pure wordplay
00:08:17.940 --> 00:08:23.474
or lack of obvious meaning,
00:08:23.574 --> 00:08:28.188
and I think we should add on, to those packages,
00:08:28.189 --> 00:08:31.707
names that people will remember.
NOTE Simplifying the command interface
00:08:31.807 --> 00:08:39.200
Also, there are ways we can simplify the command interface
00:08:39.200 --> 00:08:43.760
of Emacs. For instance, there are many different parameters
00:08:43.760 --> 00:08:48.000
users can specify that can have several values,
00:08:48.000 --> 00:08:51.707
and sometimes you do various kinds of editing
00:08:51.807 --> 00:08:54.440
in one session. That's normal in Emacs,
00:08:54.440 --> 00:08:57.740
and you might want different parameter settings
00:08:57.840 --> 00:09:00.307
for different kinds of editing.
00:09:00.407 --> 00:09:06.200
So you specify parameter value A, do some editing,
00:09:06.200 --> 00:09:10.240
you specify parameter value B, and do some editing,
00:09:10.240 --> 00:09:13.720
and you'd switch back and forth, so you want
00:09:13.720 --> 00:09:17.440
to switch back and forth between these parameters.
00:09:17.440 --> 00:09:22.607
I think we should aim ...
00:09:22.707 --> 00:09:26.640
People have added various commands to switch
00:09:26.740 --> 00:09:30.400
between the last two or n values of this parameter,
00:09:30.500 --> 00:09:32.674
and another command to switch
00:09:32.774 --> 00:09:36.740
between the last two or n values of this [other] parameter,
00:09:36.840 --> 00:09:41.360
and then that parameter, you know, and that parameter.
00:09:41.360 --> 00:09:44.667
I think we should be able to have
00:09:44.767 --> 00:09:49.120
a switch between the last n values command
00:09:49.120 --> 00:09:54.320
that works on various different parameters,
00:09:54.320 --> 00:09:57.040
and thus makes it easy to remember
00:09:57.040 --> 00:09:59.240
that there is this facility.
00:09:59.340 --> 00:10:03.774
Because right now the commands to do that are all ad-hoc,
00:10:03.874 --> 00:10:08.540
and if you don't use a toggling among the last n values
00:10:08.640 --> 00:10:11.740
of a given parameter, you won't know how to do it.
00:10:11.840 --> 00:10:15.267
It won't be obvious that there is a way,
00:10:15.367 --> 00:10:17.667
so you'd have to go to a suitable manual
00:10:17.767 --> 00:10:20.100
and study for a while to think of that.
00:10:20.100 --> 00:10:23.620
We could make this easily discoverable.
NOTE Modularity
00:10:23.620 --> 00:10:30.140
There is another kind of modularity that's important,
00:10:30.140 --> 00:10:34.100
and that is modularity at the level of maintenance.
00:10:34.100 --> 00:10:38.207
This is something all programmers know about, of course,
00:10:38.307 --> 00:10:43.300
but in Emacs, various parts interact with other parts,
00:10:43.300 --> 00:10:47.980
and we've tried to make them modular in design
00:10:47.980 --> 00:10:50.380
by using lots of hooks,
00:10:50.380 --> 00:10:54.380
but we haven't gone as far as we could.
00:10:54.380 --> 00:10:58.060
With some effort, we could find calls
00:10:58.060 --> 00:11:00.220
from over here to over there
00:11:00.220 --> 00:11:03.140
that could be replaced by use of hooks,
00:11:03.140 --> 00:11:05.940
so that we could reduce the extent
00:11:05.940 --> 00:11:09.874
to which you need to know about one part of Emacs
00:11:09.974 --> 00:11:12.607
to maintain another part of Emacs,
00:11:12.707 --> 00:11:17.580
and I think that as we keep adding more facilities to Emacs,
00:11:17.580 --> 00:11:22.220
this kind of modularity will be an investment that pays off.
NOTE Editing formatted text
00:11:22.220 --> 00:11:27.140
There’s one big area of features
00:11:27.240 --> 00:11:30.700
that I would like to see in Emacs,
00:11:30.800 --> 00:11:33.180
and that's the ability to edit
00:11:33.180 --> 00:11:40.340
formatted documents in WYSIWYG, to be able to edit
00:11:40.340 --> 00:11:47.940
a letter or a scientific mathematical paper with formulas
00:11:47.940 --> 00:11:52.900
or a nicely laid out manual,
00:11:52.900 --> 00:11:56.660
looking at what it's really going to look like.
00:11:56.660 --> 00:12:00.460
Now we have free software to do this.
00:12:00.460 --> 00:12:04.660
For instance, I use LibreOffice some of the time.
00:12:04.660 --> 00:12:08.100
Sometimes it's faster than writing something
00:12:08.100 --> 00:12:11.860
to be formatted with a text formatter
00:12:11.860 --> 00:12:16.180
and then formatting it. But when I use LibreOffice,
00:12:16.180 --> 00:12:19.220
I always miss the commands and facilities,
00:12:19.220 --> 00:12:22.574
the editing facilities of Emacs.
00:12:22.674 --> 00:12:26.500
I'd like to have them both together, something with
00:12:26.500 --> 00:12:30.340
the text formatting capabilities of LibreOffice
00:12:30.340 --> 00:12:36.060
or even better of TeX, but the editing commands
00:12:36.060 --> 00:12:40.300
and facilities of Emacs. This would be a big job,
00:12:40.300 --> 00:12:45.980
but it can be made up of a lot of medium-sized jobs.
00:12:45.980 --> 00:12:50.020
If people start working on those medium-sized jobs,
00:12:50.020 --> 00:12:52.060
then in a number of years
00:12:52.060 --> 00:12:55.460
we'll have something absolutely amazing.
NOTE Not the equivalent of a modern web browser
00:12:55.460 --> 00:13:01.140
But one thing I think we really shouldn't have
00:13:01.140 --> 00:13:06.500
is the equivalent of a modern web browser.
00:13:06.500 --> 00:13:10.940
The World Wide Web started out in the 1990s
00:13:10.940 --> 00:13:13.774
in a much simpler form,
00:13:13.874 --> 00:13:17.820
where a web page described its contents,
00:13:17.820 --> 00:13:21.180
and the web browser laid them out,
00:13:21.180 --> 00:13:23.707
and the user could parameterize
00:13:23.807 --> 00:13:27.140
how to lay out various kinds of situations.
00:13:27.140 --> 00:13:31.707
This was not only convenient for users
00:13:31.807 --> 00:13:35.874
who wanted to control things and understand things,
00:13:35.974 --> 00:13:39.640
it was also freedom-respecting
00:13:39.740 --> 00:13:43.020
because the layout was done by your browser.
00:13:43.020 --> 00:13:48.100
If you had a free browser, you were in control,
00:13:48.100 --> 00:13:51.620
even though the browser was complicated already.
00:13:51.620 --> 00:13:54.707
But starting around two decades ago,
00:13:54.807 --> 00:13:58.820
there was an explosion in the complexity of browsers
00:13:58.820 --> 00:14:02.780
as companies wanted to have more and more control
00:14:02.780 --> 00:14:07.700
over exactly what would appear on a user's screen.
00:14:07.700 --> 00:14:12.374
So they invented lots of features to control that,
00:14:12.474 --> 00:14:15.907
features where the user couldn't really customize
00:14:16.007 --> 00:14:18.307
how something would actually appear
00:14:18.407 --> 00:14:21.207
because the whole point was that
00:14:21.307 --> 00:14:23.707
the company could control that.
00:14:23.807 --> 00:14:27.020
And JavaScript was sort of the ultimate level
00:14:27.020 --> 00:14:32.007
of "the company controls everything."
00:14:32.107 --> 00:14:38.500
Because of this, going beyond the simple level
00:14:38.500 --> 00:14:43.540
of web page formatting features in Emacs
00:14:43.540 --> 00:14:50.940
is basically heading down a path that leads to subjugation.
00:14:50.940 --> 00:14:54.740
It's a path that we need to stay away from.
00:14:54.740 --> 00:15:00.307
It's a path to an unjust world of computing
00:15:00.407 --> 00:15:03.420
that you can easily see around you.
00:15:03.420 --> 00:15:08.600
Web browsers nowadays are designed to display ads
00:15:08.700 --> 00:15:11.567
that you may not want to see.
00:15:11.667 --> 00:15:17.900
They're designed for DRM.
00:15:17.900 --> 00:15:22.420
They're designed for companies to snoop on you
00:15:22.420 --> 00:15:26.300
in unobvious ways. And all of that
00:15:26.300 --> 00:15:28.980
we should protect ourselves from,
00:15:28.980 --> 00:15:31.300
protect our users from.
NOTE Getting involved
00:15:31.300 --> 00:15:39.980
So I hope that some of you will be enthusiastic
00:15:39.980 --> 00:15:42.060
about some of these changes,
00:15:42.060 --> 00:15:46.940
especially towards editing formatted text.
00:15:46.940 --> 00:15:51.980
If you want to get involved, we have
00:15:51.980 --> 00:15:57.820
a development discussion list called emacs-devel@gnu.org.
00:15:57.820 --> 00:16:02.380
You can join that. You can also,
00:16:02.380 --> 00:16:05.740
if you get interested in working on a package
00:16:05.740 --> 00:16:09.500
and you're not an experienced Emacs Lisp developer,
00:16:09.500 --> 00:16:13.640
it's a very good idea to look for an experienced developer
00:16:13.740 --> 00:16:14.980
to talk with.
00:16:14.980 --> 00:16:19.220
Make sure you can write programs in Emacs Lisp first.
00:16:19.220 --> 00:16:24.260
It's not useful to take up the expert’s time learning that.
00:16:24.260 --> 00:16:27.307
You can still learn it from the introduction.
00:16:27.407 --> 00:16:31.660
But after that, when it's a matter of how to design
00:16:31.660 --> 00:16:36.180
your favorite package, do have a discussion with developers.
00:16:36.180 --> 00:16:39.060
They'll give you design ideas
00:16:39.060 --> 00:16:43.180
that will help you make a package that we put into Emacs.
00:16:43.180 --> 00:17:01.500
Now it's time for questions.
|