summaryrefslogtreecommitdiff
path: root/content/presentations/emacs/emacs-what-user-freedom-is-about.org
diff options
context:
space:
mode:
Diffstat (limited to 'content/presentations/emacs/emacs-what-user-freedom-is-about.org')
-rw-r--r--content/presentations/emacs/emacs-what-user-freedom-is-about.org605
1 files changed, 605 insertions, 0 deletions
diff --git a/content/presentations/emacs/emacs-what-user-freedom-is-about.org b/content/presentations/emacs/emacs-what-user-freedom-is-about.org
new file mode 100644
index 0000000..993a8f7
--- /dev/null
+++ b/content/presentations/emacs/emacs-what-user-freedom-is-about.org
@@ -0,0 +1,605 @@
+#+Title: Emacs: what user freedom is about
+#+Author: CC-0: No Rights Reserved
+#+EMAIL: w96k@runbox.com
+#+DATE: \href{https://w96k.dev}{w96k.dev} <2023-11-25 Sat>
+#+LANGUAGE: ru
+#+OPTIONS: H:2 num:nil toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t
+#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
+#+BEAMER_THEME: Goettingen
+#+BEAMER_COLOR_THEME: default
+#+LATEX_HEADER: \usepackage[russian]{babel}
+#+LATEX_HEADER: \usepackage[protrusion=true,activate={true,nocompatibility},final,tracking=true,kerning=true,spacing=true,factor=1100]{microtype}\SetTracking{encoding={*}, shape=sc}{40}
+#+LATEX_CLASS_OPTIONS: [article,11pt,notitlepage,notitle,oneside,twocolumn]
+#+STARTUP: beamer
+#+LINK_HOME: https://w96k.dev
+
+* Вступление
+
+# Всем привет, меня зовут Михаил, я переехал в Тбилиси в сентябре
+# прошлого года, работаю бекенд разработчиком и использую Emacs для
+# разработки и других целей уже более трёх лет. Я не самый искушенный
+# пользователь этого редактора в том смысле, что я его знаю не
+# настолько углубленно, тем не менее есть причины по которым GNU Emacs
+# меня заинтересовал и я продолжаю его использовать. Об этих причинах
+# пойдёт речь в докладе, надеюсь будет хоть сколько-нибудь интересно.
+
+# <Переключение слайда>
+
+# Я рассчитываю что из присутствующих есть те, кто имеет не самое
+# подробное представление об этом редакторе. В противном случае боюсь
+# будет неинтересно, так как большинство пользователей вероятно и так
+# в курсе о преимуществах этого редактора.
+
+** Для кого доклад
+Доклад нацелен в первую очередь на тех, кто по тем или иным причинам
+не знаком с редактором GNU Emacs и хотел бы узнать причины для начала
+его использования. Одна из таких причин — свобода.
+
+* GNU
+** GNU/Emacs
+ #+ATTR_LATEX: :width 100
+ [[./emacs.png]] *GNU/Emacs* -- это свободный немодальный текстовый
+ редактор общего назначения, созданный в 1985 году Ричардом
+ Столлманом. Редактор обновляется по сей день и доступен на многих
+ платформах в том числе Windows.
+
+** Кто использовал Emacs
+ Имаксом в той или иной степени пользовались следующие люди:
+ * [[https://en.wikipedia.org/wiki/Linus_Torvald][Linus Torvalds]]
+ * [[https://en.wikipedia.org/wiki/Donald_Knuth][Donald Knuth]]
+ * [[https://en.wikipedia.org/wiki/Yukihiro_Matsumoto][Yukihiro Matsumoto]]
+ * [[https://en.wikipedia.org/wiki/Guido_van_rossum][Guido van Rossum]]
+ * [[https://en.wikipedia.org/wiki/Rich_Hickey][Rich Hickey]]
+ * [[https://en.wikipedia.org/wiki/Joe_Armstrong_(programmer)][Joe Armstrong]]
+ * [[https://en.wikipedia.org/wiki/Eric_Raymond][Eric Raymond]]
+ * [[https://en.wikipedia.org/wiki/Andrei_Alexandrescu][Andrei Alexandrescu]]
+ * [[https://en.wikipedia.org/wiki/Edward_Snowden][Edward Snowden]]
+
+** Главный экран
+ # Продемонстрировать главный экран Emacs
+
+ #+ATTR_LATEX: :height 100
+ [[./emacs-splash.png]]
+
+ Если открыть Имакс, то нас встретит следующая надпись:\\
+
+
+ *Welcome to GNU Emacs, one component of the GNU/Linux operating system.*
+
+
+ Что это значит?
+
+** GNU is not Unix
+ #+ATTR_LATEX: :height 60
+ [[./gnu.png]]
+
+ *GNU* -- это проект фонда свободного программного обеспечения, который
+ содержит ПО, следующее четырём свободам:
+
+** Свободы GNU
+ :PROPERTIES:
+ :BEAMER_opt: shrink=5
+ :END:
+*** Свобода 0
+ Свобода выполнять программу как вам угодно в любых целях.
+
+*** Свобода 1
+ Свобода изучать работу программы и модифицировать
+ программу, чтобы она выполняла ваши вычисления, как вы
+ пожелаете.
+
+*** Свобода 2
+ Свобода передавать копии
+
+*** Свобода 3
+ Свобода передавать копии своих измененных версий другим. Этим вы
+ можете дать всему сообществу возможность получать выгоду от ваших
+ изменений.
+
+** Больше о GNU
+ Деятельность GNU, FSF и Ричарда Столлмана подробно описана в книге "[[https://en.wikipedia.org/wiki/Free_as_in_Freedom][Free as in
+ Freedom]]", которая доступна на русском языке.
+
+ #+ATTR_LATEX: :width 100
+ [[./gnu-book.jpeg]]
+
+ https://www.gnu.org/
+
+* Свобода
+# Я только что перечислил какую свободу предоставляет проект GNU, но
+# что же такое свобода. Это мгогранный термин, который
+# интерпретируется в философии, политике и в целом разными людьми
+# совершенно по разному.
+
+# Для этого доклада нам подойдёт самое просто определение свободы,
+# взятое из Википедии.
+
+# К сожалению в использовании и написании софта мы редко бываем
+# полностью свободны для реализации своей воли.
+** Определение свободы
+Свобо́да — состояние субъекта, в котором он является определяющей
+причиной своих действий.
+
+# Определение свободы максимально обобщенно, поэтому мы будем
+# рассматривать концепт свободы в разных контекстах. Контекст первый:
+# свобода в использовании программ. Если свобода это то насколько мы
+# как субъекты можем реализовывать свою волю в использовании программ,
+# то несвобода это то, как мы не можем эту волю реализовать и миримся
+# с различного рода ограничениями при взаимодействии с программой.
+
+# Довольно банальные примеры реализации воли у пользователя:
+# Мне не нравится текст или цвет, хочу изменить, как мне это сделать
+** Свобода в контексте использования программ
+ - Пользователь хочет изменить функционал программы
+ - Для этого необходимо получить и изучить исходный код
+ - У исходного кода должно быть разрешение на модификацию (открытая
+ или свободная лицензия)
+ - Только тогда мы свободны внести свои изменения в программу
+
+** Нюансы и сложности при модификации
+ - Закрытость кода или использование закрытых компонентов
+ - Недоступность документации API для изменений
+ - Технические сложности: сложная процедура изменения даже малейшей части кода
+ - Программа написана так, чтобы её не модифицировали (final классы,
+ private методы вот это всё)
+ - Собственническая организация приёма патчей и принятия решений
+** Свобода в контексте GNU Emacs
+GNU Emacs один из немногих редакторов, которые могут предоставить
+свободу пользователю с наименьшими трудностями в реализации своих
+идей.
+** Свобода Emacs: Свобода модификации
+GNU Emacs можно модифицировать практически как угодно. Не нравится
+автокомплит, меняем или дописываем свой, не нравятся элементы
+интерфейса убираем их, не нравится как выглядит кнопочка, у вас есть
+средства чтобы исправить это. В мейнстримных редакторах так нельзя, а
+если и можно, то есть существенные ограничения. В Emacs'е мы можем
+менять не только конфигурацию, но и сам код используемых пакетов и
+самого редактора.
+** Свобода Emacs: Использование для любых целей
+Вытекает из предыдущего. Так как у нас нет ограничений на модификацию,
+то у нас появляется свобода использовать программу для любых
+целей. Конечно Emacs в первую очередь заточен для работы с текстом, но
+во-первых текст бывает разный, а во вторых Emacs покрывает некоторые
+сферы применения без текста. Vim хоть кажется таким же свободным, этой
+свободы не предоставляет, возможно это одно из фундаментальных
+различий.
+** Для чего можно использовать Emacs
+ * Literate Programming
+ * Создание TeX / LaTeX и иных документов документов
+ * Email / IRC / XMPP / Telega / Fediverse и т.д.
+ * Создание схем, графиков, рисование (ascii, svg)
+ * Открытие и зачастую редактирование почти любого файла (бинарный
+ файл, изображение, видео, аудио, презентация, документ pdf)
+ * Для управления системой (меняем громкость звука, убиваем
+ процессы, ставим пакеты)
+ * Можно использовать в качество WM (window manager)
+ * Играть в тетрис, шахматы и другие игры :)
+
+Одним словом возможности реализации функционала ограничены в основном
+только желанием человека создать что-то новое.
+
+** Свобода Emacs: Любые способы взаимодействия
+Немного вытекает из предыдущего, но с программой можно
+взаимодействовать не тольк путем ввода текста с клавиатуры.
+ * Можно активно использовать мышь, а можно только клавиатуру
+ * Emacspeak позволяет использовать Emacs слепым людям
+ * Есть сенсорный ввод при помощи жестов
+ * Есть пакеты для голосового ввода
+ * Есть поддержка RTL (right to left) и огромного числа кодировок и
+ языков
+ * Можно с терминала, можно с графикой
+** Emacs как интерфейс к операционной системе
+Есть мнение, что Emacs настольно функциональный, что сам является
+операционной системой. В целом это не так далеко от правды, так как
+возможностей этого редактора хватает, чтобы много вещи операционной
+системы заточить "под себя". Например нам не нравится взаимодействие с
+программой, мы пишем для него обвязку, заточенную конкретно под нас,
+которую мы можем менять в отличие от скомпиленной программы, в которой
+чтобы провести малейшее изменение надо вложить немало времени.
+** Обвязка ls: Dired
+[[./dired.png]]
+
+Dired это файловый менеджер Emacs'а. Внутри он использует ls для
+скорости, но его вывод мы можем редактировать под себя. Помимо того,
+что мы можем можем удалять, создавать, редактировать файлы и
+директории, Dired умеет открывать и создавать архивы.
+
+** Обвязка git: Magit
+[[./magit.png]]
+** Другие обвязки
+Конечно всё обвязать таким образом невозможно, но для большинства
+user-space программ мы можем использовать удобные для нас обвязки как
+бы вместо редактирования самих этих программ.
+ * Обвязка всячески CLI утилит (git, gcc, gdb, make, ledger)
+ * Обвязка программ с графическим выхлопом (Latex)
+** Lisp
+Большинство свобод достигается благодаря использованию в качестве
+языка расширения Emacs Lisp. Лисп -- один из старейших динамических
+языков программирования, основанный на нетипизированном
+лямбда-исчислении. Одной из удобнейших фич языка является его
+динамичность, которая позволяет изменять программу в рантайме, а также
+расширять сам язык при помощи макросов. Можно даже сказать, что Emacs
+Lisp это не язык расширения, это Emacs просто является интерпретатором
+Elisp.
+** Почему Emacs Lisp даёт свободу
+- Динамическая типизация
+- Reflection
+- Introspection
+- Макросы
+- Код есть данные / метациркулярный интерпретатор
+- Мультипарадигма (ООП, ФП, Процедурщина)
+
+* Редакторы
+** Что умеет Emacs чего не умеют другие
+ * Можно модифицировать сам редактор внутри редактора без
+ перезапуска
+ * Менять способы ввода (аккордные бинды, модальные бинды,
+ управление жестами, синтезаторы речи)
+ * Использовать систему версий отличную от Git
+ * Открывать любые файлы вне текущего проекта
+ * Открывать файлы на удалённом компьютере
+ * Открывать файлы через sudo
+ * Редактировать любой элемент интерфейса
+ * Не быть ограниченным форматом конфигурации и доступными настройками
+ * Жить 40+ лет и обновляться
+
+** Другие редакторы
+ Рассмотрим следующие текстовые редакторы, которые возможно
+ используют ваши друзья и коллеги:
+
+ * IDE от JetBrains (PHPStorm, InttelliIDEA и т.д.)
+ * VS Code
+ * Sublime Text
+ * Vi/Vim/NeoVim
+
+ За исключением вима данные редакторы не подходят для общего
+ назначения, большинство из них направлены именно на написание
+ кода. Тем не менее даже в более узкой специализации они имеют
+ серьезные изъяны.
+
+** Недостатки популярных редакторов
+*** IDE от JetBrains
+ * Закрытый исходный код
+ * Плохая производительность, долгий отклик
+ * Узкая специализация (одно IDE на язык вместо одного окружения для всего)
+ * Неконсинстентность интерфейса
+*** Sublime Text
+ * Закрытый исходный код
+ * Неконсинстентность интерфейса
+** Недостатки популярных редакторов
+*** VS Code
+ * Телеметрия
+ * Полузакрытость (Electron)
+ * Низкая производительность (Electron)
+ * Неконсистентность интерфейса
+*** Vi/Vim/NeoVim
+ * Невозможно выйти
+ * Невозможно модифицировать и использовать для любых целей
+ (например выключить моды и сделать их как в имаксе)
+ ((если это возможно сделайте пожалуйста, в emacs есть evil))
+* Vim и Emacs
+** Почему Emacs и Vim непопулярны
+
+ #+ATTR_LATEX: :height 120
+ [[./learning-curve.jpg]]
+
+ Ответ: Кривая обучения
+
+** Миф: Emacs не настолько сложен
+ Мы видим, что вход в вим высокий. С другой стороны у Emacs кривая
+ обучения начинается с самого низа, но потом закручивается. Что это
+ значит?
+
+** Миф: Emacs не настолько сложен
+ GNU/Emacs имеет рядовые инструменты для работы с текстом: поддержка
+ мыши (выделение, скролл), стрелки, подсказки горячих клавиш,
+ различные менюшки. Emacs в изначальной поставке -- это что-то между
+ обычным текстовым редактором вроде notepad.exe и IDE. Тем не менее
+ Emacs имеет возможности расширения, которые позволяют превратить
+ его в нечто похожее на IDE и покрывать даже больше задач.
+** M-x butterfly
+ #+ATTR_LATEX: :height 140
+ [[./real_programmers.png]]
+
+ Шуточная функция поставляется в GNU/Emacs после появления комикса.
+** Схожести и отличия Emacs / Vim
+ #+ATTR_LATEX: :height 120
+ [[./emacs-vim.png]]
+ Не смотря на то, что редакторы достаточно разительно отличаются
+ друг друга концептуально, на самом деле у них больше общего чем
+ может показаться.
+** Схожести
+ | | *Emacs* | *Vim* |
+ |-------------------------+---------+-------|
+ | Интерфейс | Текст | Текст |
+ | Туториал | Есть | Есть |
+ | Расширяемый | Да | Да |
+ | Команды | M-x | : |
+ | Буферы | Есть | Есть |
+ | Файловый менеджер | Есть | Есть |
+ | Макросы | Есть | Есть |
+ | Автокомплит | Есть | Есть |
+ | Интеграция с терминалом | Есть | Есть |
+
+** Отличия
+ | | *Emacs* | *Vim* |
+ |-----------------+---------------+-------------|
+ | Ввод | Любые системы | Модальность |
+ | Язык расширений | Emacs Lisp | VimScript |
+ | Принципы | M-x butterfly | Unix Way |
+ | Документация | Info | Man |
+ | Основной клиент | Графика | Терминал |
+
+ Подробнее о сравнении Vim и Emacs:
+ https://en.wikipedia.org/wiki/Editor_war
+
+** Что даёт графический клиент
+ - Правильно работающие бинды (например в консоли не сработает C-.)
+ - Управление мышью
+ - Отображение картинок, видео, граф. документов вроде pdf
+ - Отображение шрифта с лигатурами
+ - Всплывающие окна и дополнительные меню
+** Evil
+ #+ATTR_LATEX: :height 25
+ [[./evil.png]]
+
+ *Evil-mode* -- это расширение для GNU/Emacs, которое эмулирует
+ Vim. Так как оба редактора работают со всеми объектами как с текстом,
+ то использование эмуляции Vim в Emacs более тривиальное, чем в
+ каком-нибудь IDE. Огромное количество пакетов Emacs предоставляют
+ биндинги для работы с Evil.
+* Возможности GNU Emacs
+** Что есть в GNU Emacs
+ * Реализация Client-Server архитектуры
+ * Рантайм Emacs Lisp с JIT компиляцией
+ * Аккордовые сочетания клавиш
+ * Макросы
+ * Встроенный пакетный менеджер
+ * Встроенный файловый менеджер
+ * Отображение номеров строк
+ * Работа с терминалом (ansi-term, eshell)
+ * Разделение на фреймы
+ * LSP клиент
+ * Поддержка большого числа языков программирования
+ * Поддержка спелл-чекера
+ * Встроенная система помощи (туториал, apropos, функции, бинды)
+** Что есть в GNU/Emacs
+ * Интерактивные элементы (кнопки, формы и т.д.)
+ * Интерфейс к info и man
+ * Поиск
+ * Встроенный текстовый браузер eww
+ * Встроенные клиенты IRC и email
+ * Линтер кода Flymake
+ * Интерфейс к GDB
+ * Система контроля версий (не только git)
+ * Возможность удаленного редактирования кода (например через ssh)
+ * Org-mode для ведения заметок (и много чего еще)
+ * Можно читать документы pdf, docx и презентации
+ * Система учёта времени на работе timeclock (засекает 8 часов)
+ * M-x doctor (chatgpt до изобретения нейросетей)
+** Биндинги Emacs
+ Биндинги в Emacs мнемонические. Это значит, что их легко запомнить,
+ так как буква биндинга практически всегда что-то обозначает.
+ - =C-n= Следующая строка (next)
+ - =C-p= Предыдущая строка (previous)
+ - =C-f= Вперед на символ (forward)
+ - =C-b= Назад на символ (back)
+
+ Не все биндинги появились именно в Emacs. Emacs изначально был
+ расширением редактора TECO.
+
+ Подробнее об истории биндингов Emacs и Vim:
+ http://xahlee.info/kbd/keyboard_hardware_and_key_choices.html
+** Биндинги Emacs
+ Важным отличием биндингов в редакторе GNU/Emacs является то, что
+ они еще и аккордовыми. Это значит, что несколько комбинаций
+ следующих друг за другом могут что-то значить. Например:
+ - =C-x C-f= открыть файл
+ - =C-x s= сохранить файл
+ Набираемые аккордовые бинды отображаются в мод-лайне. Для сброса
+ существует биндинг *C-g*.
+
+** Биндинги Emacs (продолжение)
+ Не смотря на наличие аккордовых биндов, Emacs не ограничивается
+ только ими и в редакторе поддерживают свои модальные режимы и режим
+ совместимости с VIM.
+** Emacs Lisp
+ Ядро редактора написано на языке C, остальное -- язык расширений
+ Emacs Lisp (25% C + 75% Elisp). Выглядит примерно так:
+
+ #+BEGIN_SRC emacs-lisp
+ ;; Объявление и вызов функции
+ (defun имя-функции (аргументы) (тело функции))
+ (имя-функция аргумент1 аргумент2)
+
+ (defun hello (name)
+ (concat "Hello, " name)) ;; => hello
+ (hello "Mikhail") ;; => "Hello, Mikhail"
+ #+END_SRC
+** Всё есть функция
+ Любое действие в редакторе представляет из себя функцию.
+ - Двинули курсор в начало строки -- функция beginning-of-line
+ - Сохранили файл -- функция save-buffer
+ - Вставили текст -- функция yank
+
+ И так с любым действием. В VIM вероятно также.
+
+** Система помощи
+ В GNU/Emacs встроен туториал и очень удобная система помощи.
+ - =C-h t= Туториал (на русском языке)
+ - =C-h r= Мануал Emacs
+ - =C-h a= Apropos (по описанию находит нужную функцию)
+ - =C-h k= Describe-key (описывает функцию, прикрепленную к бинду)
+ - =C-h f= Describe-function (описывает функцию)
+ - =C-h m= Describe-mode
+ - =C-h i= Info
+** Моды
+ *Мод* -- это модификация GNU/Emacs, которая включается при
+ определенном условии.
+ - Major мод может быть всего один, чаще всего вешается на открытие
+ файла определенного расширения. Например при открытие файла с
+ расширением .py запустится python-mode.
+ - Minor модов может быть неограниченное количество, они дополняют
+ функционал Major модов. Могут быть активированы всегда (имеют
+ префикс global-<название мода>) или при определенном условии.
+** Мод-лайн
+ *Мод-лайн* отображает информацию об используемых модах и состоянии
+ файла (название, сохранён или нет, позиция курсора, система
+ контроля версий). Пользователь может расширить мод-лайн для показа
+ своей информации, например времени. Под мод-лайном располагает
+ Echo зона, которая даёт уведомления о работе модов, а также может
+ запрашивать ввод.
+** Буфер
+ *Буфер* -- это обособленная память с текстом, которой манипулирует
+ имакс прежде чем писать на диск. Экран Emacs отображает буфера,
+ грубо говоря вы видите всегда как-минимум один буфер. При запуске
+ доступны следующие буферы:
+ - =*GNU EMACS*= -- начальный экран
+ - =*scratch*= -- площадка REPL для обкатывания Emacs Lisp
+ Бинды:
+ - =C-x b= -- сменить буфер
+ - =C-x C-b= -- список буферов
+** Программирование
+ Поддерживаются языки:
+ - C
+ - Lisp и Scheme
+ - C++
+ - Fortran
+ - Java
+ - Javascript
+ - Python
+ - Ruby
+ - Perl
+ - и множество других
+ Разумеется список можно расширить сторонними пакетами
+** Программирование
+ Также для задач программирования доступны:
+ - Форматирование кода
+ - Компилирование программ
+ - Линтер Flymake, который на фоне проверяет текст программы
+ - Дебаггеры GDB, PDB, JDB и другие
+ - Интерфейс к grep
+ - Выполнение кода Emacs Lisp прямо в редакторе
+** Система контроля версий
+ При программировании полезно использовать систему контроля
+ версий. Самая распространненая система -- git. Про другие системы
+ обычно забывают, но не в случае Emacs. Система контроля версий
+ Emacs поддерживает:
+ - Git
+ - Mercurial
+ - CVS
+ - Bazaar
+ - Subversion
+ - и другие
+
+** Org-mode
+ *Org-mode* -- Markdown на колёсах, декларативный формат описания
+ всего и вся, основанный на списке из уровней (Outline). С помощью
+ org-mode можно:
+ - Организовывать свою жизнь
+ - Создавать документы и презентации (latex)
+ - Использовать технику грамотного программирования
+ - Заменять Markdown
+
+ https://orgmode.org/worg/org-tutorials/
+** Tramp
+ #+BEGIN_QUOTE
+ Вимеры могут привести в аргумент то, что их редактор уже доступен
+ на многих системам и ничего не надо докачивать и что можно
+ редактировать прямо на сервере.
+ #+END_QUOTE
+ В Emacs вы можете редактировать удалённые файлы через ssh,
+ использую Tramp. Выглядеть это будет также как вы редактируете всё
+ на своей родной системе. В Vim редактирование на сервере работает
+ только при условии отсутствия конфигурации, в Emacs
+** Кастомизация
+ [[./customize.png]]
+ =M-x customize= открывает GUI, позволяющий редактировать поведение
+ и внешний вид Emacs.
+** .emacs / init.el
+ В качестве конфигурации Emacs использует один из следующих файлов в домашней директории:
+ - ~/.emacs
+ - ~/.emacs.d/init.el
+
+ Файл конфигурации содержит листинг кода на Emacs Lisp, который
+ Emacs вычисляет при запуске программы. Чтобы создавать конфиг Emacs
+ вовсе необязательно в идеале владеть Emacs Lisp.
+** Пакетный менеджер package.el
+ Для расширения предусмотрен пакетный менеджер, который уже встроен
+ в редактор. По-умолчанию доступен только один официальный
+ репозиторий Elpa, но пользователь может подключать сторонние
+ (например Melpa).
+ - =M-x list-packages= -- список пакетов, доступных в репозиториях
+ - =M-x package-install <название пакета>= -- установка пакета из репозитория
+
+** use-package
+ *use-package* -- это декларативная обёртка от сообщества для
+ package.el. Рекомендую использовать use-package, чтобы ваш конфиг
+ не превратился со временем в нечитаемое месиво.
+ - =:config= -- изолирует конфигурацию пакетов друг от друга
+ - =:hook= -- короткая запись для навешивания хуков
+ - =:ensure= -- загружает пакет из репозитория
+ - =:diminish= -- скрывает мод из модлайна
+ - и другие опции
+
+* Дистрибутивы
+** Vanilla
+Emacs, который поставляется на большинстве систем без готовой
+конфигурации.
+
+[[./emacs-vanilla.png]]
+
+https://www.gnu.org/software/emacs/
+** Doom Emacs
+Emacs с поддержкой vim и emacs биндов и тонной пакетов на все случаи жизни
+
+[[./emacs-doom.png]]
+
+https://github.com/doomemacs/doomemacs
+** Spacemacs
+По сути тоже самое, что Doom, но старее и медленнее.
+
+[[./emacs-spacemacs.png]]
+
+https://www.spacemacs.org/
+** Prelude
+Расширяет дефолтный Emacs, но не настолько сильно как Doom и
+Spacemacs. Пытается придерживаться "Sane Defaults".\\
+
+https://prelude.emacsredux.com/en/latest/
+* Материалы по Emacs
+** Изучение Emacs внутри Emacs
+ * (*C-h t*) Help => Emacs Tutorial
+ * (*C-h r*) Info emacs manual
+ * Introduction to Emacs Lisp
+** Книги
+ :PROPERTIES:
+ :BEAMER_opt: shrink=10
+ :END:
+*** Mastering Emacs
+ #+ATTR_LATEX: :height 80
+ [[./mastering-emacs.png]]
+
+ https://masteringemacs.org
+*** Learning Gnu Emacs
+ #+ATTR_LATEX: :height 80
+ [[./learning-emacs.jpg]]
+
+ https://dl.acm.org/doi/book/10.5555/2167272
+** Заключение
+GNU Emacs имеет широкие возможности модификации самого себя, что
+предоставляет нам как пользователям реализовывать свои задумки с
+гораздом меньшим количеством преград чем в других решениях.
+
+[[./prot.png]]
+Есть похожий доклад, который рекомендую посмотреть.
+** Вопросы?
+
+- https://fosstodon.org/@w96k
+- [[https://w96k.dev]]
+
+#+ATTR_LATEX: :height 50
+[[./wk-logo.png]]
+
+Заходите в русскоязычный Emacs чат в Telegram, если вас там нет:
+- https://t.me/emacs_ru