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
|
---|
115 | Freedom}", которая доступна на русском языке.
|
---|
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 классы,
|
---|
146 | private методы вот это всё)
|
---|
147 | \item Собственническая организация приёма патчей и принятия решений
|
---|
148 | \end{itemize}
|
---|
149 | \end{frame}
|
---|
150 | \begin{frame}[label={sec:org6a6bc8f}]{Свобода в контексте GNU Emacs}
|
---|
151 | GNU Emacs один из немногих редакторов, которые могут предоставить
|
---|
152 | свободу пользователю с наименьшими трудностями в реализации своих
|
---|
153 | идей.
|
---|
154 | \end{frame}
|
---|
155 | \begin{frame}[label={sec:org70e5356}]{Свобода Emacs: Свобода модификации}
|
---|
156 | GNU 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 |
|
---|
218 | Dired это файловый менеджер 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 | Конечно всё обвязать таким образом невозможно, но для большинства
|
---|
231 | user-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
|
---|
245 | Lisp это не язык расширения, это Emacs просто является интерпретатором
|
---|
246 | Elisp.
|
---|
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 не настолько сложен}
|
---|
347 | GNU/Emacs имеет рядовые инструменты для работы с текстом: поддержка
|
---|
348 | мыши (выделение, скролл), стрелки, подсказки горячих клавиш,
|
---|
349 | различные менюшки. Emacs в изначальной поставке -- это что-то между
|
---|
350 | обычным текстовым редактором вроде notepad.exe и IDE. Тем не менее
|
---|
351 | Emacs имеет возможности расширения, которые позволяют превратить
|
---|
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, которое эмулирует
|
---|
419 | Vim. Так как оба редактора работают со всеми объектами как с текстом,
|
---|
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, остальное -- язык расширений
|
---|
495 | Emacs 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. Система контроля версий
|
---|
596 | Emacs поддерживает:
|
---|
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, который
|
---|
646 | Emacs вычисляет при запуске программы. Чтобы создавать конфиг 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}
|
---|
676 | Emacs, который поставляется на большинстве систем без готовой
|
---|
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}
|
---|
686 | Emacs с поддержкой 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 и
|
---|
705 | Spacemacs. Пытается придерживаться "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}]{Заключение}
|
---|
735 | GNU 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}
|
---|