diff options
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.tex | 759 |
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 |