Перевод Emacs Cheat Sheet: https://www.gnu.org/software/emacs/refcards/pdf/refcard.pdf
Anonymous Poll
66%
Нужен
34%
Не нужен
Братишки, я вам покушать принёс: https://www.linux.org.ru/forum/desktop/17998582
www.linux.org.ru
Если вы пробовали вкатиться в GNU Emacs, расскажите, что пошло не так
Всем привет! Часто вижу на форумах мнение, что Emacs это что-то старое, кривое и ненужное. Пожалуйста, напишите в комментариях, как вы пытались вкатиться в Emacs, и что пошло не так. Это поможет мне улучшить свою книгу про Emacs и даст идеи для посто...
👍7🙈3🔥2
Увековечим великое:
Оригинал: https://www.linux.org.ru/forum/desktop/17998582?cid=17998705
Вкатился в Emacs с третьей попытки и так и остался. Емакс – это не редактор, и даже не ОС. Емакс – это манифестация коллективного аутизма, выраженная в коде. Примерно как мальчики на пляже собираются и строят замки из песка вместе, без какого-либо планирования и процесса, так же сборище поехавших аутистов собрались и сделали Емакс. Это было просто неизбежно. Емакс не мог не быть написан.
Оригинал: https://www.linux.org.ru/forum/desktop/17998582?cid=17998705
www.linux.org.ru
Если вы пробовали вкатиться в GNU Emacs, расскажите, что пошло не так
Всем привет! Часто вижу на форумах мнение, что Emacs это что-то старое, кривое и ненужное. Пожалуйста, напишите в комментариях, как вы пытались вкатиться в Emacs, и что пошло не так. Это поможет мне улучшить свою книгу про Emacs и даст идеи для посто...
👍6🔥5❤1✍1
Одна из особенностей Antora в том, что исходники документации лежат в одном репозитории (мы рассматриваем самый простой случай), а для сборки надо запускать команды в другом. Как решить эту проблему? Довольно просто. Я использую Projectile, поэтому добавил в свой
Как использовать? Да как обычно: [C-x p p c RET]. Наверное, можно забиндить на какую-нибудь F-клавишу, но мне туда лень тянуться.
.dir-locals.el
каждого репозитория с исходниками документации такое:((nil . ((projectile-project-compilation-cmd . "cd ../antora && make"))))
Как использовать? Да как обычно: [C-x p p c RET]. Наверное, можно забиндить на какую-нибудь F-клавишу, но мне туда лень тянуться.
Antora
An Asciidoctor documentation toolchain that helps technical teams create, manage, collaborate on, remix, release, and publish documentation sites sourced from multiple versioned repositories.
К вопросу о ненужности Emacs:
https://www.linux.org.ru/forum/desktop/17998582?cid=18001984
Странное дело. Когда мне не нужен, например, фотошоп, я не бегаю по фотошоповым темам и не рассказываю всем как мне фотошоп не нужен.
https://www.linux.org.ru/forum/desktop/17998582?cid=18001984
www.linux.org.ru
Если вы пробовали вкатиться в GNU Emacs, расскажите, что пошло не так
Всем привет! Часто вижу на форумах мнение, что Emacs это что-то старое, кривое и ненужное. Пожалуйста, напишите в комментариях, как вы пытались вкатиться в Emacs, и что пошло не так. Это поможет мне улучшить свою книгу про Emacs и даст идеи для посто...
👍6🤔1
Добрый день, друзья!
Новости:
1. На Boosty новая версия книги: https://boosty.to/simple-emacs/posts/9e5fcb7a-d4ac-4b7a-a5d2-05411d1c7a30
2. Теперь не обязательно оформлять подписку, можно покупать отдельные посты.
3. В каждом посте будут доступны форматы EPUB и PDF, причём PDF в светлой теме оформления и Monokai.
4. В Telegram-канал книга будет выкладываться только в белой теме и с задержкой в полгода.
Новости:
1. На Boosty новая версия книги: https://boosty.to/simple-emacs/posts/9e5fcb7a-d4ac-4b7a-a5d2-05411d1c7a30
2. Теперь не обязательно оформлять подписку, можно покупать отдельные посты.
3. В каждом посте будут доступны форматы EPUB и PDF, причём PDF в светлой теме оформления и Monokai.
4. В Telegram-канал книга будет выкладываться только в белой теме и с задержкой в полгода.
boosty.to
v25.06.22 - Максим Дунаевский
Новая версия книги "GNU Emacs для технических писателей".
👍7
Регион это...
Anonymous Quiz
2%
то же самое что и абзац
0%
то же самое что и предложение
2%
то же самое что и symbol
97%
выделенная область
По мотивам сегодняшнего обсуждения в чате.
Я не люблю стрелочки. Чтобы их использовать, надо сдвинуть правую руку с её обычной позиции на ширину ладони вправо. Если у вас полноразмерная клавиатура, то ещё дальше. На ноутбуках клавиши со стрелками часто делают маленькими. Т. е. выделять текст удобнее с помощью команд Emacs, а не зажав Shift и двигая стрелки. Однако, есть несколько исключений, которые я сделал для себя.
Начнём с того, как стрелки называются в Emacs:
←
→
↑
↓
Некоторые режимы, например, Magit и IBuffer, а также компиляция, любят создавать собственные окна, т. е. ломать существующий порядок. На них тоже есть управа — встроенный пакет
После его активации состояние окон (всех окон! всех сразу!) можно менять с помощью [C-c <left>] или [C-c <right>]: влево — отмена, вправо — отмена отмены.
Примечание: в использовании Emacs нет догм. Нет "единственно верного пути" типа "настоящий емаксер не пользуется стрелками". Как вам удобно, так и делайте.
Я не люблю стрелочки. Чтобы их использовать, надо сдвинуть правую руку с её обычной позиции на ширину ладони вправо. Если у вас полноразмерная клавиатура, то ещё дальше. На ноутбуках клавиши со стрелками часто делают маленькими. Т. е. выделять текст удобнее с помощью команд 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
В продолжение темы переключения окон.
Я когда-то использовал пакет
1. Нажмите [M-o].
2. Если окон два,
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
https://boosty.to/simple-emacs/posts/fb39b1c5-8fc5-4ebe-b710-6ed944ca8ab8?share=post_link
boosty.to
v25.06.26 - Максим Дунаевский
Новая версия книги "GNU Emacs для технических писателей".
👍4
Сегодня разберём небольшой практический пример использования регулярных выражений. Допустим, у нас большое количество опций, которые нужно описать. Ну и вёрстка, само собой. Пусть у нас используется формат ReStructured Text, как более распространённый, чем AsciiDoc.
Мы хотим получить вёрстку типа такой:
Про существование
Итак.
1. Выделите текст. Достаточно нажать [M-h].
2. Вызовите команду
3. Введите выражение для поиска
4. Введите выражение замены:
Просто напоминаю, что переход на новую строку в минибуфере делается так: [C-q C-j].
5. Нажмите [RET]. Ура! Мы получили нужный результат.
Теперь разберём само выражение.
А что это за круглые скобки и зачем они экранированные? А это — выделение нумерованной группы. Если по-простому, мы говорим движку регулярных выражений: "Вот этот фрагмент, когда найдёшь, сохрани куда-нибудь, он мне позже понадобится". Экранирование же нужно для того, чтобы Emacs не воспринимал скобки буквально. Без
А строки типа таких не видел бы в упор:
Фрагмент мы сохранили. Далее можно обратиться к нему по индексу, причём в регулярных выражениях они начинаются с единицы. А чтобы движок воспринимал индекс именно как индекс, а не как число, мы снова используем экранирование:
name
user
image
force
enabled
Мы хотим получить вёрстку типа такой:
.. option:: name
TODO
.. option:: user
TODO
.. option:: image
TODO
.. option:: force
TODO
.. option:: enabled
TODO
Про существование
multiple-cursors
сейчас забудем.Итак.
1. Выделите текст. Достаточно нажать [M-h].
2. Вызовите команду
replace-regexp
.3. Введите выражение для поиска
^\(.+\)
и нажмите [RET].4. Введите выражение замены:
.. option:: \1
TODO
Просто напоминаю, что переход на новую строку в минибуфере делается так: [C-q C-j].
5. Нажмите [RET]. Ура! Мы получили нужный результат.
Теперь разберём само выражение.
^
— это маркер начала строки..+
— любые символы в любом количестве.А что это за круглые скобки и зачем они экранированные? А это — выделение нумерованной группы. Если по-простому, мы говорим движку регулярных выражений: "Вот этот фрагмент, когда найдёшь, сохрани куда-нибудь, он мне позже понадобится". Экранирование же нужно для того, чтобы Emacs не воспринимал скобки буквально. Без
\
он бы начал искать строки типа таких:(текст любой длины)
А строки типа таких не видел бы в упор:
текст любой длины, но без скобок в начале и конце
Фрагмент мы сохранили. Далее можно обратиться к нему по индексу, причём в регулярных выражениях они начинаются с единицы. А чтобы движок воспринимал индекс именно как индекс, а не как число, мы снова используем экранирование:
\1
. Эта запись означает "Вставить сюда текст, найденный при поиске первой группы".🔥6👍2❤1
Было такое, что перемещали куда-то курсор, а потом хотели бы быстро вернуться назад? Было. Как решить эту проблему?
1. Сохранить позицию в регистр.
2. Создать закладку и прыгнуть к ней.
3. Использовать пакет
Первые 2 способа требуют дополнительных усилий (работа с регистрами в целом не очень приятна), а вот третий сейчас рассмотрим:
Добавьте в
• [C-/]
• [C-_]
• [C-z] (это если вы перебиндили привязку, как я писал выше).
1. Сохранить позицию в регистр.
2. Создать закладку и прыгнуть к ней.
3. Использовать пакет
cursor-undo
.Первые 2 способа требуют дополнительных усилий (работа с регистрами в целом не очень приятна), а вот третий сейчас рассмотрим:
;; 📦 CURSOR-UNDO
;; https://elpa.gnu.org/packages/cursor-undo.html
;; Отмена работает в том числе на перемещение курсора.
(use-package cursor-undo
:ensure t
:pin "gnu"
:config (cursor-undo 1))
Добавьте в
init.el
и выполните этот код. Теперь перемещения курсора хранятся в списке отмен. Переместились куда-то и хотите быстро вернуться назад (в пределах одного и того же буфера)? Нажмите одно из сочетаний клавиш отмены:• [C-/]
• [C-_]
• [C-z] (это если вы перебиндили привязку, как я писал выше).
🔥6
Добрый день!
У меня сегодня нет электричества, поэтому пишу с калькулятора на солнечных батареях. Предыдущие 2 недели я болел, но это не значит, что обновления книги на Boosty не будет. Будет! Добавится новая глава про настройки ядра.
Вот тут немножко остановимся.
Ядро Emacs написано на языке C, а пакеты для него – на языке Emacs Lisp.
Большая часть настроек описана именно в файлах с расширением
А вот настройки ядра хранятся в коде на языке C, и чтобы использовать их, про них нужно знать. Загрузку модуля делать не нужно.
Могут ли эти настройки быть вам полезны? Ещё как! Настройки ядра это (включая но не ограничиваясь):
1. Создание lock-файлов.
2. Пищание.
3. Поведение TAB.
4. Внешний вид курсора.
5. Настройки сборщика мусора.
И многое, многое другое.
У меня сегодня нет электричества, поэтому пишу с калькулятора на солнечных батареях. Предыдущие 2 недели я болел, но это не значит, что обновления книги на Boosty не будет. Будет! Добавится новая глава про настройки ядра.
Вот тут немножко остановимся.
Ядро Emacs написано на языке C, а пакеты для него – на языке Emacs Lisp.
Большая часть настроек описана именно в файлах с расширением
.el
. Для использования этих настроек надо загрузить соответствующий модуль и вызвать customize-set-variables
(use-package
неявно делает то же самое в блоке :custom
).А вот настройки ядра хранятся в коде на языке C, и чтобы использовать их, про них нужно знать. Загрузку модуля делать не нужно.
Могут ли эти настройки быть вам полезны? Ещё как! Настройки ядра это (включая но не ограничиваясь):
1. Создание lock-файлов.
2. Пищание.
3. Поведение TAB.
4. Внешний вид курсора.
5. Настройки сборщика мусора.
И многое, многое другое.
👍13
Сервер GNU ELPA обновил ключ GPG, который используется для подписи пакетов. Это создаёт определённые проблемы при загрузке и установке пакетов из архива GNU ELPA. Решений несколько:
1. Правильное решение: импорт нового ключа в связку GPG:
2. Неправильный путь: выключение проверки подписей на уровне GNU Emacs:
Это решение плохое по нескольким причинам сразу, но основная — проверка подписи выключается не только для GNU ELPA, а для всех архивов вообще. По возможности избегайте.
3. Пользователи Seahorse могут использовать эту утилиту для загрузки ключей:
3.1. Запустите Seahorse.
3.2. Нажмите кнопку вызова главного меню и выберите Параметры.
3.3. Нажмите кнопку Добавить сервер ключей.
3.4. Выберите тип Сервер ключей HTTPS, а в поле Узел укажите
3.5. Закройте окно Параметры и выберите в главном меню Найти ключ в из сети (да, там опечатка).
3.6. В окне Найти ключи в сети введите идентификатор ключа
3.7. В окне со списком найденных ключей нажмите кнопку загрузки.
1. Правильное решение: импорт нового ключа в связку GPG:
gpg --keyserver keyserver.ubuntu.com --recv-keys 645357D2883A0966
2. Неправильный путь: выключение проверки подписей на уровне GNU Emacs:
(customize-set-variable
'package-check-signature nil)
Это решение плохое по нескольким причинам сразу, но основная — проверка подписи выключается не только для GNU ELPA, а для всех архивов вообще. По возможности избегайте.
3. Пользователи Seahorse могут использовать эту утилиту для загрузки ключей:
3.1. Запустите Seahorse.
3.2. Нажмите кнопку вызова главного меню и выберите Параметры.
3.3. Нажмите кнопку Добавить сервер ключей.
3.4. Выберите тип Сервер ключей HTTPS, а в поле Узел укажите
keyserver.ubuntu.com
. Поле с номером порта заполнять не нужно.3.5. Закройте окно Параметры и выберите в главном меню Найти ключ в из сети (да, там опечатка).
3.6. В окне Найти ключи в сети введите идентификатор ключа
645357D2883A0966
и нажмите кнопку Искать.3.7. В окне со списком найденных ключей нажмите кнопку загрузки.
✍3👍1
IMenu
Никакого отношения к корпорации Apple эта функция Emacs не имеет. А что это вообще такое? Это интерактивное меню, позволяющее быстро переходить к нужным местам в коде.
Если в вашем файле есть несколько разделов, заголовки и так далее, то это будет работать.
1. Нажмите [M-g i], и Emacs покажет список с компонентами первого уровня.
2. Выберите нужный пункт и нажмите [RET].
3. Если в выбранном пункте есть подпункты, Emacs их покажет.
4. Повторяйте шаги 2 и 3 до тех пор, пока не найдёте нужное. В последний момент Emacs переместит вас в нужное место.
Как использовать IMenu на практике? Для навигации в больших файлах, когда вам примерно известно, что и где находится, и вы просто хотите быстро перейти к нужному месту, а использовать закладки или регистры — не хотите.
Почитать в документации на сайте GNU: https://www.gnu.org/software/emacs/manual/html_node/emacs/Imenu.html
Никакого отношения к корпорации Apple эта функция Emacs не имеет. А что это вообще такое? Это интерактивное меню, позволяющее быстро переходить к нужным местам в коде.
Если в вашем файле есть несколько разделов, заголовки и так далее, то это будет работать.
1. Нажмите [M-g i], и Emacs покажет список с компонентами первого уровня.
2. Выберите нужный пункт и нажмите [RET].
3. Если в выбранном пункте есть подпункты, Emacs их покажет.
4. Повторяйте шаги 2 и 3 до тех пор, пока не найдёте нужное. В последний момент Emacs переместит вас в нужное место.
Как использовать IMenu на практике? Для навигации в больших файлах, когда вам примерно известно, что и где находится, и вы просто хотите быстро перейти к нужному месту, а использовать закладки или регистры — не хотите.
Почитать в документации на сайте GNU: https://www.gnu.org/software/emacs/manual/html_node/emacs/Imenu.html
www.gnu.org
Imenu (GNU Emacs Manual)
Next: Which Function Mode, Previous: Moving by Sentences, Up: Top-Level Definitions, or Defuns [Contents][Index]
👍6🔥1
Только что под руку подвернулся хороший пример использования регулярных выражений. Разберём его.
Списки можно оформлять по-разному, но, например, в документации Yandex Cloud принят подход, при котором в конце строк ставится точка с запятой, если все строки состоят только из одного предложения. В конце последнего элемента списка ставится точка.
Допустим, у нас уже есть список версий Ubuntu:
Ну, в чём проблема сделать из этого списка такой же, как в первом случае? Просто заменим точки на точку с запятой. Ничего плохого ведь не случится, правда?
Так, погодите-ка. А почему точка в номере версии тоже стала точкой с запятой? Нам этого не надо. Сейчас можно и руками поправить. Но представьте, что у вас список из 50 элементов. В таком случае задачу поможет решить регулярное выражение.
Нам нужно найти точку, стоящую в конце строки.
Символ
Символ конца строки обозначается знаком
Давайте сделаем замену:
1. Выделите список и вызовите команду
2. Введите выражение
3. Введите строку замены
4. Исправьте точку с запятой на точку в последнем элементе списка.
Поздравляю! С помощью регулярных выражений вы сэкономили себе немного времени.
Списки можно оформлять по-разному, но, например, в документации Yandex Cloud принят подход, при котором в конце строк ставится точка с запятой, если все строки состоят только из одного предложения. В конце последнего элемента списка ставится точка.
Версии Debian:
* 12 Bookworm;
* 11 Bullseye;
* 10 Buster;
* 9 Stretch.
Допустим, у нас уже есть список версий Ubuntu:
Версии Ubuntu:
* 14.04 Trusty Tahr.
* 16.04 Xenial Xerus.
* 18.04 Bionic Beaver.
* 20.04 Focal Fossa.
* 22.04 Jammy Jellyfish.
Ну, в чём проблема сделать из этого списка такой же, как в первом случае? Просто заменим точки на точку с запятой. Ничего плохого ведь не случится, правда?
Версии Ubuntu:
* 14;04 Trusty Tahr;
* 16;04 Xenial Xerus;
* 18;04 Bionic Beaver;
* 20;04 Focal Fossa;
* 22;04 Jammy Jellyfish;
Так, погодите-ка. А почему точка в номере версии тоже стала точкой с запятой? Нам этого не надо. Сейчас можно и руками поправить. Но представьте, что у вас список из 50 элементов. В таком случае задачу поможет решить регулярное выражение.
Нам нужно найти точку, стоящую в конце строки.
Символ
.
в регулярных выражениях означает "вообще любой символ", поэтому её надо экранировать:\.
Символ конца строки обозначается знаком
$
:\.$
Давайте сделаем замену:
1. Выделите список и вызовите команду
replace-regexp
.2. Введите выражение
\.$
и нажмите [RET].3. Введите строку замены
;
и нажмите [RET].4. Исправьте точку с запятой на точку в последнем элементе списка.
Поздравляю! С помощью регулярных выражений вы сэкономили себе немного времени.
👍5🔥2
На Boosty вышла новая версия книги, с IComplete, Vertico, Helm и Counsel. Порядок глав мне сейчас не очень нравится. Я даже подумываю отказаться от деления книги на главы по алхимическому принципу.
https://boosty.to/simple-emacs/posts/3be25add-53b5-41c1-918e-034ce37022c4?share=post_link
https://boosty.to/simple-emacs/posts/3be25add-53b5-41c1-918e-034ce37022c4?share=post_link
boosty.to
v25.08.05 - Максим Дунаевский
Posted on Aug 05 2025
👍4
gnu-emacs-for-technical-writers-25.02.09-white.pdf
5.3 MB
А это старая версия книги, от 9 февраля этого года.