source: content/presentations/emacs/emacs-what-user-freedom-is-about.org@ 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: 35.8 KB
Line 
1#+Title: Emacs: what user freedom is about
2#+Author: CC-0: No Rights Reserved
3#+EMAIL: w96k@runbox.com
4#+DATE: \href{https://w96k.dev}{w96k.dev} <2023-11-25 Sat>
5#+LANGUAGE: ru
6#+OPTIONS: H:2 num:nil toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t
7#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
8#+BEAMER_THEME: Goettingen
9#+BEAMER_COLOR_THEME: default
10#+LATEX_HEADER: \usepackage[russian]{babel}
11#+LATEX_HEADER: \usepackage[protrusion=true,activate={true,nocompatibility},final,tracking=true,kerning=true,spacing=true,factor=1100]{microtype}\SetTracking{encoding={*}, shape=sc}{40}
12#+LATEX_CLASS_OPTIONS: [article,11pt,notitlepage,notitle,oneside,twocolumn]
13#+STARTUP: beamer
14#+LINK_HOME: https://w96k.dev
15
16* Вступление
17
18# Всем привет, меня зовут Михаил, я переехал в Тбилиси в сентябре
19# прошлого года, работаю бекенд разработчиком и использую Emacs для
20# разработки и других целей уже более трёх лет. Я не самый искушенный
21# пользователь этого редактора в том смысле, что я его знаю не
22# настолько углубленно, тем не менее есть причины по которым GNU Emacs
23# меня заинтересовал и я продолжаю его использовать. Об этих причинах
24# пойдёт речь в докладе, надеюсь будет хоть сколько-нибудь интересно.
25
26# <Переключение слайда>
27
28# Я рассчитываю что из присутствующих есть те, кто имеет не самое
29# подробное представление об этом редакторе. В противном случае боюсь
30# будет неинтересно, так как большинство пользователей вероятно и так
31# в курсе о преимуществах этого редактора.
32
33** Для кого доклад
34Доклад нацелен в первую очередь на тех, кто по тем или иным причинам
35не знаком с редактором GNU Emacs и хотел бы узнать причины для начала
36его использования. Одна из таких причин — свобода.
37
38* GNU
39** GNU/Emacs
40 #+ATTR_LATEX: :width 100
41 [[./emacs.png]] *GNU/Emacs* -- это свободный немодальный текстовый
42 редактор общего назначения, созданный в 1985 году Ричардом
43 Столлманом. Редактор обновляется по сей день и доступен на многих
44 платформах в том числе Windows.
45
46** Кто использовал Emacs
47 Имаксом в той или иной степени пользовались следующие люди:
48 * [[https://en.wikipedia.org/wiki/Linus_Torvald][Linus Torvalds]]
49 * [[https://en.wikipedia.org/wiki/Donald_Knuth][Donald Knuth]]
50 * [[https://en.wikipedia.org/wiki/Yukihiro_Matsumoto][Yukihiro Matsumoto]]
51 * [[https://en.wikipedia.org/wiki/Guido_van_rossum][Guido van Rossum]]
52 * [[https://en.wikipedia.org/wiki/Rich_Hickey][Rich Hickey]]
53 * [[https://en.wikipedia.org/wiki/Joe_Armstrong_(programmer)][Joe Armstrong]]
54 * [[https://en.wikipedia.org/wiki/Eric_Raymond][Eric Raymond]]
55 * [[https://en.wikipedia.org/wiki/Andrei_Alexandrescu][Andrei Alexandrescu]]
56 * [[https://en.wikipedia.org/wiki/Edward_Snowden][Edward Snowden]]
57
58** Главный экран
59 # Продемонстрировать главный экран Emacs
60
61 #+ATTR_LATEX: :height 100
62 [[./emacs-splash.png]]
63
64 Если открыть Имакс, то нас встретит следующая надпись:\\
65
66
67 *Welcome to GNU Emacs, one component of the GNU/Linux operating system.*
68
69
70 Что это значит?
71
72** GNU is not Unix
73 #+ATTR_LATEX: :height 60
74 [[./gnu.png]]
75
76 *GNU* -- это проект фонда свободного программного обеспечения, который
77 содержит ПО, следующее четырём свободам:
78
79** Свободы GNU
80 :PROPERTIES:
81 :BEAMER_opt: shrink=5
82 :END:
83*** Свобода 0
84 Свобода выполнять программу как вам угодно в любых целях.
85
86*** Свобода 1
87 Свобода изучать работу программы и модифицировать
88 программу, чтобы она выполняла ваши вычисления, как вы
89 пожелаете.
90
91*** Свобода 2
92 Свобода передавать копии
93
94*** Свобода 3
95 Свобода передавать копии своих измененных версий другим. Этим вы
96 можете дать всему сообществу возможность получать выгоду от ваших
97 изменений.
98
99** Больше о GNU
100 Деятельность GNU, FSF и Ричарда Столлмана подробно описана в книге "[[https://en.wikipedia.org/wiki/Free_as_in_Freedom][Free as in
101 Freedom]]", которая доступна на русском языке.
102
103 #+ATTR_LATEX: :width 100
104 [[./gnu-book.jpeg]]
105
106 https://www.gnu.org/
107
108* Свобода
109# Я только что перечислил какую свободу предоставляет проект GNU, но
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 - Недоступность документации API для изменений
142 - Технические сложности: сложная процедура изменения даже малейшей части кода
143 - Программа написана так, чтобы её не модифицировали (final классы,
144 private методы вот это всё)
145 - Собственническая организация приёма патчей и принятия решений
146** Свобода в контексте GNU Emacs
147GNU Emacs один из немногих редакторов, которые могут предоставить
148свободу пользователю с наименьшими трудностями в реализации своих
149идей.
150** Свобода Emacs: Свобода модификации
151GNU Emacs можно модифицировать практически как угодно. Не нравится
152автокомплит, меняем или дописываем свой, не нравятся элементы
153интерфейса убираем их, не нравится как выглядит кнопочка, у вас есть
154средства чтобы исправить это. В мейнстримных редакторах так нельзя, а
155если и можно, то есть существенные ограничения. В Emacs'е мы можем
156менять не только конфигурацию, но и сам код используемых пакетов и
157самого редактора.
158** Свобода Emacs: Использование для любых целей
159Вытекает из предыдущего. Так как у нас нет ограничений на модификацию,
160то у нас появляется свобода использовать программу для любых
161целей. Конечно Emacs в первую очередь заточен для работы с текстом, но
162во-первых текст бывает разный, а во вторых Emacs покрывает некоторые
163сферы применения без текста. Vim хоть кажется таким же свободным, этой
164свободы не предоставляет, возможно это одно из фундаментальных
165различий.
166** Для чего можно использовать Emacs
167 * Literate Programming
168 * Создание TeX / LaTeX и иных документов документов
169 * Email / IRC / XMPP / Telega / Fediverse и т.д.
170 * Создание схем, графиков, рисование (ascii, svg)
171 * Открытие и зачастую редактирование почти любого файла (бинарный
172 файл, изображение, видео, аудио, презентация, документ pdf)
173 * Для управления системой (меняем громкость звука, убиваем
174 процессы, ставим пакеты)
175 * Можно использовать в качество WM (window manager)
176 * Играть в тетрис, шахматы и другие игры :)
177
178Одним словом возможности реализации функционала ограничены в основном
179только желанием человека создать что-то новое.
180
181** Свобода Emacs: Любые способы взаимодействия
182Немного вытекает из предыдущего, но с программой можно
183взаимодействовать не тольк путем ввода текста с клавиатуры.
184 * Можно активно использовать мышь, а можно только клавиатуру
185 * Emacspeak позволяет использовать Emacs слепым людям
186 * Есть сенсорный ввод при помощи жестов
187 * Есть пакеты для голосового ввода
188 * Есть поддержка RTL (right to left) и огромного числа кодировок и
189 языков
190 * Можно с терминала, можно с графикой
191** Emacs как интерфейс к операционной системе
192Есть мнение, что Emacs настольно функциональный, что сам является
193операционной системой. В целом это не так далеко от правды, так как
194возможностей этого редактора хватает, чтобы много вещи операционной
195системы заточить "под себя". Например нам не нравится взаимодействие с
196программой, мы пишем для него обвязку, заточенную конкретно под нас,
197которую мы можем менять в отличие от скомпиленной программы, в которой
198чтобы провести малейшее изменение надо вложить немало времени.
199** Обвязка ls: Dired
200[[./dired.png]]
201
202Dired это файловый менеджер Emacs'а. Внутри он использует ls для
203скорости, но его вывод мы можем редактировать под себя. Помимо того,
204что мы можем можем удалять, создавать, редактировать файлы и
205директории, Dired умеет открывать и создавать архивы.
206
207** Обвязка git: Magit
208[[./magit.png]]
209** Другие обвязки
210Конечно всё обвязать таким образом невозможно, но для большинства
211user-space программ мы можем использовать удобные для нас обвязки как
212бы вместо редактирования самих этих программ.
213 * Обвязка всячески CLI утилит (git, gcc, gdb, make, ledger)
214 * Обвязка программ с графическим выхлопом (Latex)
215** Lisp
216Большинство свобод достигается благодаря использованию в качестве
217языка расширения Emacs Lisp. Лисп -- один из старейших динамических
218языков программирования, основанный на нетипизированном
219лямбда-исчислении. Одной из удобнейших фич языка является его
220динамичность, которая позволяет изменять программу в рантайме, а также
221расширять сам язык при помощи макросов. Можно даже сказать, что Emacs
222Lisp это не язык расширения, это Emacs просто является интерпретатором
223Elisp.
224** Почему Emacs Lisp даёт свободу
225- Динамическая типизация
226- Reflection
227- Introspection
228- Макросы
229- Код есть данные / метациркулярный интерпретатор
230- Мультипарадигма (ООП, ФП, Процедурщина)
231
232* Редакторы
233** Что умеет Emacs чего не умеют другие
234 * Можно модифицировать сам редактор внутри редактора без
235 перезапуска
236 * Менять способы ввода (аккордные бинды, модальные бинды,
237 управление жестами, синтезаторы речи)
238 * Использовать систему версий отличную от Git
239 * Открывать любые файлы вне текущего проекта
240 * Открывать файлы на удалённом компьютере
241 * Открывать файлы через sudo
242 * Редактировать любой элемент интерфейса
243 * Не быть ограниченным форматом конфигурации и доступными настройками
244 * Жить 40+ лет и обновляться
245
246** Другие редакторы
247 Рассмотрим следующие текстовые редакторы, которые возможно
248 используют ваши друзья и коллеги:
249
250 * IDE от JetBrains (PHPStorm, InttelliIDEA и т.д.)
251 * VS Code
252 * Sublime Text
253 * Vi/Vim/NeoVim
254
255 За исключением вима данные редакторы не подходят для общего
256 назначения, большинство из них направлены именно на написание
257 кода. Тем не менее даже в более узкой специализации они имеют
258 серьезные изъяны.
259
260** Недостатки популярных редакторов
261*** IDE от JetBrains
262 * Закрытый исходный код
263 * Плохая производительность, долгий отклик
264 * Узкая специализация (одно IDE на язык вместо одного окружения для всего)
265 * Неконсинстентность интерфейса
266*** Sublime Text
267 * Закрытый исходный код
268 * Неконсинстентность интерфейса
269** Недостатки популярных редакторов
270*** VS Code
271 * Телеметрия
272 * Полузакрытость (Electron)
273 * Низкая производительность (Electron)
274 * Неконсистентность интерфейса
275*** Vi/Vim/NeoVim
276 * Невозможно выйти
277 * Невозможно модифицировать и использовать для любых целей
278 (например выключить моды и сделать их как в имаксе)
279 ((если это возможно сделайте пожалуйста, в emacs есть evil))
280* Vim и Emacs
281** Почему Emacs и Vim непопулярны
282
283 #+ATTR_LATEX: :height 120
284 [[./learning-curve.jpg]]
285
286 Ответ: Кривая обучения
287
288** Миф: Emacs не настолько сложен
289 Мы видим, что вход в вим высокий. С другой стороны у Emacs кривая
290 обучения начинается с самого низа, но потом закручивается. Что это
291 значит?
292
293** Миф: Emacs не настолько сложен
294 GNU/Emacs имеет рядовые инструменты для работы с текстом: поддержка
295 мыши (выделение, скролл), стрелки, подсказки горячих клавиш,
296 различные менюшки. Emacs в изначальной поставке -- это что-то между
297 обычным текстовым редактором вроде notepad.exe и IDE. Тем не менее
298 Emacs имеет возможности расширения, которые позволяют превратить
299 его в нечто похожее на IDE и покрывать даже больше задач.
300** M-x butterfly
301 #+ATTR_LATEX: :height 140
302 [[./real_programmers.png]]
303
304 Шуточная функция поставляется в GNU/Emacs после появления комикса.
305** Схожести и отличия Emacs / Vim
306 #+ATTR_LATEX: :height 120
307 [[./emacs-vim.png]]
308 Не смотря на то, что редакторы достаточно разительно отличаются
309 друг друга концептуально, на самом деле у них больше общего чем
310 может показаться.
311** Схожести
312 | | *Emacs* | *Vim* |
313 |-------------------------+---------+-------|
314 | Интерфейс | Текст | Текст |
315 | Туториал | Есть | Есть |
316 | Расширяемый | Да | Да |
317 | Команды | M-x | : |
318 | Буферы | Есть | Есть |
319 | Файловый менеджер | Есть | Есть |
320 | Макросы | Есть | Есть |
321 | Автокомплит | Есть | Есть |
322 | Интеграция с терминалом | Есть | Есть |
323
324** Отличия
325 | | *Emacs* | *Vim* |
326 |-----------------+---------------+-------------|
327 | Ввод | Любые системы | Модальность |
328 | Язык расширений | Emacs Lisp | VimScript |
329 | Принципы | M-x butterfly | Unix Way |
330 | Документация | Info | Man |
331 | Основной клиент | Графика | Терминал |
332
333 Подробнее о сравнении Vim и Emacs:
334 https://en.wikipedia.org/wiki/Editor_war
335
336** Что даёт графический клиент
337 - Правильно работающие бинды (например в консоли не сработает C-.)
338 - Управление мышью
339 - Отображение картинок, видео, граф. документов вроде pdf
340 - Отображение шрифта с лигатурами
341 - Всплывающие окна и дополнительные меню
342** Evil
343 #+ATTR_LATEX: :height 25
344 [[./evil.png]]
345
346 *Evil-mode* -- это расширение для GNU/Emacs, которое эмулирует
347 Vim. Так как оба редактора работают со всеми объектами как с текстом,
348 то использование эмуляции Vim в Emacs более тривиальное, чем в
349 каком-нибудь IDE. Огромное количество пакетов Emacs предоставляют
350 биндинги для работы с Evil.
351* Возможности GNU Emacs
352** Что есть в GNU Emacs
353 * Реализация Client-Server архитектуры
354 * Рантайм Emacs Lisp с JIT компиляцией
355 * Аккордовые сочетания клавиш
356 * Макросы
357 * Встроенный пакетный менеджер
358 * Встроенный файловый менеджер
359 * Отображение номеров строк
360 * Работа с терминалом (ansi-term, eshell)
361 * Разделение на фреймы
362 * LSP клиент
363 * Поддержка большого числа языков программирования
364 * Поддержка спелл-чекера
365 * Встроенная система помощи (туториал, apropos, функции, бинды)
366** Что есть в GNU/Emacs
367 * Интерактивные элементы (кнопки, формы и т.д.)
368 * Интерфейс к info и man
369 * Поиск
370 * Встроенный текстовый браузер eww
371 * Встроенные клиенты IRC и email
372 * Линтер кода Flymake
373 * Интерфейс к GDB
374 * Система контроля версий (не только git)
375 * Возможность удаленного редактирования кода (например через ssh)
376 * Org-mode для ведения заметок (и много чего еще)
377 * Можно читать документы pdf, docx и презентации
378 * Система учёта времени на работе timeclock (засекает 8 часов)
379 * M-x doctor (chatgpt до изобретения нейросетей)
380** Биндинги Emacs
381 Биндинги в Emacs мнемонические. Это значит, что их легко запомнить,
382 так как буква биндинга практически всегда что-то обозначает.
383 - =C-n= Следующая строка (next)
384 - =C-p= Предыдущая строка (previous)
385 - =C-f= Вперед на символ (forward)
386 - =C-b= Назад на символ (back)
387
388 Не все биндинги появились именно в Emacs. Emacs изначально был
389 расширением редактора TECO.
390
391 Подробнее об истории биндингов Emacs и Vim:
392 http://xahlee.info/kbd/keyboard_hardware_and_key_choices.html
393** Биндинги Emacs
394 Важным отличием биндингов в редакторе GNU/Emacs является то, что
395 они еще и аккордовыми. Это значит, что несколько комбинаций
396 следующих друг за другом могут что-то значить. Например:
397 - =C-x C-f= открыть файл
398 - =C-x s= сохранить файл
399 Набираемые аккордовые бинды отображаются в мод-лайне. Для сброса
400 существует биндинг *C-g*.
401
402** Биндинги Emacs (продолжение)
403 Не смотря на наличие аккордовых биндов, Emacs не ограничивается
404 только ими и в редакторе поддерживают свои модальные режимы и режим
405 совместимости с VIM.
406** Emacs Lisp
407 Ядро редактора написано на языке C, остальное -- язык расширений
408 Emacs Lisp (25% C + 75% Elisp). Выглядит примерно так:
409
410 #+BEGIN_SRC emacs-lisp
411 ;; Объявление и вызов функции
412 (defun имя-функции (аргументы) (тело функции))
413 (имя-функция аргумент1 аргумент2)
414
415 (defun hello (name)
416 (concat "Hello, " name)) ;; => hello
417 (hello "Mikhail") ;; => "Hello, Mikhail"
418 #+END_SRC
419** Всё есть функция
420 Любое действие в редакторе представляет из себя функцию.
421 - Двинули курсор в начало строки -- функция beginning-of-line
422 - Сохранили файл -- функция save-buffer
423 - Вставили текст -- функция yank
424
425 И так с любым действием. В VIM вероятно также.
426
427** Система помощи
428 В GNU/Emacs встроен туториал и очень удобная система помощи.
429 - =C-h t= Туториал (на русском языке)
430 - =C-h r= Мануал Emacs
431 - =C-h a= Apropos (по описанию находит нужную функцию)
432 - =C-h k= Describe-key (описывает функцию, прикрепленную к бинду)
433 - =C-h f= Describe-function (описывает функцию)
434 - =C-h m= Describe-mode
435 - =C-h i= Info
436** Моды
437 *Мод* -- это модификация GNU/Emacs, которая включается при
438 определенном условии.
439 - Major мод может быть всего один, чаще всего вешается на открытие
440 файла определенного расширения. Например при открытие файла с
441 расширением .py запустится python-mode.
442 - Minor модов может быть неограниченное количество, они дополняют
443 функционал Major модов. Могут быть активированы всегда (имеют
444 префикс global-<название мода>) или при определенном условии.
445** Мод-лайн
446 *Мод-лайн* отображает информацию об используемых модах и состоянии
447 файла (название, сохранён или нет, позиция курсора, система
448 контроля версий). Пользователь может расширить мод-лайн для показа
449 своей информации, например времени. Под мод-лайном располагает
450 Echo зона, которая даёт уведомления о работе модов, а также может
451 запрашивать ввод.
452** Буфер
453 *Буфер* -- это обособленная память с текстом, которой манипулирует
454 имакс прежде чем писать на диск. Экран Emacs отображает буфера,
455 грубо говоря вы видите всегда как-минимум один буфер. При запуске
456 доступны следующие буферы:
457 - =*GNU EMACS*= -- начальный экран
458 - =*scratch*= -- площадка REPL для обкатывания Emacs Lisp
459 Бинды:
460 - =C-x b= -- сменить буфер
461 - =C-x C-b= -- список буферов
462** Программирование
463 Поддерживаются языки:
464 - C
465 - Lisp и Scheme
466 - C++
467 - Fortran
468 - Java
469 - Javascript
470 - Python
471 - Ruby
472 - Perl
473 - и множество других
474 Разумеется список можно расширить сторонними пакетами
475** Программирование
476 Также для задач программирования доступны:
477 - Форматирование кода
478 - Компилирование программ
479 - Линтер Flymake, который на фоне проверяет текст программы
480 - Дебаггеры GDB, PDB, JDB и другие
481 - Интерфейс к grep
482 - Выполнение кода Emacs Lisp прямо в редакторе
483** Система контроля версий
484 При программировании полезно использовать систему контроля
485 версий. Самая распространненая система -- git. Про другие системы
486 обычно забывают, но не в случае Emacs. Система контроля версий
487 Emacs поддерживает:
488 - Git
489 - Mercurial
490 - CVS
491 - Bazaar
492 - Subversion
493 - и другие
494
495** Org-mode
496 *Org-mode* -- Markdown на колёсах, декларативный формат описания
497 всего и вся, основанный на списке из уровней (Outline). С помощью
498 org-mode можно:
499 - Организовывать свою жизнь
500 - Создавать документы и презентации (latex)
501 - Использовать технику грамотного программирования
502 - Заменять Markdown
503
504 https://orgmode.org/worg/org-tutorials/
505** Tramp
506 #+BEGIN_QUOTE
507 Вимеры могут привести в аргумент то, что их редактор уже доступен
508 на многих системам и ничего не надо докачивать и что можно
509 редактировать прямо на сервере.
510 #+END_QUOTE
511 В Emacs вы можете редактировать удалённые файлы через ssh,
512 использую Tramp. Выглядеть это будет также как вы редактируете всё
513 на своей родной системе. В Vim редактирование на сервере работает
514 только при условии отсутствия конфигурации, в Emacs
515** Кастомизация
516 [[./customize.png]]
517 =M-x customize= открывает GUI, позволяющий редактировать поведение
518 и внешний вид Emacs.
519** .emacs / init.el
520 В качестве конфигурации Emacs использует один из следующих файлов в домашней директории:
521 - ~/.emacs
522 - ~/.emacs.d/init.el
523
524 Файл конфигурации содержит листинг кода на Emacs Lisp, который
525 Emacs вычисляет при запуске программы. Чтобы создавать конфиг Emacs
526 вовсе необязательно в идеале владеть Emacs Lisp.
527** Пакетный менеджер package.el
528 Для расширения предусмотрен пакетный менеджер, который уже встроен
529 в редактор. По-умолчанию доступен только один официальный
530 репозиторий Elpa, но пользователь может подключать сторонние
531 (например Melpa).
532 - =M-x list-packages= -- список пакетов, доступных в репозиториях
533 - =M-x package-install <название пакета>= -- установка пакета из репозитория
534
535** use-package
536 *use-package* -- это декларативная обёртка от сообщества для
537 package.el. Рекомендую использовать use-package, чтобы ваш конфиг
538 не превратился со временем в нечитаемое месиво.
539 - =:config= -- изолирует конфигурацию пакетов друг от друга
540 - =:hook= -- короткая запись для навешивания хуков
541 - =:ensure= -- загружает пакет из репозитория
542 - =:diminish= -- скрывает мод из модлайна
543 - и другие опции
544
545* Дистрибутивы
546** Vanilla
547Emacs, который поставляется на большинстве систем без готовой
548конфигурации.
549
550[[./emacs-vanilla.png]]
551
552https://www.gnu.org/software/emacs/
553** Doom Emacs
554Emacs с поддержкой vim и emacs биндов и тонной пакетов на все случаи жизни
555
556[[./emacs-doom.png]]
557
558https://github.com/doomemacs/doomemacs
559** Spacemacs
560По сути тоже самое, что Doom, но старее и медленнее.
561
562[[./emacs-spacemacs.png]]
563
564https://www.spacemacs.org/
565** Prelude
566Расширяет дефолтный Emacs, но не настолько сильно как Doom и
567Spacemacs. Пытается придерживаться "Sane Defaults".\\
568
569https://prelude.emacsredux.com/en/latest/
570* Материалы по Emacs
571** Изучение Emacs внутри Emacs
572 * (*C-h t*) Help => Emacs Tutorial
573 * (*C-h r*) Info emacs manual
574 * Introduction to Emacs Lisp
575** Книги
576 :PROPERTIES:
577 :BEAMER_opt: shrink=10
578 :END:
579*** Mastering Emacs
580 #+ATTR_LATEX: :height 80
581 [[./mastering-emacs.png]]
582
583 https://masteringemacs.org
584*** Learning Gnu Emacs
585 #+ATTR_LATEX: :height 80
586 [[./learning-emacs.jpg]]
587
588 https://dl.acm.org/doi/book/10.5555/2167272
589** Заключение
590GNU Emacs имеет широкие возможности модификации самого себя, что
591предоставляет нам как пользователям реализовывать свои задумки с
592гораздом меньшим количеством преград чем в других решениях.
593
594[[./prot.png]]
595Есть похожий доклад, который рекомендую посмотреть.
596** Вопросы?
597
598- https://fosstodon.org/@w96k
599- [[https://w96k.dev]]
600
601#+ATTR_LATEX: :height 50
602[[./wk-logo.png]]
603
604Заходите в русскоязычный Emacs чат в Telegram, если вас там нет:
605- https://t.me/emacs_ru
Note: See TracBrowser for help on using the repository browser.