summaryrefslogtreecommitdiff
path: root/content/presentations/emacs/emacs-what-user-freedom-is-about.tex
diff options
context:
space:
mode:
Diffstat (limited to 'content/presentations/emacs/emacs-what-user-freedom-is-about.tex')
-rw-r--r--content/presentations/emacs/emacs-what-user-freedom-is-about.tex759
1 files changed, 759 insertions, 0 deletions
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