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