gnu-emacs-for-technical-writers-2024-07-24.pdf
2.9 MB
Крупное обновление:
1. Описан
2. Описан Helm.
3. Описаны
4. Описано использование
5. Множественные мелкие правки и улучшения.
1. Описан
straight.el
.2. Описан Helm.
3. Описаны
project.el
и projectile.el
(пока в общих чертах).4. Описано использование
.dir-local.el
.5. Множественные мелкие правки и улучшения.
👍9
Неожиданно (последний коммит был в 2016-м году) обновился пакет
Я раньше пользовался
После правок в начале
Ну, всё! Теперь буду режимы крутить и выключать! Например, спрятал индикатор для
Таким же образом отключил индикаторы для
Кстати, как я вставил иконку с коробкой? Очень просто:[C-x 8 RET package RET] .
Страница
delight.el
, который используется для изменения записей, которые вы видите в строке статуса.Я раньше пользовался
diminish.el
, который делает то же самое, но сегодня решил перейти на delight.el
, и сразу обнаружил проблему: этот пакет надо загружать сразу же после use-package.el
, а не как у меня, где-то в середине init.el
. Полагаю, с diminish.el
та же проблема, просто я не обращал внимания.После правок в начале
init.el
получилось так:;; 📦 USE-PACKAGE
;; https://elpa.gnu.org/packages/use-package.html
(straight-use-package '(use-package :tag "2.4.5"))
;; Настройки отладочного режима
(when init-file-debug
(custom-set-variables
'(debug-on-error t "Автоматически перейти в режим отладки при ошибках.")
'(use-package-compute-statistics t "Сбор статистики `use-package'.")
'(use-package-expand-minimally t "TODO: ???")
'(use-package-verbose t "Подробный режим работы `use-package'.")))
;; 📦 DELIGHT
;; https://elpa.gnu.org/packages/delight.html
;; Позволяет спрятать из панели статуса лишние названия режимов.
;; Эти строки находятся здесь потому, что `use-package' активно
;; использует возможности этого пакета далее, поэтому он должен быть
;; загружен как можно раньше.
(use-package delight
:straight (delight
:tag "1.7"))
Ну, всё! Теперь буду режимы крутить и выключать! Например, спрятал индикатор для
anzu-mode
:;; 📦 ANZU
;; https://github.com/emacsorphanage/anzu
;; Подсказки о количестве совпадений при поиске с помощью `isearch'.
(use-package anzu
:straight (anzu
:host github
:repo "emacsorphanage/anzu"
:tag "0.64")
:delight ""
:config
(global-anzu-mode 1))
Таким же образом отключил индикаторы для
edit-indirect
, company-mode
и других режимов, которые у меня включены почти всегда.Кстати, как я вставил иконку с коробкой? Очень просто:
Страница
delight.el
в архиве MELPA: https://elpa.gnu.org/packages/delight.html👍5
Надоело, что Eglot не может в нормальную работу с
Сам сервер нужно устанавливать так:
Теперь если открыть любой YAML-файл, вместо Eglot запускается дополнительный режим
Подробности про
#lsp #eglot #yaml
yaml-language-server
, поэтому сегодня вернул пакеты LSP и SLP-UI, но "прибил гвоздями" версию 9.0.0:;; 📦 LSP-MODE
;; https://github.com/emacs-lsp/ls-mode
;; https://emacs-lsp.github.io/lsp-mode/
;; Альтернативный LSP-сервер
(use-package lsp-mode
:straight (lsp-mode
:tag "9.0.0")
:commands lsp
:hook
((
yaml-mode
) . lsp))
;; 📦 LSP-UI
;; https://github.com/emacs-lsp/lsp-ui
;; Расширение для красивостей LSP-MODE
(use-package lsp-ui
:straight (lsp-ui
:tag "9.0.0")
:commands lsp-ui-mode
:hook
(lsp-mode . lsp-ui-mode))
Сам сервер нужно устанавливать так:
sudo npm -g install yaml-language-server
Теперь если открыть любой YAML-файл, вместо Eglot запускается дополнительный режим
lsp
, который нормально работает с этим сервером. Разве что могут спросить в первый раз про то, что считать каталогом проекта.Подробности про
lsp-mode.el
очень хорошо расписаны на его домашней странице: https://emacs-lsp.github.io/lsp-mode/#lsp #eglot #yaml
emacs-lsp.github.io
LSP Mode - Language Server Protocol support for Emacs - LSP Mode - LSP support for Emacs
Language Server Protocol support with multiples languages support for Emacs
🔥3👍1
Помните про
Обратите внимание на то, что настройки Projectile задаются не для
#projectile
.dir-locals.el
? Самые полезные переменные в этом файле — это настройки Projectile, специфичные для проекта. У меня сейчас в работе несколько проектов на Sphinx, и в .dir-locals.el
я держу такое:;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")
((nil . ((buffer-env-script-name . ".venv/bin/activate")
(indent-tabs-mode . nil)
(projectile-project-compilation-cmd . "make dirhtml")
(projectile-project-run-cmd . "python3 -m http.server -a 127.0.0.1 -d build/dirhtml")
(projectile-project-src-dir . "source/")
(projectile-project-test-cmd . "pre-commit run --all")))
(eglot-mode . ((eglot-workspace-configuration . (:pylsp
(:plugins
(:plugins
(:jedi_completion
(:include_params t :fuzzy t)
:pylint
(:enabled :json-false))))))))
(makefile-mode . ((indent-tabs-mode . t)))
(python-mode . ((python-indent-offset . 4)
(fill-column . 120)
(tab-width . 4)))
(rst-mode . ((tab-width . 3))))
Обратите внимание на то, что настройки Projectile задаются не для
projectile-mode
, а глобально.#projectile
👍4
Если у вас Debian, можно установить Emacs 29 из бэкпортов:
1. Создайте в
2. Создайте в
3. Обновите кеш APT:
4. Обновите пакеты:
Если Emacs установлен, его пакеты будут обновлены. Если не установлен — установите вручную:
Теперь установка будет не из репозиториев Stable, а из Backports.
1. Создайте в
/etc/apt/sources.list.d/
файл bookworm-backports.list
с таким содержимым:deb http://deb.debian.org/debian bookworm-backports main non-free contrib
2. Создайте в
/etc/apt/preferences.d/
файл 99-emacs-backports
с таким содержимым:Package: emacs emacs-bin-common emacs-common emacs-el emacs-gtk emacs-nox emacs-pgtk
Pin: release n=bookworm-backports
Pin-Priority: 600
3. Обновите кеш APT:
sudo apt-get update
4. Обновите пакеты:
sudo apt-get dist-upgrade
Если Emacs установлен, его пакеты будут обновлены. Если не установлен — установите вручную:
sudo apt-get install emacs --yes
Теперь установка будет не из репозиториев Stable, а из Backports.
gnu-emacs-for-technical-writers-2024-08-04.pdf
3 MB
Незначительные изменения:
* добавлено описание
* добавлено описание EditorConfig;
* заготовка для LSP и EGLOT.
* добавлено описание
nxml-mode.el
;* добавлено описание EditorConfig;
* заготовка для LSP и EGLOT.
👍9
Давайте расскажу, как я запускаю компиляцию Sphinx.
1. Вызываю
2. Жму [RET]. Открывается отдельное окно, в которое пишется вывод команды компиляции, в моём случае это
3. Перехожу в это окно с помощью [C-x o] и спускаюсь в самый низ с помощью [M->] ([Alt+Shift+.]), чтобы видеть самые свежие строки.
4. Если вывод без ошибок — закрываю окно с помощью [C-x 5 0].
5. Если есть ошибки, то можно перейти к проблемному месту с помощью ссылки. Если ссылки нет, можно перейти к предполагаемому месту, открыв нужный файл с помощью
6. Делаю правки.
7. Можно повторно вызвать
#projectile #sphinx
1. Вызываю
projectile-compile-project
с помощью [C-x p c]. Там у меня уже прописана команда make dirhtml
. Как это сделать я писал раньше.2. Жму [RET]. Открывается отдельное окно, в которое пишется вывод команды компиляции, в моём случае это
make dirhtml
.3. Перехожу в это окно с помощью [C-x o] и спускаюсь в самый низ с помощью [M->] ([Alt+Shift+.]), чтобы видеть самые свежие строки.
4. Если вывод без ошибок — закрываю окно с помощью [C-x 5 0].
5. Если есть ошибки, то можно перейти к проблемному месту с помощью ссылки. Если ссылки нет, можно перейти к предполагаемому месту, открыв нужный файл с помощью
projectile-find-file
[C-x p f].6. Делаю правки.
7. Можно повторно вызвать
projectile-compile-command
, а можно вернуться в буфер *compilation*
и просто попросить Emacs обновить содержимое: нажать клавишу [g].#projectile #sphinx
Telegram
GNU EMACS для технических писателей
Помните про .dir-locals.el? Самые полезные переменные в этом файле — это настройки Projectile, специфичные для проекта. У меня сейчас в работе несколько проектов на Sphinx, и в .dir-locals.el я держу такое:
;;; Directory Local Variables
;;; For more information…
;;; Directory Local Variables
;;; For more information…
✍1
Редко этим пользуюсь, но в Emacs есть встроенная функция перехода к нужному слову или символу.
Допустим, вы находитесь в начале строки, а Flycheck пишет о проблеме в колонке 180. Какие есть способы быстро туда попасть?
1. Самый очевидный ход – использовать команду
2. Кликнуть мышью. Допустимо, но использование мыши это не Emacs Way. Нужно использовать возможности клавиатуры.
3. Механика повторения операций. Универсальный способ, для использования которого не нужна мышь.
1. Нажмите [C-u].
2. Введите количество повторов. В нашем случае – 180.
3. Нажмите [C-f]. Курсор переместится к позиции 180-го символа в строке. А если бы вы нажали [M-f], то к 180-му слову относительно текущей позиции.
Всю указанную выше последовательность действий в нотации Emacs можно записать в одну строку так: [C-u 1 8 0 C-f].
Допустим, вы находитесь в начале строки, а Flycheck пишет о проблеме в колонке 180. Какие есть способы быстро туда попасть?
1. Самый очевидный ход – использовать команду
flycheck-goto-next-error
, [C-c ! n]. Не работает, если не касается Flycheck.2. Кликнуть мышью. Допустимо, но использование мыши это не Emacs Way. Нужно использовать возможности клавиатуры.
3. Механика повторения операций. Универсальный способ, для использования которого не нужна мышь.
1. Нажмите [C-u].
2. Введите количество повторов. В нашем случае – 180.
3. Нажмите [C-f]. Курсор переместится к позиции 180-го символа в строке. А если бы вы нажали [M-f], то к 180-му слову относительно текущей позиции.
Всю указанную выше последовательность действий в нотации Emacs можно записать в одну строку так: [C-u 1 8 0 C-f].
👏2✍1👍1
Стало напрягать, что в #dired выводится слишком много лишней информации. Например, так выглядит содержимое каталога
Ну и зачем мне видеть права на файлы и их владельца? Я единственный пользователь на компьютере, и для управления файлами использую либо терминал, либо Midnight Commander. Ну ещё GNOME Files иногда.Да, я слышал про GNOME Commander. Только не понимаю, зачем он нужен.
Чтобы переключить отображение столбцов с детальной информацией о файлах и каталогах, нажмите [(]. А чтобы такое поведение использовалось по умолчанию, включите минорный режим
Теперь ваши каталоги в Dired будут выглядеть так:
~/.emacs.d/
:/home/dunaevsky/.emacs.d:
итого 636K
drwxr-xr-x 3 dunaevsky dunaevsky 4,0K мая 15 23:05 anaconda-mode
drwx------ 2 dunaevsky dunaevsky 20K авг 21 08:57 auto-save-list
drwxr-xr-x 7 dunaevsky dunaevsky 4,0K авг 1 17:21 eln-cache
drwxr-xr-x 4 dunaevsky dunaevsky 4,0K авг 21 08:56 elpa
drwxr-xr-x 3 dunaevsky dunaevsky 4,0K мая 14 16:17 elpy
drwxr-xr-x 2 dunaevsky dunaevsky 4,0K авг 10 2023 saves
drwxr-xr-x 2 dunaevsky dunaevsky 4,0K окт 24 2021 snippets
drwxr-xr-x 4 dunaevsky dunaevsky 4,0K авг 16 17:49 straight
drwxr-xr-x 2 dunaevsky dunaevsky 4,0K авг 10 2023 transient
-rw-r--r-- 1 dunaevsky dunaevsky 77 окт 12 2023 abbrev_defs
-rw-r--r-- 1 dunaevsky dunaevsky 3,3K фев 27 09:01 bookmarks
-rw-r--r-- 1 dunaevsky dunaevsky 633 июл 17 15:25 CHANGELOG.md
-rw-r--r-- 1 dunaevsky dunaevsky 3,6K авг 21 09:38 custom.el
-rw-r--r-- 1 dunaevsky dunaevsky 308 июл 17 13:54 early-init.el
-rw------- 1 dunaevsky dunaevsky 67K авг 21 14:29 history
-rw-r--r-- 1 dunaevsky dunaevsky 68K авг 21 14:33 init.el
-rw-r--r-- 1 dunaevsky dunaevsky 1,7K авг 21 14:33 projectile-bookmarks.eld
-rw-r--r-- 1 dunaevsky dunaevsky 386 июн 19 09:45 projectile.cache
-rw-r--r-- 1 dunaevsky dunaevsky 283 авг 1 17:48 projects
-rw-r--r-- 1 dunaevsky dunaevsky 10K июн 6 08:23 README.md
-rw------- 1 dunaevsky dunaevsky 1,5K мар 23 14:02 recentf
-rw-r--r-- 1 dunaevsky dunaevsky 390K авг 21 14:29 #saves#
-rw-r--r-- 1 dunaevsky dunaevsky 248 авг 19 09:48 tramp
Ну и зачем мне видеть права на файлы и их владельца? Я единственный пользователь на компьютере, и для управления файлами использую либо терминал, либо Midnight Commander. Ну ещё GNOME Files иногда.
Чтобы переключить отображение столбцов с детальной информацией о файлах и каталогах, нажмите [(]. А чтобы такое поведение использовалось по умолчанию, включите минорный режим
dired-hide-details-mode
в буферах с dired-mode
:(use-package dired
:custom
(dired-kill-when-opening-new-dired-buffer t "Удалять буфер при переходе в другой каталог.")
(dired-listing-switches "-lh --group-directories-first --dired")
:hook
(dired-mode . dired-hide-details-mode))
Теперь ваши каталоги в Dired будут выглядеть так:
/home/dunaevsky/.emacs.d:
итого 636K
anaconda-mode
auto-save-list
eln-cache
elpa
elpy
saves
snippets
straight
transient
abbrev_defs
bookmarks
CHANGELOG.md
custom.el
early-init.el
history
init.el
projectile-bookmarks.eld
projectile.cache
projects
README.md
recentf
#saves#
tramp
👍2
Helm обновился до версии 4.0. Поздравляю всех его пользователей с релизом.
🔥2
Straight.el всё-таки не серебряная пуля. Продолжаю поиски решения, позволяющего "прибить гвоздями" версии пакетов Emacs. Возможно, у кого-то из вас уже есть такое решение? Можете написать его в чате канала.
Одна из немногих функций, которыми я пользуюсь почти каждый день
Применять очень легко:
1. Выделить фрагмент.
2. Нажать нужное сочетание клавиш. У меня это [M-'].
Код:
Где использовать? Я часто пользуюсь во время
1. [C-x h] — выделить всё.
2. [M-'] — закомментировать выделенный фрагмент.
3. [C-n] — перейти к строке с нужным коммитом.
4. [C-d] — удалить комментарий.
5. [C-c C-c] — перейти к следующему шагу.
Выглядит длинно? Что ж, Emacs по умолчанию предполагает, что вы владеете слепой десятипальцевой печатью как минимум в раскладке EN-US. При этом выполнение описанных действий с помощью нативных команд Git займёт ещё больше времени.
comment-or-uncomment-region
. Если вы выделите фрагмент кода и вызовите эту функцию, то сначала она оформит выделенный фрагмент как комментарий. При следующем вызове — раскомментирует. И так — сколько нужно раз. Кстати, основной режим буфера содержит необходимые сведения, позволяющие Emacs понять, что считать комментарием. Например, в conf-mode
в начало строки будет добавлен символ #
, а в php-mode
два символа — //
.Применять очень легко:
1. Выделить фрагмент.
2. Нажать нужное сочетание клавиш. У меня это [M-'].
Код:
;; 📦 NEW-COMMENT
;; Встроенный пакет.
;; Работа с комментариями.
(use-package newcomment
:bind
(:map global-map ("M-'" . comment-or-uncomment-region)))
Где использовать? Я часто пользуюсь во время
git squash
. На определённом этапе нужно закомментировать строки с коммитами, которые не нужны. В этом случае такой порядок действий в Magit:1. [C-x h] — выделить всё.
2. [M-'] — закомментировать выделенный фрагмент.
3. [C-n] — перейти к строке с нужным коммитом.
4. [C-d] — удалить комментарий.
5. [C-c C-c] — перейти к следующему шагу.
Выглядит длинно? Что ж, Emacs по умолчанию предполагает, что вы владеете слепой десятипальцевой печатью как минимум в раскладке EN-US. При этом выполнение описанных действий с помощью нативных команд Git займёт ещё больше времени.
👍1
Нашёл способ надёжно "прибивать гвоздями" версии пакетов Emacs — Quelpa. Соответствующий раздел книги будет переписан при появлении свободного времени.
GitHub
GitHub - quelpa/quelpa: Build and install your Emacs Lisp packages on-the-fly directly from source
Build and install your Emacs Lisp packages on-the-fly directly from source - quelpa/quelpa
🔥2
Projectile при вызове команды
По умолчанию в этом буфере выключена автоматическая прокрутка, поэтому при большом количестве строк вы будете видеть только начало вывода. Чтобы включить автопрокрутку, присвойте переменной
Чтобы сделать этот пост ещё полезнее, посмотрите, значения каких ещё переменных я задал в своём
projectile-compile-project
вызывает стандартную функцию Emacs compile
. Эта функция запускает указанную команду компиляции проекта, а её вывод показывает в буфере *compilation*
.По умолчанию в этом буфере выключена автоматическая прокрутка, поэтому при большом количестве строк вы будете видеть только начало вывода. Чтобы включить автопрокрутку, присвойте переменной
compilation-scroll-output
значение t
.Чтобы сделать этот пост ещё полезнее, посмотрите, значения каких ещё переменных я задал в своём
init.el
:(custom-set-variables
'(compilation-scroll-output t "Автоматическая прокрутка буфера *compilation*")
'(create-lockfiles nil "Не создавать lock-файлы")
'(cursor-type 'bar "Курсор в виде вертикальной черты")
'(custom-safe-themes t "Считать все темы безопасными")
'(default-input-method "russian-computer" "Метод ввода по умолчанию")
'(default-transient-input-method "russian-computer")
'(delete-by-moving-to-trash t "Удалять файлы в Корзину")
'(gc-cons-threshold (* 50 1000 1000) "Увеличить размер памяти для сборщика мусора")
'(indent-tabs-mode nil "Отключить `indent-tabs-mode'.")
'(inhibit-startup-screen t "Не показывать приветственный экран")
'(initial-scratch-message nil "Пустой буфер *scratch*")
'(load-prefer-newer t "Если есть файл elc, но el новее, загрузить el-файл.")
'(package-install-upgrade-built-in t "Обновлять даже встроенные пакеты")
'(ring-bell-function #'ignore "Отключить звуковое сопровождение событий")
'(save-place-file (expand-file-name ".emacs-places" init-el-config-dir) "Хранить данные о позициях в открытых файлах в .emacs-places")
'(save-place-forget-unreadable-files t "Если файл нельзя открыть, то и помнить о нём ничего не надо")
'(scroll-bar-mode nil "Отключить полосы прокрутки")
'(scroll-conservatively 101 "TODO: проверить что это такое")
'(scroll-margin 4 "Отступ от верхней и нижней границ буфера")
'(show-trailing-whitespace t "Подсветка висячих пробелов")
'(standard-indent 4 "Отступ по умолчанию")
'(tab-always-indent 'complete "Если можно — выровнять текст, иначе — автодополнение.")
'(truncate-lines 1 "Обрезать длинные строки")
'(use-dialog-box nil "Диалоговые окна ОС не нужны")
'(user-full-name "Dunaevsky Maxim" "Имя пользователя")
'(user-mail-address "dunmaksim@yandex.ru" "Адрес электронной почты")
'(vc-follow-symlinks t "Переходить по ссылкам без лишних вопросов")
'(visible-bell t "Мигать буфером при переходе в него"))
👍5❤1
Если в Debian при открытии PO-файлов выводится сообщение об ошибке, а установка из MELPA, GNU или любого другого репозитория не решает проблемы, попробуйте следующее:
1. Удалите установленную из архивов версию пакета.
2. Установите системный пакет
1. Удалите установленную из архивов версию пакета.
2. Установите системный пакет
gettext-el
:sudo apt-get install gettext-el --yes
Как правильно выделить слово и поместить его в буфер обмена?
Anonymous Quiz
63%
[M-@ M-w]
22%
[M-@ C-y]
15%
[C-S-right C-c]
В
И больше не нужны ни Quelpa, ни Straight.el. Воспроизводимая сборка Emacs всё ближе.
use-package
начиная с версии 2.4.6 доступно новое ключевое слово — :vc
. Это позволяет устанавливать пакеты указанных версий из различных источников: Git-репозитории, файлы в локальной системе и т. д.:;; 📦 BBCODE-MODE
;; https://github.com/lassik/emacs-bbcode-mode
;; Режим редактирования BB-кодов
(use-package bbcode-mode
:ensure t
:vc (
:url "https://github.com/lassik/emacs-bbcode-mode.git"
:rev "v2.3.0")
:defer t)
И больше не нужны ни Quelpa, ни Straight.el. Воспроизводимая сборка Emacs всё ближе.
👍6
Если вы пользуетесь VIM или Neovim и подумываете о переходе на Emacs, попробуйте
Это глобальный режим, который будет работать во всех буферах. Насколько мне известно, поддерживаются все базовые сочетания клавиш и команды VIM. Вдобавок к этому вы получаете всю мощь Emacs:
- более 10 000 пакетов (суммарно во всех репозиториях);
- удобство настройки;
- поддержку Wayland и TreeSitter (начиная с Emacs 29);
- как минимум 2 пакета для поддержки LSP: Eglot, LSP;
- большое количество поддерживаемых языков программирования и разметки.
evil
:(use-package evil
:ensure t
:config
(evil-mode 1))
Это глобальный режим, который будет работать во всех буферах. Насколько мне известно, поддерживаются все базовые сочетания клавиш и команды VIM. Вдобавок к этому вы получаете всю мощь Emacs:
- более 10 000 пакетов (суммарно во всех репозиториях);
- удобство настройки;
- поддержку Wayland и TreeSitter (начиная с Emacs 29);
- как минимум 2 пакета для поддержки LSP: Eglot, LSP;
- большое количество поддерживаемых языков программирования и разметки.
Пришло время завести Boosty. Здесь по-прежнему будут выходить посты, однако, новые версии книги будут появляться на 3 месяца позже чем там. Первый пост бесплатный. Просто столбовой камень в начале пути.
boosty.to
v24.09 - Максим Дунаевский
Версия книги повысилась до 24.09. Поскольку это первый пост на Boosty, надо рассказать, что в ней такого.
За время работы техническим писателем и программистом я сталкивался с проблемами в работе GNU Emacs не раз и не два. Для многих из них мне удалось…
За время работы техническим писателем и программистом я сталкивался с проблемами в работе GNU Emacs не раз и не два. Для многих из них мне удалось…
👍4
Лучший статусбар это:
Anonymous Poll
62%
стандартный
29%
doom-modeline
3%
powerline
6%
telephoneline