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
|
WEBVTT
00:06.399 --> 00:07.670
Hello, everyone. My name is
00:07.670 --> 00:08.800
Laszlo Krajnikovszkij,
00:08.800 --> 00:10.559
and today I would like to share
00:10.559 --> 00:12.000
some ideas about extending
00:12.000 --> 00:15.200
the model of Emacs to other applications.
00:15.200 --> 00:16.720
Brief introduction of myself:
00:16.720 --> 00:18.400
I am from Budapest, Hungary;
00:18.400 --> 00:20.320
and I have a background
00:20.320 --> 00:21.760
in Financial Economics,
00:21.760 --> 00:24.480
but by occupation I run
00:24.480 --> 00:26.320
a software development company
00:26.320 --> 00:29.119
where I mostly do product management.
00:29.119 --> 00:34.399
I try to do most of my work from Emacs.
00:34.399 --> 00:36.160
I've been using it for the past
00:36.160 --> 00:37.200
two or three years
00:37.200 --> 00:39.120
as a computer science hobby
00:39.120 --> 00:41.280
and this fascinating piece of software
00:41.280 --> 00:44.239
taught me a lot of different concepts
00:44.239 --> 00:46.000
about software architecture
00:46.000 --> 00:48.800
and programming languages,
00:48.800 --> 00:51.440
and also raised a lot of
00:51.440 --> 00:52.719
philosophical questions
00:52.719 --> 00:55.760
about human-computer interaction.
00:55.760 --> 00:57.039
I've been mostly using it
00:57.039 --> 00:59.680
for organizing my personal information,
00:59.680 --> 01:03.600
writing notes and tracking my agenda,
01:03.600 --> 01:05.519
but occasionally, I've also used it
01:05.519 --> 01:07.119
for reading and writing code
01:07.119 --> 01:09.360
and for also reading news, email,
01:09.360 --> 01:12.479
and browsing the web.
01:12.479 --> 01:16.400
What do I mean by the 'model' of Emacs?
01:16.400 --> 01:18.479
For me, the 'model' of Emacs is about
01:18.479 --> 01:21.920
the interaction model.
01:21.920 --> 01:24.880
And it's not... Emacs is just a tool
01:24.880 --> 01:26.560
for interacting with the computer.
01:26.560 --> 01:28.640
It's sort of a universal interface
01:28.640 --> 01:31.119
that allows for consistency
01:31.119 --> 01:33.280
across different apps,
01:33.280 --> 01:36.240
because everything is brought down to
01:36.240 --> 01:39.200
an Emacs buffer, which is a
01:39.200 --> 01:42.399
text-oriented interface,
01:42.399 --> 01:44.005
but that can have consistent
01:44.005 --> 01:44.880
keybinding scheme,
01:44.880 --> 01:46.960
they have consistent color scheme,
01:46.960 --> 01:50.640
and consistent workflow in general.
01:50.640 --> 01:53.200
Also, Emacs has a lot of functionality
01:53.200 --> 01:55.920
and utilizes mnemonic key bindings
01:55.920 --> 01:57.680
for calling functions,
01:57.680 --> 01:59.920
which is much more powerful than
01:59.920 --> 02:02.000
navigating contextual menus
02:02.000 --> 02:03.840
with a pointer,
02:03.840 --> 02:07.119
because the functions that are
02:07.119 --> 02:08.239
repeated the most
02:08.239 --> 02:10.640
are then ingrained in the muscle memory,
02:10.640 --> 02:12.879
therefore reducing the lag
02:12.879 --> 02:15.680
between the thought that is occurring
02:15.680 --> 02:17.520
in your mind, and its reflection
02:17.520 --> 02:21.280
on your computer screen.
02:21.280 --> 02:23.040
And also, Emacs provides
02:23.040 --> 02:25.360
a huge number of packages
02:25.360 --> 02:28.560
that can all be inspected and modified,
02:28.560 --> 02:30.640
and extended, and recombined,
02:30.640 --> 02:35.599
and just provides the best-possible
02:35.599 --> 02:37.840
malleable system experience
02:37.840 --> 02:42.080
that can potentially lead to
02:42.080 --> 02:44.080
almost any desired setup
02:44.080 --> 02:47.599
for the end-user.
02:47.599 --> 02:49.440
So, Emacs is great,
02:49.440 --> 02:52.239
but I need to use a lot of
02:52.239 --> 02:53.280
different other tools
02:53.280 --> 02:55.200
to collaborate with my coworkers,
02:55.200 --> 02:57.519
with my clients and vendors.
02:57.519 --> 03:00.080
On a normal day, I would need to be
03:00.080 --> 03:02.640
switching between five to six
03:02.640 --> 03:04.319
different web applications
03:04.319 --> 03:07.840
and chat applications.
03:07.840 --> 03:11.840
They all have the same flaws.
03:11.840 --> 03:14.879
They all lack customizability,
03:14.879 --> 03:16.560
because it was never intended
03:16.560 --> 03:19.280
by the original developers of the app
03:19.280 --> 03:21.120
that the end user can tinker
03:21.120 --> 03:24.239
with the product they're creating.
03:24.239 --> 03:29.120
But also, those apps are cloud-based,
03:29.120 --> 03:33.599
and usually not very good for privacy,
03:33.599 --> 03:36.480
and this also creates limitations
03:36.480 --> 03:40.080
for offline-based workflows,
03:40.080 --> 03:43.599
or for in general not relying on
03:43.599 --> 03:44.560
the internet connection
03:44.560 --> 03:46.959
to use something.
03:46.959 --> 03:49.440
All these applications,
03:49.440 --> 03:50.720
they create a situation
03:50.720 --> 03:53.040
when there's a lot of context-switching
03:53.040 --> 03:55.360
between different apps,
03:55.360 --> 03:56.959
and this context-switching
03:56.959 --> 03:59.920
comes from different color schemes,
03:59.920 --> 04:03.280
different workflows in general
04:03.280 --> 04:04.879
for different apps.
04:04.879 --> 04:06.400
So, there is always
04:06.400 --> 04:10.400
this little frame of time
04:10.400 --> 04:13.599
where you need to orient yourself
04:13.599 --> 04:15.280
in this other application.
04:15.280 --> 04:17.280
Of course, over time,
04:17.280 --> 04:18.799
it gets more automated,
04:18.799 --> 04:20.560
but still, this context switching
04:20.560 --> 04:26.720
is very bad for productivity.
04:26.720 --> 04:30.080
These apps don't support very well
04:30.080 --> 04:31.759
the keyboard-driven workflows,
04:31.759 --> 04:33.520
because the default set of keybindings
04:33.520 --> 04:34.479
is always limited,
04:34.479 --> 04:39.280
and you always need to resort to
04:39.280 --> 04:44.160
mouse-driven workflows.
04:44.160 --> 04:46.400
But Emacs has some issues
04:46.400 --> 04:48.320
as a tool for work as well.
04:48.320 --> 04:50.800
First of all, it lacks integration
04:50.800 --> 04:51.759
with all these tools,
04:51.759 --> 04:54.560
so I constantly need to be switching
04:54.560 --> 04:57.759
between Emacs and these applications,
04:57.759 --> 04:59.919
or basically, my web browser.
04:59.919 --> 05:03.039
Emacs is very good for text input
05:03.039 --> 05:04.720
and for editing text,
05:04.720 --> 05:07.039
but it's not always perfect
05:07.039 --> 05:09.440
for reading information
05:09.440 --> 05:11.199
from an Emacs buffer,
05:11.199 --> 05:12.080
because it doesn't
05:12.080 --> 05:16.560
render images and HTML properly.
05:16.560 --> 05:18.800
Also, Emacs lacks performance
05:18.800 --> 05:19.919
under heavy load,
05:19.919 --> 05:21.840
so when you try to run
05:21.840 --> 05:23.280
too many things in parallel,
05:23.280 --> 05:26.560
the single-threaded nature of Emacs
05:26.560 --> 05:28.880
just makes it hang.
05:28.880 --> 05:30.960
For this reason,
05:30.960 --> 05:32.560
I wouldn't rely on Emacs
05:32.560 --> 05:38.320
to take care of all my system processes.
05:38.320 --> 05:40.400
And of course, it has some
05:40.400 --> 05:42.240
legacy UI limitations
05:42.240 --> 05:46.400
being a software that was written
05:46.400 --> 05:49.039
40 years ago.
05:49.039 --> 05:53.759
This results in a very limited usability
05:53.759 --> 05:59.680
on mobile and other touch devices.
05:59.680 --> 06:01.759
I've been thinking
06:01.759 --> 06:03.840
about a hybrid approach
06:03.840 --> 06:05.840
that you could still use Emacs
06:05.840 --> 06:10.080
as a core of your life,
06:10.080 --> 06:11.840
and then extend it
06:11.840 --> 06:15.120
with adjacent web applications
06:15.120 --> 06:16.960
where Emacs can be used
06:16.960 --> 06:21.600
as a text processing backend
06:21.600 --> 06:24.080
and use Org mode files
06:24.080 --> 06:25.600
as a universal format
06:25.600 --> 06:29.600
for converting textual data,
06:29.600 --> 06:33.199
and then If emacs can be
06:33.199 --> 06:36.639
connected with those applications
06:36.639 --> 06:37.520
that I mentioned
06:37.520 --> 06:39.520
a couple of slides before
06:39.520 --> 06:41.280
through their API, and you can have
06:41.280 --> 06:43.199
a two-way communication between them,
06:43.199 --> 06:46.000
and just export in JSON, let's say,
06:46.000 --> 06:47.440
and then convert to Org mode,
06:47.440 --> 06:49.039
and then use the Org mode
06:49.039 --> 06:52.960
for these local web apps.
06:52.960 --> 06:57.599
Then you can use Emacs for editing,
06:57.599 --> 07:00.800
and Org mode, but then you can use
07:00.800 --> 07:03.360
this adjacent web application
07:03.360 --> 07:05.039
for viewing information,
07:05.039 --> 07:08.720
making small edits, and in general,
07:08.720 --> 07:11.692
possibly have an enhanced
07:11.692 --> 07:14.639
user-defined UI that is
07:14.639 --> 07:17.039
directly connected to Emacs.
07:17.039 --> 07:19.759
Emacs Application Framework
07:19.759 --> 07:21.520
is a project that tries to achieve
07:21.520 --> 07:23.840
a common goal, but it tries to
07:23.840 --> 07:24.639
achieve that through
07:24.639 --> 07:25.520
displaying everything
07:25.520 --> 07:27.840
in the Emacs buffer,
07:27.840 --> 07:28.840
whereas I'm thinking
07:28.840 --> 07:30.800
if it can be displayed
07:30.800 --> 07:33.759
in any web browser, but utilize
07:33.759 --> 07:36.560
Emacs Application Framework API
07:36.560 --> 07:38.639
as a bridge between Elisp
07:38.639 --> 07:40.960
and Python and Javascript,
07:40.960 --> 07:41.759
so you can use
07:41.759 --> 07:44.879
the modern front-end frameworks
07:44.879 --> 07:48.560
to create those web interfaces easier
07:48.560 --> 07:49.280
and connect them
07:49.280 --> 07:53.919
with Emacs functionality.
07:53.919 --> 07:57.280
These user-controlled web apps
07:57.280 --> 08:04.126
would basically result in
08:04.126 --> 08:05.680
the user connecting
08:05.680 --> 08:10.319
to this external cloud-based tool,
08:10.319 --> 08:13.759
let's say Asana, but then
08:13.759 --> 08:16.400
process everything through Org mode
08:16.400 --> 08:19.840
and then display in an Org mode file
08:19.840 --> 08:24.720
or display in this enhanced way
08:24.720 --> 08:28.960
through the adjacent local web app,
08:28.960 --> 08:31.280
a front-end for which
08:31.280 --> 08:34.080
could be written in any .js framework
08:34.080 --> 08:37.440
for front-end development.
08:37.440 --> 08:42.159
I encourage everyone in the community
08:42.159 --> 08:45.279
who is interested in similar questions
08:45.279 --> 08:48.160
to share their opinion
08:48.160 --> 08:50.959
about the potential risks and drawbacks,
08:50.959 --> 08:53.120
about any other ways
08:53.120 --> 08:54.640
to achieve a similar goal,
08:54.640 --> 08:57.519
if anyone else is doing this already
08:57.519 --> 08:59.920
that i might not know about,
08:59.920 --> 09:02.399
and in general, just share ideas
09:02.399 --> 09:03.760
about what else can be done
09:03.760 --> 09:07.519
to integrate Emacs with more stuff
09:07.519 --> 09:10.640
and how Emacs can become
09:10.640 --> 09:14.080
more approachable by non-technical users
09:14.080 --> 09:16.160
because I would love to see
09:16.160 --> 09:20.080
more people using Emacs, to be honest.
09:20.080 --> 09:21.680
Yeah. Thank you very much
09:21.680 --> 09:23.440
for listening to this talk.
09:23.440 --> 09:26.080
I will be taking questions
09:26.080 --> 09:27.600
and feedback in the pad
09:27.600 --> 09:31.920
after the conference.
09:31.920 --> 09:33.920
You can reach me through this email
09:33.920 --> 09:36.720
laszlo@laszlo.is .
09:36.720 --> 09:39.600
I'll be posting
09:39.600 --> 09:41.760
some more detailed articles
09:41.760 --> 09:44.959
and description of this idea
09:44.959 --> 09:47.166
that I was trying to present today.
09:47.166 --> 09:49.040
[captions by Laszlo]
|