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
757
758
759
|
% Created 2023-11-26 Sun 14:10
% Intended LaTeX compiler: pdflatex
\documentclass[article,11pt,notitlepage,notitle,oneside,twocolumn]{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{longtable}
\usepackage{wrapfig}
\usepackage{rotating}
\usepackage[normalem]{ulem}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{capt-of}
\usepackage{hyperref}
\usepackage[russian]{babel}
\usepackage[protrusion=true,activate={true,nocompatibility},final,tracking=true,kerning=true,spacing=true,factor=1100]{microtype}\SetTracking{encoding={*}, shape=sc}{40}
\usetheme{Goettingen}
\usecolortheme{default}
\author{CC-0: No Rights Reserved}
\date{\href{https://w96k.dev}{w96k.dev} \textit{<2023-11-25 Sat>}}
\title{Emacs: what user freedom is about}
\hypersetup{
pdfauthor={CC-0: No Rights Reserved},
pdftitle={Emacs: what user freedom is about},
pdfkeywords={},
pdfsubject={},
pdfcreator={Emacs 29.1 (Org mode 9.6.6)},
pdflang={Russian}}
\begin{document}
\maketitle
\section*{Вступление}
\label{sec:org15a6e21}
\begin{frame}[label={sec:org735be7b}]{Для кого доклад}
Доклад нацелен в первую очередь на тех, кто по тем или иным причинам
не знаком с редактором GNU Emacs и хотел бы узнать причины для начала
его использования. Одна из таких причин — свобода.
\end{frame}
\section*{GNU}
\label{sec:orgbfac1ca}
\begin{frame}[label={sec:org2e4822d}]{GNU/Emacs}
\begin{center}
\includegraphics[width=100]{./emacs.png}
\end{center} \alert{GNU/Emacs} -- это свободный немодальный текстовый
редактор общего назначения, созданный в 1985 году Ричардом
Столлманом. Редактор обновляется по сей день и доступен на многих
платформах в том числе Windows.
\end{frame}
\begin{frame}[label={sec:org0d80ccd}]{Кто использовал Emacs}
Имаксом в той или иной степени пользовались следующие люди:
\begin{itemize}
\item \href{https://en.wikipedia.org/wiki/Linus\_Torvald}{Linus Torvalds}
\item \href{https://en.wikipedia.org/wiki/Donald\_Knuth}{Donald Knuth}
\item \href{https://en.wikipedia.org/wiki/Yukihiro\_Matsumoto}{Yukihiro Matsumoto}
\item \href{https://en.wikipedia.org/wiki/Guido\_van\_rossum}{Guido van Rossum}
\item \href{https://en.wikipedia.org/wiki/Rich\_Hickey}{Rich Hickey}
\item \href{https://en.wikipedia.org/wiki/Joe\_Armstrong\_(programmer)}{Joe Armstrong}
\item \href{https://en.wikipedia.org/wiki/Eric\_Raymond}{Eric Raymond}
\item \href{https://en.wikipedia.org/wiki/Andrei\_Alexandrescu}{Andrei Alexandrescu}
\item \href{https://en.wikipedia.org/wiki/Edward\_Snowden}{Edward Snowden}
\end{itemize}
\end{frame}
\begin{frame}[label={sec:orgfe786b2}]{Главный экран}
\begin{center}
\includegraphics[height=100]{./emacs-splash.png}
\end{center}
Если открыть Имакс, то нас встретит следующая надпись:\\[0pt]
\alert{Welcome to GNU Emacs, one component of the GNU/Linux operating system.}
Что это значит?
\end{frame}
\begin{frame}[label={sec:org55b1b54}]{GNU is not Unix}
\begin{center}
\includegraphics[height=60]{./gnu.png}
\end{center}
\alert{GNU} -- это проект фонда свободного программного обеспечения, который
содержит ПО, следующее четырём свободам:
\end{frame}
\begin{frame}[label={sec:org26b0f79},shrink=5]{Свободы GNU}
\begin{block}{Свобода 0}
Свобода выполнять программу как вам угодно в любых целях.
\end{block}
\begin{block}{Свобода 1}
Свобода изучать работу программы и модифицировать
программу, чтобы она выполняла ваши вычисления, как вы
пожелаете.
\end{block}
\begin{block}{Свобода 2}
Свобода передавать копии
\end{block}
\begin{block}{Свобода 3}
Свобода передавать копии своих измененных версий другим. Этим вы
можете дать всему сообществу возможность получать выгоду от ваших
изменений.
\end{block}
\end{frame}
\begin{frame}[label={sec:org201acd4}]{Больше о GNU}
Деятельность GNU, FSF и Ричарда Столлмана подробно описана в книге "\href{https://en.wikipedia.org/wiki/Free\_as\_in\_Freedom}{Free as in
Freedom}", которая доступна на русском языке.
\begin{center}
\includegraphics[width=100]{./gnu-book.jpeg}
\end{center}
\url{https://www.gnu.org/}
\end{frame}
\section*{Свобода}
\label{sec:org9bbd9ff}
\begin{frame}[label={sec:orga804a62}]{Определение свободы}
Свобо́да — состояние субъекта, в котором он является определяющей
причиной своих действий.
\end{frame}
\begin{frame}[label={sec:org78bf4ef}]{Свобода в контексте использования программ}
\begin{itemize}
\item Пользователь хочет изменить функционал программы
\item Для этого необходимо получить и изучить исходный код
\item У исходного кода должно быть разрешение на модификацию (открытая
или свободная лицензия)
\item Только тогда мы свободны внести свои изменения в программу
\end{itemize}
\end{frame}
\begin{frame}[label={sec:org190483a}]{Нюансы и сложности при модификации}
\begin{itemize}
\item Закрытость кода или использование закрытых компонентов
\item Недоступность документации API для изменений
\item Технические сложности: сложная процедура изменения даже малейшей части кода
\item Программа написана так, чтобы её не модифицировали (final классы,
private методы вот это всё)
\item Собственническая организация приёма патчей и принятия решений
\end{itemize}
\end{frame}
\begin{frame}[label={sec:org6a6bc8f}]{Свобода в контексте GNU Emacs}
GNU Emacs один из немногих редакторов, которые могут предоставить
свободу пользователю с наименьшими трудностями в реализации своих
идей.
\end{frame}
\begin{frame}[label={sec:org70e5356}]{Свобода Emacs: Свобода модификации}
GNU Emacs можно модифицировать практически как угодно. Не нравится
автокомплит, меняем или дописываем свой, не нравятся элементы
интерфейса убираем их, не нравится как выглядит кнопочка, у вас есть
средства чтобы исправить это. В мейнстримных редакторах так нельзя, а
если и можно, то есть существенные ограничения. В Emacs'е мы можем
менять не только конфигурацию, но и сам код используемых пакетов и
самого редактора.
\end{frame}
\begin{frame}[label={sec:org7d1f29e}]{Свобода Emacs: Использование для любых целей}
Вытекает из предыдущего. Так как у нас нет ограничений на модификацию,
то у нас появляется свобода использовать программу для любых
целей. Конечно Emacs в первую очередь заточен для работы с текстом, но
во-первых текст бывает разный, а во вторых Emacs покрывает некоторые
сферы применения без текста. Vim хоть кажется таким же свободным, этой
свободы не предоставляет, возможно это одно из фундаментальных
различий.
\end{frame}
\begin{frame}[label={sec:orgce6d726}]{Для чего можно использовать Emacs}
\begin{itemize}
\item Literate Programming
\item Создание \TeX{} / \LaTeX{} и иных документов документов
\item Email / IRC / XMPP / Telega / Fediverse и т.д.
\item Создание схем, графиков, рисование (ascii, svg)
\item Открытие и зачастую редактирование почти любого файла (бинарный
файл, изображение, видео, аудио, презентация, документ pdf)
\item Для управления системой (меняем громкость звука, убиваем
процессы, ставим пакеты)
\item Можно использовать в качество WM (window manager)
\item Играть в тетрис, шахматы и другие игры :)
\end{itemize}
Одним словом возможности реализации функционала ограничены в основном
только желанием человека создать что-то новое.
\end{frame}
\begin{frame}[label={sec:org828d558}]{Свобода Emacs: Любые способы взаимодействия}
Немного вытекает из предыдущего, но с программой можно
взаимодействовать не тольк путем ввода текста с клавиатуры.
\begin{itemize}
\item Можно активно использовать мышь, а можно только клавиатуру
\item Emacspeak позволяет использовать Emacs слепым людям
\item Есть сенсорный ввод при помощи жестов
\item Есть пакеты для голосового ввода
\item Есть поддержка RTL (right to left) и огромного числа кодировок и
языков
\item Можно с терминала, можно с графикой
\end{itemize}
\end{frame}
\begin{frame}[label={sec:orgd3e6222}]{Emacs как интерфейс к операционной системе}
Есть мнение, что Emacs настольно функциональный, что сам является
операционной системой. В целом это не так далеко от правды, так как
возможностей этого редактора хватает, чтобы много вещи операционной
системы заточить "под себя". Например нам не нравится взаимодействие с
программой, мы пишем для него обвязку, заточенную конкретно под нас,
которую мы можем менять в отличие от скомпиленной программы, в которой
чтобы провести малейшее изменение надо вложить немало времени.
\end{frame}
\begin{frame}[label={sec:org51b4ff9}]{Обвязка ls: Dired}
\begin{center}
\includegraphics[width=.9\linewidth]{./dired.png}
\end{center}
Dired это файловый менеджер Emacs'а. Внутри он использует ls для
скорости, но его вывод мы можем редактировать под себя. Помимо того,
что мы можем можем удалять, создавать, редактировать файлы и
директории, Dired умеет открывать и создавать архивы.
\end{frame}
\begin{frame}[label={sec:orgb835e36}]{Обвязка git: Magit}
\begin{center}
\includegraphics[width=.9\linewidth]{./magit.png}
\end{center}
\end{frame}
\begin{frame}[label={sec:org470d783}]{Другие обвязки}
Конечно всё обвязать таким образом невозможно, но для большинства
user-space программ мы можем использовать удобные для нас обвязки как
бы вместо редактирования самих этих программ.
\begin{itemize}
\item Обвязка всячески CLI утилит (git, gcc, gdb, make, ledger)
\item Обвязка программ с графическим выхлопом (Latex)
\end{itemize}
\end{frame}
\begin{frame}[label={sec:org83d0ded}]{Lisp}
Большинство свобод достигается благодаря использованию в качестве
языка расширения Emacs Lisp. Лисп -- один из старейших динамических
языков программирования, основанный на нетипизированном
лямбда-исчислении. Одной из удобнейших фич языка является его
динамичность, которая позволяет изменять программу в рантайме, а также
расширять сам язык при помощи макросов. Можно даже сказать, что Emacs
Lisp это не язык расширения, это Emacs просто является интерпретатором
Elisp.
\end{frame}
\begin{frame}[label={sec:org914c22b}]{Почему Emacs Lisp даёт свободу}
\begin{itemize}
\item Динамическая типизация
\item Reflection
\item Introspection
\item Макросы
\item Код есть данные / метациркулярный интерпретатор
\item Мультипарадигма (ООП, ФП, Процедурщина)
\end{itemize}
\end{frame}
\section*{Редакторы}
\label{sec:org0c79e81}
\begin{frame}[label={sec:orga4c5425}]{Что умеет Emacs чего не умеют другие}
\begin{itemize}
\item Можно модифицировать сам редактор внутри редактора без
перезапуска
\item Менять способы ввода (аккордные бинды, модальные бинды,
управление жестами, синтезаторы речи)
\item Использовать систему версий отличную от Git
\item Открывать любые файлы вне текущего проекта
\begin{itemize}
\item Открывать файлы на удалённом компьютере
\item Открывать файлы через sudo
\end{itemize}
\item Редактировать любой элемент интерфейса
\item Не быть ограниченным форматом конфигурации и доступными настройками
\item Жить 40+ лет и обновляться
\end{itemize}
\end{frame}
\begin{frame}[label={sec:org51257c8}]{Другие редакторы}
Рассмотрим следующие текстовые редакторы, которые возможно
используют ваши друзья и коллеги:
\begin{itemize}
\item IDE от JetBrains (PHPStorm, InttelliIDEA и т.д.)
\item VS Code
\item Sublime Text
\item Vi/Vim/NeoVim
\end{itemize}
За исключением вима данные редакторы не подходят для общего
назначения, большинство из них направлены именно на написание
кода. Тем не менее даже в более узкой специализации они имеют
серьезные изъяны.
\end{frame}
\begin{frame}[label={sec:orgc15dfc1}]{Недостатки популярных редакторов}
\begin{block}{IDE от JetBrains}
\begin{itemize}
\item Закрытый исходный код
\item Плохая производительность, долгий отклик
\item Узкая специализация (одно IDE на язык вместо одного окружения для всего)
\item Неконсинстентность интерфейса
\end{itemize}
\end{block}
\begin{block}{Sublime Text}
\begin{itemize}
\item Закрытый исходный код
\item Неконсинстентность интерфейса
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[label={sec:org1932c60}]{Недостатки популярных редакторов}
\begin{block}{VS Code}
\begin{itemize}
\item Телеметрия
\item Полузакрытость (Electron)
\item Низкая производительность (Electron)
\item Неконсистентность интерфейса
\end{itemize}
\end{block}
\begin{block}{Vi/Vim/NeoVim}
\begin{itemize}
\item Невозможно выйти
\item Невозможно модифицировать и использовать для любых целей
(например выключить моды и сделать их как в имаксе)
((если это возможно сделайте пожалуйста, в emacs есть evil))
\end{itemize}
\end{block}
\end{frame}
\section*{Vim и Emacs}
\label{sec:org22ebbce}
\begin{frame}[label={sec:org25fb9b9}]{Почему Emacs и Vim непопулярны}
\begin{center}
\includegraphics[height=120]{./learning-curve.jpg}
\end{center}
Ответ: Кривая обучения
\end{frame}
\begin{frame}[label={sec:org9f60009}]{Миф: Emacs не настолько сложен}
Мы видим, что вход в вим высокий. С другой стороны у Emacs кривая
обучения начинается с самого низа, но потом закручивается. Что это
значит?
\end{frame}
\begin{frame}[label={sec:org215fabc}]{Миф: Emacs не настолько сложен}
GNU/Emacs имеет рядовые инструменты для работы с текстом: поддержка
мыши (выделение, скролл), стрелки, подсказки горячих клавиш,
различные менюшки. Emacs в изначальной поставке -- это что-то между
обычным текстовым редактором вроде notepad.exe и IDE. Тем не менее
Emacs имеет возможности расширения, которые позволяют превратить
его в нечто похожее на IDE и покрывать даже больше задач.
\end{frame}
\begin{frame}[label={sec:orgae103b6}]{M-x butterfly}
\begin{center}
\includegraphics[height=140]{./real_programmers.png}
\end{center}
Шуточная функция поставляется в GNU/Emacs после появления комикса.
\end{frame}
\begin{frame}[label={sec:orga0378c3}]{Схожести и отличия Emacs / Vim}
\begin{center}
\includegraphics[height=120]{./emacs-vim.png}
\end{center}
Не смотря на то, что редакторы достаточно разительно отличаются
друг друга концептуально, на самом деле у них больше общего чем
может показаться.
\end{frame}
\begin{frame}[label={sec:orgc718feb}]{Схожести}
\begin{center}
\begin{tabular}{lll}
& \alert{Emacs} & \alert{Vim}\\[0pt]
\hline
Интерфейс & Текст & Текст\\[0pt]
Туториал & Есть & Есть\\[0pt]
Расширяемый & Да & Да\\[0pt]
Команды & M-x & :\\[0pt]
Буферы & Есть & Есть\\[0pt]
Файловый менеджер & Есть & Есть\\[0pt]
Макросы & Есть & Есть\\[0pt]
Автокомплит & Есть & Есть\\[0pt]
Интеграция с терминалом & Есть & Есть\\[0pt]
\end{tabular}
\end{center}
\end{frame}
\begin{frame}[label={sec:orgca9027f}]{Отличия}
\begin{center}
\begin{tabular}{lll}
& \alert{Emacs} & \alert{Vim}\\[0pt]
\hline
Ввод & Любые системы & Модальность\\[0pt]
Язык расширений & Emacs Lisp & VimScript\\[0pt]
Принципы & M-x butterfly & Unix Way\\[0pt]
Документация & Info & Man\\[0pt]
Основной клиент & Графика & Терминал\\[0pt]
\end{tabular}
\end{center}
Подробнее о сравнении Vim и Emacs:
\url{https://en.wikipedia.org/wiki/Editor\_war}
\end{frame}
\begin{frame}[label={sec:org8fe85d2}]{Что даёт графический клиент}
\begin{itemize}
\item Правильно работающие бинды (например в консоли не сработает C-.)
\item Управление мышью
\item Отображение картинок, видео, граф. документов вроде pdf
\item Отображение шрифта с лигатурами
\item Всплывающие окна и дополнительные меню
\end{itemize}
\end{frame}
\begin{frame}[label={sec:org21b2fbe}]{Evil}
\begin{center}
\includegraphics[height=25]{./evil.png}
\end{center}
\alert{Evil-mode} -- это расширение для GNU/Emacs, которое эмулирует
Vim. Так как оба редактора работают со всеми объектами как с текстом,
то использование эмуляции Vim в Emacs более тривиальное, чем в
каком-нибудь IDE. Огромное количество пакетов Emacs предоставляют
биндинги для работы с Evil.
\end{frame}
\section*{Возможности GNU Emacs}
\label{sec:org45c2af9}
\begin{frame}[label={sec:org1b1c3f4}]{Что есть в GNU Emacs}
\begin{itemize}
\item Реализация Client-Server архитектуры
\item Рантайм Emacs Lisp с JIT компиляцией
\item Аккордовые сочетания клавиш
\item Макросы
\item Встроенный пакетный менеджер
\item Встроенный файловый менеджер
\item Отображение номеров строк
\item Работа с терминалом (ansi-term, eshell)
\item Разделение на фреймы
\item LSP клиент
\item Поддержка большого числа языков программирования
\item Поддержка спелл-чекера
\item Встроенная система помощи (туториал, apropos, функции, бинды)
\end{itemize}
\end{frame}
\begin{frame}[label={sec:org94c269c}]{Что есть в GNU/Emacs}
\begin{itemize}
\item Интерактивные элементы (кнопки, формы и т.д.)
\item Интерфейс к info и man
\item Поиск
\item Встроенный текстовый браузер eww
\item Встроенные клиенты IRC и email
\item Линтер кода Flymake
\item Интерфейс к GDB
\item Система контроля версий (не только git)
\item Возможность удаленного редактирования кода (например через ssh)
\item Org-mode для ведения заметок (и много чего еще)
\item Можно читать документы pdf, docx и презентации
\item Система учёта времени на работе timeclock (засекает 8 часов)
\item M-x doctor (chatgpt до изобретения нейросетей)
\end{itemize}
\end{frame}
\begin{frame}[label={sec:org8cb7acd},fragile]{Биндинги Emacs}
Биндинги в Emacs мнемонические. Это значит, что их легко запомнить,
так как буква биндинга практически всегда что-то обозначает.
\begin{itemize}
\item \texttt{C-n} Следующая строка (next)
\item \texttt{C-p} Предыдущая строка (previous)
\item \texttt{C-f} Вперед на символ (forward)
\item \texttt{C-b} Назад на символ (back)
\end{itemize}
Не все биндинги появились именно в Emacs. Emacs изначально был
расширением редактора TECO.
Подробнее об истории биндингов Emacs и Vim:
\url{http://xahlee.info/kbd/keyboard\_hardware\_and\_key\_choices.html}
\end{frame}
\begin{frame}[label={sec:orgfbee6eb},fragile]{Биндинги Emacs}
Важным отличием биндингов в редакторе GNU/Emacs является то, что
они еще и аккордовыми. Это значит, что несколько комбинаций
следующих друг за другом могут что-то значить. Например:
\begin{itemize}
\item \texttt{C-x C-f} открыть файл
\item \texttt{C-x s} сохранить файл
\end{itemize}
Набираемые аккордовые бинды отображаются в мод-лайне. Для сброса
существует биндинг \alert{C-g}.
\end{frame}
\begin{frame}[label={sec:orgace28bc}]{Биндинги Emacs (продолжение)}
Не смотря на наличие аккордовых биндов, Emacs не ограничивается
только ими и в редакторе поддерживают свои модальные режимы и режим
совместимости с VIM.
\end{frame}
\begin{frame}[label={sec:org1e34048},fragile]{Emacs Lisp}
Ядро редактора написано на языке C, остальное -- язык расширений
Emacs Lisp (25\% C + 75\% Elisp). Выглядит примерно так:
\begin{verbatim}
;; Объявление и вызов функции
(defun имя-функции (аргументы) (тело функции))
(имя-функция аргумент1 аргумент2)
(defun hello (name)
(concat "Hello, " name)) ;; => hello
(hello "Mikhail") ;; => "Hello, Mikhail"
\end{verbatim}
\end{frame}
\begin{frame}[label={sec:orge354670}]{Всё есть функция}
Любое действие в редакторе представляет из себя функцию.
\begin{itemize}
\item Двинули курсор в начало строки -- функция beginning-of-line
\item Сохранили файл -- функция save-buffer
\item Вставили текст -- функция yank
\end{itemize}
И так с любым действием. В VIM вероятно также.
\end{frame}
\begin{frame}[label={sec:org8d7bac0},fragile]{Система помощи}
В GNU/Emacs встроен туториал и очень удобная система помощи.
\begin{itemize}
\item \texttt{C-h t} Туториал (на русском языке)
\item \texttt{C-h r} Мануал Emacs
\item \texttt{C-h a} Apropos (по описанию находит нужную функцию)
\item \texttt{C-h k} Describe-key (описывает функцию, прикрепленную к бинду)
\item \texttt{C-h f} Describe-function (описывает функцию)
\item \texttt{C-h m} Describe-mode
\item \texttt{C-h i} Info
\end{itemize}
\end{frame}
\begin{frame}[label={sec:org9d7948e}]{Моды}
\alert{Мод} -- это модификация GNU/Emacs, которая включается при
определенном условии.
\begin{itemize}
\item Major мод может быть всего один, чаще всего вешается на открытие
файла определенного расширения. Например при открытие файла с
расширением .py запустится python-mode.
\item Minor модов может быть неограниченное количество, они дополняют
функционал Major модов. Могут быть активированы всегда (имеют
префикс global-<название мода>) или при определенном условии.
\end{itemize}
\end{frame}
\begin{frame}[label={sec:orgfb5b098}]{Мод-лайн}
\alert{Мод-лайн} отображает информацию об используемых модах и состоянии
файла (название, сохранён или нет, позиция курсора, система
контроля версий). Пользователь может расширить мод-лайн для показа
своей информации, например времени. Под мод-лайном располагает
Echo зона, которая даёт уведомления о работе модов, а также может
запрашивать ввод.
\end{frame}
\begin{frame}[label={sec:org7b8cc76},fragile]{Буфер}
\alert{Буфер} -- это обособленная память с текстом, которой манипулирует
имакс прежде чем писать на диск. Экран Emacs отображает буфера,
грубо говоря вы видите всегда как-минимум один буфер. При запуске
доступны следующие буферы:
\begin{itemize}
\item \texttt{*GNU EMACS*} -- начальный экран
\item \texttt{*scratch*} -- площадка REPL для обкатывания Emacs Lisp
\end{itemize}
Бинды:
\begin{itemize}
\item \texttt{C-x b} -- сменить буфер
\item \texttt{C-x C-b} -- список буферов
\end{itemize}
\end{frame}
\begin{frame}[label={sec:orga540e72}]{Программирование}
Поддерживаются языки:
\begin{itemize}
\item C
\item Lisp и Scheme
\item C++
\item Fortran
\item Java
\item Javascript
\item Python
\item Ruby
\item Perl
\item и множество других
\end{itemize}
Разумеется список можно расширить сторонними пакетами
\end{frame}
\begin{frame}[label={sec:org68194c7}]{Программирование}
Также для задач программирования доступны:
\begin{itemize}
\item Форматирование кода
\item Компилирование программ
\item Линтер Flymake, который на фоне проверяет текст программы
\item Дебаггеры GDB, PDB, JDB и другие
\item Интерфейс к grep
\item Выполнение кода Emacs Lisp прямо в редакторе
\end{itemize}
\end{frame}
\begin{frame}[label={sec:org157df92}]{Система контроля версий}
При программировании полезно использовать систему контроля
версий. Самая распространненая система -- git. Про другие системы
обычно забывают, но не в случае Emacs. Система контроля версий
Emacs поддерживает:
\begin{itemize}
\item Git
\item Mercurial
\item CVS
\item Bazaar
\item Subversion
\item и другие
\end{itemize}
\end{frame}
\begin{frame}[label={sec:org4bf4ab3}]{Org-mode}
\alert{Org-mode} -- Markdown на колёсах, декларативный формат описания
всего и вся, основанный на списке из уровней (Outline). С помощью
org-mode можно:
\begin{itemize}
\item Организовывать свою жизнь
\item Создавать документы и презентации (latex)
\item Использовать технику грамотного программирования
\item Заменять Markdown
\end{itemize}
\url{https://orgmode.org/worg/org-tutorials/}
\end{frame}
\begin{frame}[label={sec:org7031564}]{Tramp}
\begin{quote}
Вимеры могут привести в аргумент то, что их редактор уже доступен
на многих системам и ничего не надо докачивать и что можно
редактировать прямо на сервере.
\end{quote}
В Emacs вы можете редактировать удалённые файлы через ssh,
использую Tramp. Выглядеть это будет также как вы редактируете всё
на своей родной системе. В Vim редактирование на сервере работает
только при условии отсутствия конфигурации, в Emacs
\end{frame}
\begin{frame}[label={sec:org759bf16},fragile]{Кастомизация}
\begin{center}
\includegraphics[width=.9\linewidth]{./customize.png}
\end{center}
\texttt{M-x customize} открывает GUI, позволяющий редактировать поведение
и внешний вид Emacs.
\end{frame}
\begin{frame}[label={sec:org5267aa1}]{.emacs / init.el}
В качестве конфигурации Emacs использует один из следующих файлов в домашней директории:
\begin{itemize}
\item \textasciitilde{}/.emacs
\item \textasciitilde{}/.emacs.d/init.el
\end{itemize}
Файл конфигурации содержит листинг кода на Emacs Lisp, который
Emacs вычисляет при запуске программы. Чтобы создавать конфиг Emacs
вовсе необязательно в идеале владеть Emacs Lisp.
\end{frame}
\begin{frame}[label={sec:org3f75b3c},fragile]{Пакетный менеджер package.el}
Для расширения предусмотрен пакетный менеджер, который уже встроен
в редактор. По-умолчанию доступен только один официальный
репозиторий Elpa, но пользователь может подключать сторонние
(например Melpa).
\begin{itemize}
\item \texttt{M-x list-packages} -- список пакетов, доступных в репозиториях
\item \texttt{M-x package-install <название пакета>} -- установка пакета из репозитория
\end{itemize}
\end{frame}
\begin{frame}[label={sec:org0c37de3},fragile]{use-package}
\alert{use-package} -- это декларативная обёртка от сообщества для
package.el. Рекомендую использовать use-package, чтобы ваш конфиг
не превратился со временем в нечитаемое месиво.
\begin{itemize}
\item \texttt{:config} -- изолирует конфигурацию пакетов друг от друга
\item \texttt{:hook} -- короткая запись для навешивания хуков
\item \texttt{:ensure} -- загружает пакет из репозитория
\item \texttt{:diminish} -- скрывает мод из модлайна
\item и другие опции
\end{itemize}
\end{frame}
\section*{Дистрибутивы}
\label{sec:orga045702}
\begin{frame}[label={sec:orgf602764}]{Vanilla}
Emacs, который поставляется на большинстве систем без готовой
конфигурации.
\begin{center}
\includegraphics[width=.9\linewidth]{./emacs-vanilla.png}
\end{center}
\url{https://www.gnu.org/software/emacs/}
\end{frame}
\begin{frame}[label={sec:orgafffedd}]{Doom Emacs}
Emacs с поддержкой vim и emacs биндов и тонной пакетов на все случаи жизни
\begin{center}
\includegraphics[width=.9\linewidth]{./emacs-doom.png}
\end{center}
\url{https://github.com/doomemacs/doomemacs}
\end{frame}
\begin{frame}[label={sec:orgacb615f}]{Spacemacs}
По сути тоже самое, что Doom, но старее и медленнее.
\begin{center}
\includegraphics[width=.9\linewidth]{./emacs-spacemacs.png}
\end{center}
\url{https://www.spacemacs.org/}
\end{frame}
\begin{frame}[label={sec:org6a4511a}]{Prelude}
Расширяет дефолтный Emacs, но не настолько сильно как Doom и
Spacemacs. Пытается придерживаться "Sane Defaults".\\[0pt]
\url{https://prelude.emacsredux.com/en/latest/}
\end{frame}
\section*{Материалы по Emacs}
\label{sec:org5e52afa}
\begin{frame}[label={sec:org5eac8c3}]{Изучение Emacs внутри Emacs}
\begin{itemize}
\item (\alert{C-h t}) Help => Emacs Tutorial
\item (\alert{C-h r}) Info emacs manual
\item Introduction to Emacs Lisp
\end{itemize}
\end{frame}
\begin{frame}[label={sec:org9645604},shrink=10]{Книги}
\begin{block}{Mastering Emacs}
\begin{center}
\includegraphics[height=80]{./mastering-emacs.png}
\end{center}
\url{https://masteringemacs.org}
\end{block}
\begin{block}{Learning Gnu Emacs}
\begin{center}
\includegraphics[height=80]{./learning-emacs.jpg}
\end{center}
\url{https://dl.acm.org/doi/book/10.5555/2167272}
\end{block}
\end{frame}
\begin{frame}[label={sec:org9a25e5a}]{Заключение}
GNU Emacs имеет широкие возможности модификации самого себя, что
предоставляет нам как пользователям реализовывать свои задумки с
гораздом меньшим количеством преград чем в других решениях.
\begin{center}
\includegraphics[width=.9\linewidth]{./prot.png}
\end{center}
Есть похожий доклад, который рекомендую посмотреть.
\end{frame}
\begin{frame}[label={sec:orga5d34a2}]{Вопросы?}
\begin{itemize}
\item \url{https://fosstodon.org/@w96k}
\item \url{https://w96k.dev}
\end{itemize}
\begin{center}
\includegraphics[height=50]{./wk-logo.png}
\end{center}
Заходите в русскоязычный Emacs чат в Telegram, если вас там нет:
\begin{itemize}
\item \url{https://t.me/emacs\_ru}
\end{itemize}
\end{frame}
\end{document}
|