source: content/presentations/emacs/emacs-what-user-freedom-is-about.tex@ 0e7db91

Last change on this file since 0e7db91 was 0e7db91, checked in by Mikhail Kirillov <w96k@…>, on Jul 17, 2024 at 6:49:01 PM

Update website

  • Delete digigarder
  • Update about page
  • Remove unused stuff
  • Property mode set to 100644
File size: 38.0 KB
Line 
1% Created 2023-11-26 Sun 14:10
2% Intended LaTeX compiler: pdflatex
3\documentclass[article,11pt,notitlepage,notitle,oneside,twocolumn]{beamer}
4\usepackage[utf8]{inputenc}
5\usepackage[T1]{fontenc}
6\usepackage{graphicx}
7\usepackage{longtable}
8\usepackage{wrapfig}
9\usepackage{rotating}
10\usepackage[normalem]{ulem}
11\usepackage{amsmath}
12\usepackage{amssymb}
13\usepackage{capt-of}
14\usepackage{hyperref}
15\usepackage[russian]{babel}
16\usepackage[protrusion=true,activate={true,nocompatibility},final,tracking=true,kerning=true,spacing=true,factor=1100]{microtype}\SetTracking{encoding={*}, shape=sc}{40}
17\usetheme{Goettingen}
18\usecolortheme{default}
19\author{CC-0: No Rights Reserved}
20\date{\href{https://w96k.dev}{w96k.dev} \textit{<2023-11-25 Sat>}}
21\title{Emacs: what user freedom is about}
22\hypersetup{
23 pdfauthor={CC-0: No Rights Reserved},
24 pdftitle={Emacs: what user freedom is about},
25 pdfkeywords={},
26 pdfsubject={},
27 pdfcreator={Emacs 29.1 (Org mode 9.6.6)},
28 pdflang={Russian}}
29\begin{document}
30
31\maketitle
32
33\section*{Вступление}
34\label{sec:org15a6e21}
35
36\begin{frame}[label={sec:org735be7b}]{Для кого доклад}
37Доклад нацелен в первую очередь на тех, кто по тем или иным причинам
38не знаком с редактором GNU Emacs и хотел бы узнать причины для начала
39его использования. Одна из таких причин — свобода.
40\end{frame}
41
42\section*{GNU}
43\label{sec:orgbfac1ca}
44\begin{frame}[label={sec:org2e4822d}]{GNU/Emacs}
45\begin{center}
46\includegraphics[width=100]{./emacs.png}
47\end{center} \alert{GNU/Emacs} -- это свободный немодальный текстовый
48редактор общего назначения, созданный в 1985 году Ричардом
49Столлманом. Редактор обновляется по сей день и доступен на многих
50платформах в том числе Windows.
51\end{frame}
52
53\begin{frame}[label={sec:org0d80ccd}]{Кто использовал Emacs}
54Имаксом в той или иной степени пользовались следующие люди:
55\begin{itemize}
56\item \href{https://en.wikipedia.org/wiki/Linus\_Torvald}{Linus Torvalds}
57\item \href{https://en.wikipedia.org/wiki/Donald\_Knuth}{Donald Knuth}
58\item \href{https://en.wikipedia.org/wiki/Yukihiro\_Matsumoto}{Yukihiro Matsumoto}
59\item \href{https://en.wikipedia.org/wiki/Guido\_van\_rossum}{Guido van Rossum}
60\item \href{https://en.wikipedia.org/wiki/Rich\_Hickey}{Rich Hickey}
61\item \href{https://en.wikipedia.org/wiki/Joe\_Armstrong\_(programmer)}{Joe Armstrong}
62\item \href{https://en.wikipedia.org/wiki/Eric\_Raymond}{Eric Raymond}
63\item \href{https://en.wikipedia.org/wiki/Andrei\_Alexandrescu}{Andrei Alexandrescu}
64\item \href{https://en.wikipedia.org/wiki/Edward\_Snowden}{Edward Snowden}
65\end{itemize}
66\end{frame}
67
68\begin{frame}[label={sec:orgfe786b2}]{Главный экран}
69\begin{center}
70\includegraphics[height=100]{./emacs-splash.png}
71\end{center}
72
73Если открыть Имакс, то нас встретит следующая надпись:\\[0pt]
74
75
76\alert{Welcome to GNU Emacs, one component of the GNU/Linux operating system.}
77
78
79Что это значит?
80\end{frame}
81
82\begin{frame}[label={sec:org55b1b54}]{GNU is not Unix}
83\begin{center}
84\includegraphics[height=60]{./gnu.png}
85\end{center}
86
87\alert{GNU} -- это проект фонда свободного программного обеспечения, который
88содержит ПО, следующее четырём свободам:
89\end{frame}
90
91\begin{frame}[label={sec:org26b0f79},shrink=5]{Свободы GNU}
92\begin{block}{Свобода 0}
93Свобода выполнять программу как вам угодно в любых целях.
94\end{block}
95
96\begin{block}{Свобода 1}
97Свобода изучать работу программы и модифицировать
98программу, чтобы она выполняла ваши вычисления, как вы
99пожелаете.
100\end{block}
101
102\begin{block}{Свобода 2}
103Свобода передавать копии
104\end{block}
105
106\begin{block}{Свобода 3}
107Свобода передавать копии своих измененных версий другим. Этим вы
108можете дать всему сообществу возможность получать выгоду от ваших
109изменений.
110\end{block}
111\end{frame}
112
113\begin{frame}[label={sec:org201acd4}]{Больше о GNU}
114Деятельность GNU, FSF и Ричарда Столлмана подробно описана в книге "\href{https://en.wikipedia.org/wiki/Free\_as\_in\_Freedom}{Free as in
115Freedom}", которая доступна на русском языке.
116
117\begin{center}
118\includegraphics[width=100]{./gnu-book.jpeg}
119\end{center}
120
121\url{https://www.gnu.org/}
122\end{frame}
123
124\section*{Свобода}
125\label{sec:org9bbd9ff}
126\begin{frame}[label={sec:orga804a62}]{Определение свободы}
127Свобо́да — состояние субъекта, в котором он является определяющей
128причиной своих действий.
129\end{frame}
130\begin{frame}[label={sec:org78bf4ef}]{Свобода в контексте использования программ}
131\begin{itemize}
132\item Пользователь хочет изменить функционал программы
133\item Для этого необходимо получить и изучить исходный код
134\item У исходного кода должно быть разрешение на модификацию (открытая
135или свободная лицензия)
136\item Только тогда мы свободны внести свои изменения в программу
137\end{itemize}
138\end{frame}
139
140\begin{frame}[label={sec:org190483a}]{Нюансы и сложности при модификации}
141\begin{itemize}
142\item Закрытость кода или использование закрытых компонентов
143\item Недоступность документации API для изменений
144\item Технические сложности: сложная процедура изменения даже малейшей части кода
145\item Программа написана так, чтобы её не модифицировали (final классы,
146private методы вот это всё)
147\item Собственническая организация приёма патчей и принятия решений
148\end{itemize}
149\end{frame}
150\begin{frame}[label={sec:org6a6bc8f}]{Свобода в контексте GNU Emacs}
151GNU Emacs один из немногих редакторов, которые могут предоставить
152свободу пользователю с наименьшими трудностями в реализации своих
153идей.
154\end{frame}
155\begin{frame}[label={sec:org70e5356}]{Свобода Emacs: Свобода модификации}
156GNU Emacs можно модифицировать практически как угодно. Не нравится
157автокомплит, меняем или дописываем свой, не нравятся элементы
158интерфейса убираем их, не нравится как выглядит кнопочка, у вас есть
159средства чтобы исправить это. В мейнстримных редакторах так нельзя, а
160если и можно, то есть существенные ограничения. В Emacs'е мы можем
161менять не только конфигурацию, но и сам код используемых пакетов и
162самого редактора.
163\end{frame}
164\begin{frame}[label={sec:org7d1f29e}]{Свобода Emacs: Использование для любых целей}
165Вытекает из предыдущего. Так как у нас нет ограничений на модификацию,
166то у нас появляется свобода использовать программу для любых
167целей. Конечно Emacs в первую очередь заточен для работы с текстом, но
168во-первых текст бывает разный, а во вторых Emacs покрывает некоторые
169сферы применения без текста. Vim хоть кажется таким же свободным, этой
170свободы не предоставляет, возможно это одно из фундаментальных
171различий.
172\end{frame}
173\begin{frame}[label={sec:orgce6d726}]{Для чего можно использовать Emacs}
174\begin{itemize}
175\item Literate Programming
176\item Создание \TeX{} / \LaTeX{} и иных документов документов
177\item Email / IRC / XMPP / Telega / Fediverse и т.д.
178\item Создание схем, графиков, рисование (ascii, svg)
179\item Открытие и зачастую редактирование почти любого файла (бинарный
180файл, изображение, видео, аудио, презентация, документ pdf)
181\item Для управления системой (меняем громкость звука, убиваем
182процессы, ставим пакеты)
183\item Можно использовать в качество WM (window manager)
184\item Играть в тетрис, шахматы и другие игры :)
185\end{itemize}
186
187Одним словом возможности реализации функционала ограничены в основном
188только желанием человека создать что-то новое.
189\end{frame}
190
191\begin{frame}[label={sec:org828d558}]{Свобода Emacs: Любые способы взаимодействия}
192Немного вытекает из предыдущего, но с программой можно
193взаимодействовать не тольк путем ввода текста с клавиатуры.
194\begin{itemize}
195\item Можно активно использовать мышь, а можно только клавиатуру
196\item Emacspeak позволяет использовать Emacs слепым людям
197\item Есть сенсорный ввод при помощи жестов
198\item Есть пакеты для голосового ввода
199\item Есть поддержка RTL (right to left) и огромного числа кодировок и
200языков
201\item Можно с терминала, можно с графикой
202\end{itemize}
203\end{frame}
204\begin{frame}[label={sec:orgd3e6222}]{Emacs как интерфейс к операционной системе}
205Есть мнение, что Emacs настольно функциональный, что сам является
206операционной системой. В целом это не так далеко от правды, так как
207возможностей этого редактора хватает, чтобы много вещи операционной
208системы заточить "под себя". Например нам не нравится взаимодействие с
209программой, мы пишем для него обвязку, заточенную конкретно под нас,
210которую мы можем менять в отличие от скомпиленной программы, в которой
211чтобы провести малейшее изменение надо вложить немало времени.
212\end{frame}
213\begin{frame}[label={sec:org51b4ff9}]{Обвязка ls: Dired}
214\begin{center}
215\includegraphics[width=.9\linewidth]{./dired.png}
216\end{center}
217
218Dired это файловый менеджер Emacs'а. Внутри он использует ls для
219скорости, но его вывод мы можем редактировать под себя. Помимо того,
220что мы можем можем удалять, создавать, редактировать файлы и
221директории, Dired умеет открывать и создавать архивы.
222\end{frame}
223
224\begin{frame}[label={sec:orgb835e36}]{Обвязка git: Magit}
225\begin{center}
226\includegraphics[width=.9\linewidth]{./magit.png}
227\end{center}
228\end{frame}
229\begin{frame}[label={sec:org470d783}]{Другие обвязки}
230Конечно всё обвязать таким образом невозможно, но для большинства
231user-space программ мы можем использовать удобные для нас обвязки как
232бы вместо редактирования самих этих программ.
233\begin{itemize}
234\item Обвязка всячески CLI утилит (git, gcc, gdb, make, ledger)
235\item Обвязка программ с графическим выхлопом (Latex)
236\end{itemize}
237\end{frame}
238\begin{frame}[label={sec:org83d0ded}]{Lisp}
239Большинство свобод достигается благодаря использованию в качестве
240языка расширения Emacs Lisp. Лисп -- один из старейших динамических
241языков программирования, основанный на нетипизированном
242лямбда-исчислении. Одной из удобнейших фич языка является его
243динамичность, которая позволяет изменять программу в рантайме, а также
244расширять сам язык при помощи макросов. Можно даже сказать, что Emacs
245Lisp это не язык расширения, это Emacs просто является интерпретатором
246Elisp.
247\end{frame}
248\begin{frame}[label={sec:org914c22b}]{Почему Emacs Lisp даёт свободу}
249\begin{itemize}
250\item Динамическая типизация
251\item Reflection
252\item Introspection
253\item Макросы
254\item Код есть данные / метациркулярный интерпретатор
255\item Мультипарадигма (ООП, ФП, Процедурщина)
256\end{itemize}
257\end{frame}
258
259\section*{Редакторы}
260\label{sec:org0c79e81}
261\begin{frame}[label={sec:orga4c5425}]{Что умеет Emacs чего не умеют другие}
262\begin{itemize}
263\item Можно модифицировать сам редактор внутри редактора без
264перезапуска
265\item Менять способы ввода (аккордные бинды, модальные бинды,
266управление жестами, синтезаторы речи)
267\item Использовать систему версий отличную от Git
268\item Открывать любые файлы вне текущего проекта
269\begin{itemize}
270\item Открывать файлы на удалённом компьютере
271\item Открывать файлы через sudo
272\end{itemize}
273\item Редактировать любой элемент интерфейса
274\item Не быть ограниченным форматом конфигурации и доступными настройками
275\item Жить 40+ лет и обновляться
276\end{itemize}
277\end{frame}
278
279\begin{frame}[label={sec:org51257c8}]{Другие редакторы}
280Рассмотрим следующие текстовые редакторы, которые возможно
281используют ваши друзья и коллеги:
282
283\begin{itemize}
284\item IDE от JetBrains (PHPStorm, InttelliIDEA и т.д.)
285\item VS Code
286\item Sublime Text
287\item Vi/Vim/NeoVim
288\end{itemize}
289
290За исключением вима данные редакторы не подходят для общего
291назначения, большинство из них направлены именно на написание
292кода. Тем не менее даже в более узкой специализации они имеют
293серьезные изъяны.
294\end{frame}
295
296\begin{frame}[label={sec:orgc15dfc1}]{Недостатки популярных редакторов}
297\begin{block}{IDE от JetBrains}
298\begin{itemize}
299\item Закрытый исходный код
300\item Плохая производительность, долгий отклик
301\item Узкая специализация (одно IDE на язык вместо одного окружения для всего)
302\item Неконсинстентность интерфейса
303\end{itemize}
304\end{block}
305\begin{block}{Sublime Text}
306\begin{itemize}
307\item Закрытый исходный код
308\item Неконсинстентность интерфейса
309\end{itemize}
310\end{block}
311\end{frame}
312\begin{frame}[label={sec:org1932c60}]{Недостатки популярных редакторов}
313\begin{block}{VS Code}
314\begin{itemize}
315\item Телеметрия
316\item Полузакрытость (Electron)
317\item Низкая производительность (Electron)
318\item Неконсистентность интерфейса
319\end{itemize}
320\end{block}
321\begin{block}{Vi/Vim/NeoVim}
322\begin{itemize}
323\item Невозможно выйти
324\item Невозможно модифицировать и использовать для любых целей
325(например выключить моды и сделать их как в имаксе)
326((если это возможно сделайте пожалуйста, в emacs есть evil))
327\end{itemize}
328\end{block}
329\end{frame}
330\section*{Vim и Emacs}
331\label{sec:org22ebbce}
332\begin{frame}[label={sec:org25fb9b9}]{Почему Emacs и Vim непопулярны}
333\begin{center}
334\includegraphics[height=120]{./learning-curve.jpg}
335\end{center}
336
337Ответ: Кривая обучения
338\end{frame}
339
340\begin{frame}[label={sec:org9f60009}]{Миф: Emacs не настолько сложен}
341Мы видим, что вход в вим высокий. С другой стороны у Emacs кривая
342обучения начинается с самого низа, но потом закручивается. Что это
343значит?
344\end{frame}
345
346\begin{frame}[label={sec:org215fabc}]{Миф: Emacs не настолько сложен}
347GNU/Emacs имеет рядовые инструменты для работы с текстом: поддержка
348мыши (выделение, скролл), стрелки, подсказки горячих клавиш,
349различные менюшки. Emacs в изначальной поставке -- это что-то между
350обычным текстовым редактором вроде notepad.exe и IDE. Тем не менее
351Emacs имеет возможности расширения, которые позволяют превратить
352его в нечто похожее на IDE и покрывать даже больше задач.
353\end{frame}
354\begin{frame}[label={sec:orgae103b6}]{M-x butterfly}
355\begin{center}
356\includegraphics[height=140]{./real_programmers.png}
357\end{center}
358
359Шуточная функция поставляется в GNU/Emacs после появления комикса.
360\end{frame}
361\begin{frame}[label={sec:orga0378c3}]{Схожести и отличия Emacs / Vim}
362\begin{center}
363\includegraphics[height=120]{./emacs-vim.png}
364\end{center}
365Не смотря на то, что редакторы достаточно разительно отличаются
366друг друга концептуально, на самом деле у них больше общего чем
367может показаться.
368\end{frame}
369\begin{frame}[label={sec:orgc718feb}]{Схожести}
370\begin{center}
371\begin{tabular}{lll}
372 & \alert{Emacs} & \alert{Vim}\\[0pt]
373\hline
374Интерфейс & Текст & Текст\\[0pt]
375Туториал & Есть & Есть\\[0pt]
376Расширяемый & Да & Да\\[0pt]
377Команды & M-x & :\\[0pt]
378Буферы & Есть & Есть\\[0pt]
379Файловый менеджер & Есть & Есть\\[0pt]
380Макросы & Есть & Есть\\[0pt]
381Автокомплит & Есть & Есть\\[0pt]
382Интеграция с терминалом & Есть & Есть\\[0pt]
383\end{tabular}
384\end{center}
385\end{frame}
386
387\begin{frame}[label={sec:orgca9027f}]{Отличия}
388\begin{center}
389\begin{tabular}{lll}
390 & \alert{Emacs} & \alert{Vim}\\[0pt]
391\hline
392Ввод & Любые системы & Модальность\\[0pt]
393Язык расширений & Emacs Lisp & VimScript\\[0pt]
394Принципы & M-x butterfly & Unix Way\\[0pt]
395Документация & Info & Man\\[0pt]
396Основной клиент & Графика & Терминал\\[0pt]
397\end{tabular}
398\end{center}
399
400Подробнее о сравнении Vim и Emacs:
401\url{https://en.wikipedia.org/wiki/Editor\_war}
402\end{frame}
403
404\begin{frame}[label={sec:org8fe85d2}]{Что даёт графический клиент}
405\begin{itemize}
406\item Правильно работающие бинды (например в консоли не сработает C-.)
407\item Управление мышью
408\item Отображение картинок, видео, граф. документов вроде pdf
409\item Отображение шрифта с лигатурами
410\item Всплывающие окна и дополнительные меню
411\end{itemize}
412\end{frame}
413\begin{frame}[label={sec:org21b2fbe}]{Evil}
414\begin{center}
415\includegraphics[height=25]{./evil.png}
416\end{center}
417
418\alert{Evil-mode} -- это расширение для GNU/Emacs, которое эмулирует
419Vim. Так как оба редактора работают со всеми объектами как с текстом,
420то использование эмуляции Vim в Emacs более тривиальное, чем в
421каком-нибудь IDE. Огромное количество пакетов Emacs предоставляют
422биндинги для работы с Evil.
423\end{frame}
424\section*{Возможности GNU Emacs}
425\label{sec:org45c2af9}
426\begin{frame}[label={sec:org1b1c3f4}]{Что есть в GNU Emacs}
427\begin{itemize}
428\item Реализация Client-Server архитектуры
429\item Рантайм Emacs Lisp с JIT компиляцией
430\item Аккордовые сочетания клавиш
431\item Макросы
432\item Встроенный пакетный менеджер
433\item Встроенный файловый менеджер
434\item Отображение номеров строк
435\item Работа с терминалом (ansi-term, eshell)
436\item Разделение на фреймы
437\item LSP клиент
438\item Поддержка большого числа языков программирования
439\item Поддержка спелл-чекера
440\item Встроенная система помощи (туториал, apropos, функции, бинды)
441\end{itemize}
442\end{frame}
443\begin{frame}[label={sec:org94c269c}]{Что есть в GNU/Emacs}
444\begin{itemize}
445\item Интерактивные элементы (кнопки, формы и т.д.)
446\item Интерфейс к info и man
447\item Поиск
448\item Встроенный текстовый браузер eww
449\item Встроенные клиенты IRC и email
450\item Линтер кода Flymake
451\item Интерфейс к GDB
452\item Система контроля версий (не только git)
453\item Возможность удаленного редактирования кода (например через ssh)
454\item Org-mode для ведения заметок (и много чего еще)
455\item Можно читать документы pdf, docx и презентации
456\item Система учёта времени на работе timeclock (засекает 8 часов)
457\item M-x doctor (chatgpt до изобретения нейросетей)
458\end{itemize}
459\end{frame}
460\begin{frame}[label={sec:org8cb7acd},fragile]{Биндинги Emacs}
461 Биндинги в Emacs мнемонические. Это значит, что их легко запомнить,
462так как буква биндинга практически всегда что-то обозначает.
463\begin{itemize}
464\item \texttt{C-n} Следующая строка (next)
465\item \texttt{C-p} Предыдущая строка (previous)
466\item \texttt{C-f} Вперед на символ (forward)
467\item \texttt{C-b} Назад на символ (back)
468\end{itemize}
469
470Не все биндинги появились именно в Emacs. Emacs изначально был
471расширением редактора TECO.
472
473Подробнее об истории биндингов Emacs и Vim:
474\url{http://xahlee.info/kbd/keyboard\_hardware\_and\_key\_choices.html}
475\end{frame}
476\begin{frame}[label={sec:orgfbee6eb},fragile]{Биндинги Emacs}
477 Важным отличием биндингов в редакторе GNU/Emacs является то, что
478они еще и аккордовыми. Это значит, что несколько комбинаций
479следующих друг за другом могут что-то значить. Например:
480\begin{itemize}
481\item \texttt{C-x C-f} открыть файл
482\item \texttt{C-x s} сохранить файл
483\end{itemize}
484Набираемые аккордовые бинды отображаются в мод-лайне. Для сброса
485существует биндинг \alert{C-g}.
486\end{frame}
487
488\begin{frame}[label={sec:orgace28bc}]{Биндинги Emacs (продолжение)}
489Не смотря на наличие аккордовых биндов, Emacs не ограничивается
490только ими и в редакторе поддерживают свои модальные режимы и режим
491совместимости с VIM.
492\end{frame}
493\begin{frame}[label={sec:org1e34048},fragile]{Emacs Lisp}
494 Ядро редактора написано на языке C, остальное -- язык расширений
495Emacs Lisp (25\% C + 75\% Elisp). Выглядит примерно так:
496
497\begin{verbatim}
498;; Объявление и вызов функции
499(defun имя-функции (аргументы) (тело функции))
500(имя-функция аргумент1 аргумент2)
501
502(defun hello (name)
503 (concat "Hello, " name)) ;; => hello
504(hello "Mikhail") ;; => "Hello, Mikhail"
505\end{verbatim}
506\end{frame}
507\begin{frame}[label={sec:orge354670}]{Всё есть функция}
508Любое действие в редакторе представляет из себя функцию.
509\begin{itemize}
510\item Двинули курсор в начало строки -- функция beginning-of-line
511\item Сохранили файл -- функция save-buffer
512\item Вставили текст -- функция yank
513\end{itemize}
514
515И так с любым действием. В VIM вероятно также.
516\end{frame}
517
518\begin{frame}[label={sec:org8d7bac0},fragile]{Система помощи}
519 В GNU/Emacs встроен туториал и очень удобная система помощи.
520\begin{itemize}
521\item \texttt{C-h t} Туториал (на русском языке)
522\item \texttt{C-h r} Мануал Emacs
523\item \texttt{C-h a} Apropos (по описанию находит нужную функцию)
524\item \texttt{C-h k} Describe-key (описывает функцию, прикрепленную к бинду)
525\item \texttt{C-h f} Describe-function (описывает функцию)
526\item \texttt{C-h m} Describe-mode
527\item \texttt{C-h i} Info
528\end{itemize}
529\end{frame}
530\begin{frame}[label={sec:org9d7948e}]{Моды}
531\alert{Мод} -- это модификация GNU/Emacs, которая включается при
532 определенном условии.
533\begin{itemize}
534\item Major мод может быть всего один, чаще всего вешается на открытие
535файла определенного расширения. Например при открытие файла с
536расширением .py запустится python-mode.
537\item Minor модов может быть неограниченное количество, они дополняют
538функционал Major модов. Могут быть активированы всегда (имеют
539префикс global-<название мода>) или при определенном условии.
540\end{itemize}
541\end{frame}
542\begin{frame}[label={sec:orgfb5b098}]{Мод-лайн}
543\alert{Мод-лайн} отображает информацию об используемых модах и состоянии
544 файла (название, сохранён или нет, позиция курсора, система
545 контроля версий). Пользователь может расширить мод-лайн для показа
546 своей информации, например времени. Под мод-лайном располагает
547 Echo зона, которая даёт уведомления о работе модов, а также может
548 запрашивать ввод.
549\end{frame}
550\begin{frame}[label={sec:org7b8cc76},fragile]{Буфер}
551 \alert{Буфер} -- это обособленная память с текстом, которой манипулирует
552имакс прежде чем писать на диск. Экран Emacs отображает буфера,
553грубо говоря вы видите всегда как-минимум один буфер. При запуске
554доступны следующие буферы:
555\begin{itemize}
556\item \texttt{*GNU EMACS*} -- начальный экран
557\item \texttt{*scratch*} -- площадка REPL для обкатывания Emacs Lisp
558\end{itemize}
559Бинды:
560\begin{itemize}
561\item \texttt{C-x b} -- сменить буфер
562\item \texttt{C-x C-b} -- список буферов
563\end{itemize}
564\end{frame}
565\begin{frame}[label={sec:orga540e72}]{Программирование}
566Поддерживаются языки:
567\begin{itemize}
568\item C
569\item Lisp и Scheme
570\item C++
571\item Fortran
572\item Java
573\item Javascript
574\item Python
575\item Ruby
576\item Perl
577\item и множество других
578\end{itemize}
579Разумеется список можно расширить сторонними пакетами
580\end{frame}
581\begin{frame}[label={sec:org68194c7}]{Программирование}
582Также для задач программирования доступны:
583\begin{itemize}
584\item Форматирование кода
585\item Компилирование программ
586\item Линтер Flymake, который на фоне проверяет текст программы
587\item Дебаггеры GDB, PDB, JDB и другие
588\item Интерфейс к grep
589\item Выполнение кода Emacs Lisp прямо в редакторе
590\end{itemize}
591\end{frame}
592\begin{frame}[label={sec:org157df92}]{Система контроля версий}
593При программировании полезно использовать систему контроля
594версий. Самая распространненая система -- git. Про другие системы
595обычно забывают, но не в случае Emacs. Система контроля версий
596Emacs поддерживает:
597\begin{itemize}
598\item Git
599\item Mercurial
600\item CVS
601\item Bazaar
602\item Subversion
603\item и другие
604\end{itemize}
605\end{frame}
606
607\begin{frame}[label={sec:org4bf4ab3}]{Org-mode}
608\alert{Org-mode} -- Markdown на колёсах, декларативный формат описания
609 всего и вся, основанный на списке из уровней (Outline). С помощью
610 org-mode можно:
611\begin{itemize}
612\item Организовывать свою жизнь
613\item Создавать документы и презентации (latex)
614\item Использовать технику грамотного программирования
615\item Заменять Markdown
616\end{itemize}
617
618\url{https://orgmode.org/worg/org-tutorials/}
619\end{frame}
620\begin{frame}[label={sec:org7031564}]{Tramp}
621\begin{quote}
622Вимеры могут привести в аргумент то, что их редактор уже доступен
623на многих системам и ничего не надо докачивать и что можно
624редактировать прямо на сервере.
625\end{quote}
626В Emacs вы можете редактировать удалённые файлы через ssh,
627использую Tramp. Выглядеть это будет также как вы редактируете всё
628на своей родной системе. В Vim редактирование на сервере работает
629только при условии отсутствия конфигурации, в Emacs
630\end{frame}
631\begin{frame}[label={sec:org759bf16},fragile]{Кастомизация}
632 \begin{center}
633\includegraphics[width=.9\linewidth]{./customize.png}
634\end{center}
635\texttt{M-x customize} открывает GUI, позволяющий редактировать поведение
636и внешний вид Emacs.
637\end{frame}
638\begin{frame}[label={sec:org5267aa1}]{.emacs / init.el}
639В качестве конфигурации Emacs использует один из следующих файлов в домашней директории:
640\begin{itemize}
641\item \textasciitilde{}/.emacs
642\item \textasciitilde{}/.emacs.d/init.el
643\end{itemize}
644
645Файл конфигурации содержит листинг кода на Emacs Lisp, который
646Emacs вычисляет при запуске программы. Чтобы создавать конфиг Emacs
647вовсе необязательно в идеале владеть Emacs Lisp.
648\end{frame}
649\begin{frame}[label={sec:org3f75b3c},fragile]{Пакетный менеджер package.el}
650 Для расширения предусмотрен пакетный менеджер, который уже встроен
651в редактор. По-умолчанию доступен только один официальный
652репозиторий Elpa, но пользователь может подключать сторонние
653(например Melpa).
654\begin{itemize}
655\item \texttt{M-x list-packages} -- список пакетов, доступных в репозиториях
656\item \texttt{M-x package-install <название пакета>} -- установка пакета из репозитория
657\end{itemize}
658\end{frame}
659
660\begin{frame}[label={sec:org0c37de3},fragile]{use-package}
661 \alert{use-package} -- это декларативная обёртка от сообщества для
662 package.el. Рекомендую использовать use-package, чтобы ваш конфиг
663 не превратился со временем в нечитаемое месиво.
664\begin{itemize}
665\item \texttt{:config} -- изолирует конфигурацию пакетов друг от друга
666\item \texttt{:hook} -- короткая запись для навешивания хуков
667\item \texttt{:ensure} -- загружает пакет из репозитория
668\item \texttt{:diminish} -- скрывает мод из модлайна
669\item и другие опции
670\end{itemize}
671\end{frame}
672
673\section*{Дистрибутивы}
674\label{sec:orga045702}
675\begin{frame}[label={sec:orgf602764}]{Vanilla}
676Emacs, который поставляется на большинстве систем без готовой
677конфигурации.
678
679\begin{center}
680\includegraphics[width=.9\linewidth]{./emacs-vanilla.png}
681\end{center}
682
683\url{https://www.gnu.org/software/emacs/}
684\end{frame}
685\begin{frame}[label={sec:orgafffedd}]{Doom Emacs}
686Emacs с поддержкой vim и emacs биндов и тонной пакетов на все случаи жизни
687
688\begin{center}
689\includegraphics[width=.9\linewidth]{./emacs-doom.png}
690\end{center}
691
692\url{https://github.com/doomemacs/doomemacs}
693\end{frame}
694\begin{frame}[label={sec:orgacb615f}]{Spacemacs}
695По сути тоже самое, что Doom, но старее и медленнее.
696
697\begin{center}
698\includegraphics[width=.9\linewidth]{./emacs-spacemacs.png}
699\end{center}
700
701\url{https://www.spacemacs.org/}
702\end{frame}
703\begin{frame}[label={sec:org6a4511a}]{Prelude}
704Расширяет дефолтный Emacs, но не настолько сильно как Doom и
705Spacemacs. Пытается придерживаться "Sane Defaults".\\[0pt]
706
707\url{https://prelude.emacsredux.com/en/latest/}
708\end{frame}
709\section*{Материалы по Emacs}
710\label{sec:org5e52afa}
711\begin{frame}[label={sec:org5eac8c3}]{Изучение Emacs внутри Emacs}
712\begin{itemize}
713\item (\alert{C-h t}) Help => Emacs Tutorial
714\item (\alert{C-h r}) Info emacs manual
715\item Introduction to Emacs Lisp
716\end{itemize}
717\end{frame}
718\begin{frame}[label={sec:org9645604},shrink=10]{Книги}
719\begin{block}{Mastering Emacs}
720\begin{center}
721\includegraphics[height=80]{./mastering-emacs.png}
722\end{center}
723
724\url{https://masteringemacs.org}
725\end{block}
726\begin{block}{Learning Gnu Emacs}
727\begin{center}
728\includegraphics[height=80]{./learning-emacs.jpg}
729\end{center}
730
731\url{https://dl.acm.org/doi/book/10.5555/2167272}
732\end{block}
733\end{frame}
734\begin{frame}[label={sec:org9a25e5a}]{Заключение}
735GNU Emacs имеет широкие возможности модификации самого себя, что
736предоставляет нам как пользователям реализовывать свои задумки с
737гораздом меньшим количеством преград чем в других решениях.
738
739\begin{center}
740\includegraphics[width=.9\linewidth]{./prot.png}
741\end{center}
742Есть похожий доклад, который рекомендую посмотреть.
743\end{frame}
744\begin{frame}[label={sec:orga5d34a2}]{Вопросы?}
745\begin{itemize}
746\item \url{https://fosstodon.org/@w96k}
747\item \url{https://w96k.dev}
748\end{itemize}
749
750\begin{center}
751\includegraphics[height=50]{./wk-logo.png}
752\end{center}
753
754Заходите в русскоязычный Emacs чат в Telegram, если вас там нет:
755\begin{itemize}
756\item \url{https://t.me/emacs\_ru}
757\end{itemize}
758\end{frame}
759\end{document}
Note: See TracBrowser for help on using the repository browser.