GNU EMACS для технических писателей
283 subscribers
11 photos
19 files
87 links
Настройка, использование, хаки
Download Telegram
Нужна ли книга "Git простым языком"? Без неё читать главу про Magit сложновато, как мне кажется.
Anonymous Poll
80%
Да
20%
Нет
Как увеличить размер окна по высоте (при условии, что есть куда)? Очень просто: [C-x ^].
Но эта команда увеличивает высоту окна только на один символ! А как увеличить на 5?

Простое и брутальное решение: [C-u 5 C-x ^].

А попроще можно? Конечно! Включите глобальный дополнительный режим repeat-mode!

(use-package repeat
:config (repeat-mode 1))


Что он делает? После первого вызова некоторых команд он переходит в режим повтора. Это значит, что в минибуфере будет выводиться подсказка с названием доступных клавиш, и нажатие каждой из них будет работать так, будто вы нажали всю последовательность целиком.

Ещё раз, попроще. Для изменения размера окна используются эти последовательности:

[C-x ^] — выше
[C-x v] — ниже
[C-x }] — шире
[C-x {] — уже

Но теперь после нажатия любой из этих последовательностей Emacs перейдёт в режим повтора, и для изменения размеров активного окна нужно будет нажать не последовательность, а всего одну клавишу:

[^] — выше
[v] — ниже
[}] — шире
[{] — уже

И пока вы не нажмёте [C-g] или клавишу, не входящую в список для повтора, это поведение будет работать. В следующем посте будет GIF, демонстрирующий это поведение.

Кстати, при изменении размера шрифта repeat-mode тоже крайне полезен!
👍81
magit.pdf
150.2 KB
Добрый день, мои чюваки!

Я решил переписать с нуля главу про Magit. Выкладываю её на всеобщее обозрение для оценки читаемости и понятности.

Подписчики на Boosty чуть позже получат книгу, где эта глава будет переписана с учётом ваших замечаний и предложений. Так же там будет множество примеров использования Magit для выполнения типовых операций.
🔥9👍1
На Boosty опубликована новая версия книги. Глава про Magit переписана с нуля на основе ваших комментариев. Надеюсь, стало попроще.
Пока не описаны cherry-pick, stash и некоторые варианты, предложенные в комментариях. Это на следующее обновление.
5
Есть ли разница между [RET] и [C-j]?

На первый взгляд — нет. Но на самом деле [RET] учитывает настройки отступов и старается им соответствовать. Когда вы работаете с файлами ReStructured Text или Python это особенно заметно, т. к. Emacs не только переносит курсор на новую строку, но ещё и вставляет нужное (по его мнению) количество пробелов:

*  Элемент списка
Позиция курсора после нажатия [RET].


С [C-j] история попроще — заканчиваем эту строку и просто переносим курсор в начало следующей, без магии отступов:

*  Элемент списка
Позиция курсора после нажатия [C-j].


Зачем я вам об этом рассказываю? С целью экономии вашего времени: если отступ не нужен — используйте [C-j], а если нужен — [RET].
👍7
Многие утилиты при сборке проекта любят раскрашивать вывод в разные цвета с помощью последовательностей типа \033[0:31m и подобных. Bash заменяет эти последовательности на соответствующий цвет, получается красивый вывод: ошибки красные, успех зелёный, где-то жирность добавляют.

В Emacs по умолчанию буфер *compile* выводит всё как есть. При сборке проектов Sphinx в буфере нет цветов, зато есть последовательности, используемые для раскраски текста, и выглядит это некрасиво. Но это легко исправить:

;; 📦 ANSI-COLOR
(use-package ansi-color
:custom
(ansi-color-for-compilation-mode t "Расцветка буфера *compile*")
:hook
(compilation-filter . ansi-color-compilation-filter))
👍4
При работе над справочником по настройкам which-key я заметил, что по умолчанию этот пакет не хочет использовать все возможности Unicode. Исправим это:

;; 📦 WHICH-KEY MODE
;; https://elpa.gnu.org/packages/which-key.html
;; Показывает подсказки к сочетаниям клавиш.
(use-package which-key
:ensure t
:delight ""
:custom
(which-key-computer-remaps t "Выводить актуальные сочетания клавиш, а не «как должно быть»")
(which-key-dont-use-unicode nil "Используем Unicode")
(which-key-idle-delay 2 "Задержка появления подсказки")
(which-key-idle-secondary-delay 0.05 "Ещё одна задержка появления подсказки")
(which-key-show-major-mode t "То же самое что и [C-h m], но в формате which-key")
:config
(progn
(which-key-mode 1)
(which-key-setup-minibuffer)
(which-key-setup-side-window-right))) ;; Показывать подсказки справа


Влияет это буквально на три настройки: индикатор сокращённой строки (ellipsis), разделитель, перепривязанные клавиши. Но меня больше интересуют первые две настройки, всё ради них. Раньше было так:

DEL : backward-kill-sentence + : balance-windows
ESC : repeat-complex-command - : shrink-window-if-larget-t..
RET : +prefix . : set-fill-prefix
SPC : rectangle-mark-mode 0 : delete-window
TAB : indent-rigidly 1 : delete-other-windows


Теперь будет так:

DEL → backward-kill-sentence + → balance-windows
ESC → repeat-complex-command - → shrink-window-if-larget-t…
RET → +prefix . → set-fill-prefix
SPC → rectangle-mark-mode 0 → delete-window
TAB → indent-rigidly 1 → delete-other-windows

Главное чтобы используемый шрифт это всё поддерживал, иначе вместо и будет пустота.
👍6
Доброй ночи, дорогие подписчики!
На Boosty новая версия книги: https://boosty.to/simple-emacs/posts/30596aa2-0cd7-4ef4-9229-85e2135a350c?share=success_publish_link

Основные изменения:

1. Переписано описание базовых команд по выделению, вырезанию, копированию и вставке текста.
2. Исправлено несколько косяков в вёрстке.
3. Исправлены некоторые орфографические ошибки.
4. Добавлена инструкция как получить справку прямо в Emacs.
👍7
Увековечим великое:
Вкатился в Emacs с третьей попытки и так и остался. Емакс – это не редактор, и даже не ОС. Емакс – это манифестация коллективного аутизма, выраженная в коде. Примерно как мальчики на пляже собираются и строят замки из песка вместе, без какого-либо планирования и процесса, так же сборище поехавших аутистов собрались и сделали Емакс. Это было просто неизбежно. Емакс не мог не быть написан.

Оригинал: https://www.linux.org.ru/forum/desktop/17998582?cid=17998705
👍6🔥511
Одна из особенностей Antora в том, что исходники документации лежат в одном репозитории (мы рассматриваем самый простой случай), а для сборки надо запускать команды в другом. Как решить эту проблему? Довольно просто. Я использую Projectile, поэтому добавил в свой .dir-locals.el каждого репозитория с исходниками документации такое:

((nil . ((projectile-project-compilation-cmd . "cd ../antora && make"))))


Как использовать? Да как обычно: [C-x p p c RET]. Наверное, можно забиндить на какую-нибудь F-клавишу, но мне туда лень тянуться.
Добрый день, друзья!
Новости:
1. На Boosty новая версия книги: https://boosty.to/simple-emacs/posts/9e5fcb7a-d4ac-4b7a-a5d2-05411d1c7a30
2. Теперь не обязательно оформлять подписку, можно покупать отдельные посты.
3. В каждом посте будут доступны форматы EPUB и PDF, причём PDF в светлой теме оформления и Monokai.
4. В Telegram-канал книга будет выкладываться только в белой теме и с задержкой в полгода.
👍7
По мотивам сегодняшнего обсуждения в чате.

Я не люблю стрелочки. Чтобы их использовать, надо сдвинуть правую руку с её обычной позиции на ширину ладони вправо. Если у вас полноразмерная клавиатура, то ещё дальше. На ноутбуках клавиши со стрелками часто делают маленькими. Т. е. выделять текст удобнее с помощью команд Emacs, а не зажав Shift и двигая стрелки. Однако, есть несколько исключений, которые я сделал для себя.

Начнём с того, как стрелки называются в Emacs:

<left>
<right>
<up>
<down>

;; 📦 WINDMOVE
;; Встроенный пакет для быстрого переключения окон.
;; Перемещение между окнами Emacs.
(use-package windmove
:config
(progn
(windmove-default-keybindings 'ctrl)
(windmove-swap-states-default-keybindings 'meta)))


windmove это встроенный пакет, его даже не надо устанавливать отдельно. Что он даёт? После его активации вы можете переходить между окнами Emacs, зажав Ctrl и нужную стрелку. Например, хотите перейти в окно справа от активного? Нажмите [C-<right>]. В обычном режиме для этого нужно было бы нажимать [C-x o] или [C-x O], т. е. на одну клавишу больше.

Некоторые режимы, например, Magit и IBuffer, а также компиляция, любят создавать собственные окна, т. е. ломать существующий порядок. На них тоже есть управа — встроенный пакет winner:

;; 📦 WINNER-MODE
;; Встроенный пакет для управления состояниями окон.
;; https://www.gnu.org/software/emacs/manual/html_node/emacs/Window-Convenience.html
;; Для управления конфигурациями окон используются последовательности
;; [C-c <left>] и [C-c <right>]
(use-package winner
:config
(winner-mode 1))


После его активации состояние окон (всех окон! всех сразу!) можно менять с помощью [C-c <left>] или [C-c <right>]: влево — отмена, вправо — отмена отмены.

Примечание: в использовании Emacs нет догм. Нет "единственно верного пути" типа "настоящий емаксер не пользуется стрелками". Как вам удобно, так и делайте.
👍6🔥3
В продолжение темы переключения окон.

Я когда-то использовал пакет ace-window. Он очень просто работает:

1. Нажмите [M-o].
2. Если окон два, ace-window просто переместит фокус с активного окна на неактивное.
3. Если окон больше двух, ace-window нарисует в левом верхнем углу каждого из них номер. Нажмите цифру с этим номером, и окажетесь в нужном окне. Т. е. если у вас 4 окна, вы можете из первого попасть в четвёртое по нажатию трёх клавиш.

Удобно? Удобно.

Но если вы не хотите использовать ace-window, можно привязать M-o к встроенной команде next-window-any-frame: фокус будет переключаться циклически между всеми открытыми окнами:


;; 📦 FRAME
;; Встроенный пакет.
;; Управление фреймами.
(use-package frame
:custom
(window-divider-default-places 't "Разделители окон со всех сторон (по умолчанию только справа)")
(window-divider-default-right-width 3 "Ширина в пикселях для линии-разделителя окон")
(frame-resize-pixelwise t "Размер фреймов считать по пикселям а не по символам")
:bind
(:map global-map
("C-x O" . previous-window-any-frame) ;; Перейти в предыдущее окно
;; Перейти в следующее окно
("C-x o" . next-window-any-frame)
("M-o" . next-window-any-frame)))
👍4
На Boosty новый пост, на этот раз экспериментального формата: помимо книги там ещё и видео, показывающее как пользоваться Avy.
https://boosty.to/simple-emacs/posts/fb39b1c5-8fc5-4ebe-b710-6ed944ca8ab8?share=post_link
👍4