GNU EMACS для технических писателей
285 subscribers
11 photos
19 files
87 links
Настройка, использование, хаки
Download Telegram
Команда find-grep в Emacs запускает утилиту find, её вывод перенаправляет в grep, а его вывод отображает в буфере. По умолчанию команда find запускается с такими аргументами:

find . -type f -exec grep


Эта запись означает следующее: искать только файлы (не каталоги и не символические ссылки), начиная с текущего каталога, а найденное передавать в grep.

Что там разбирает grep пока опустим. Лучше подкрутим аргументы find. Вряд ли вы хотите, чтобы утилита искала совпадения во всех файлах проекта, поэтому давайте добавим аргумент -name, например:

find . -type f -name "*.rst" -exec grep


#find #grep #поиск
👍4
На выходных поработал с интерпретатором Python в интерактивном режиме. VIM опять никому не нужен, а вот сочетания Emacs вполне себе работают: [C-a], [C-e], [M-f], [M-b], [C-f], [C-b] и ещё некоторые. Возможно, даже стоит написать статью на Хабр, где рассказать, что сочетания из Emacs можно использовать в Python и GNOME Terminal, а сочетания из VIM только в самом VIM.
👍1
По мотивам поста про бесячий автокомплит просто выложу свой код настройки company-mode:

;; 📦 COMPANY-MODE
;; https://company-mode.github.io/
;; Автодополнение
(use-package company
:ensure t
:init
(unless (package-installed-p 'company)
(package-vc-install '(company
:url "https://github.com/company-mode/company-mode.git"
:branch "1.0.2")))
:delight ""
:demand t
:custom
(company-idle-delay 0.5 "Задержка вывода подсказки — полсекунды")
(company-minimum-prefix-length 2 "Минимум 2 знака, чтобы company начала работать")
(company-show-quick-access t "Показывать номера возле потенциальных кандидатов")
(company-tooltip-align-annotations t "Выровнять текст подсказки по правому краю")
(company-tooltip-limit 15 "Ограничение на число подсказок")
:hook ((adoc-mode
css-mode
dockerfile-mode
emacs-lisp-mode
html-mode
latex-mode
lisp-data-mode
minibufer-mode
nxml-mode
org-mode
python-mode
rst-mode
ruby-mode
web-mode
) . company-mode)
:bind
(:map company-active-map
("TAB" . company-complete-common-or-cycle)
("M-/" . company-complete)
("M-." . company-show-location)))


Теперь описание.

1. Если пакет не установлен, package-vc-install сделает это, при чём поставит фиксированную версию 1.0.2, а не нестабильную из MELPA.
2. В строке состояния ничего не выводится. Для этого я использую Delight. Код установки и инициализации в моём init.el размещается выше.
3. Пакет company загружается не сразу, а в фоне. Прямо после запуска он мне не нужен, поэтому :demand t.
4. Настройки — самое интересное. То, о чём написано в ОП-посте, решается через правку company-idle-delay и, при необходимости, company-minimum-prefix-length.
5. Всё остальное уже вкусовщина, настраивайте по своему усмотрению.
👍1🔥1
Главная проблема 9 каналов из 10, касающихся Emacs, заключается в том, что там обсуждают не Emacs. org-mode, DooM Emacs, Emacs Prelude, Evil, ошибки при работе фрагментов кода, взятых со StackOverflow, и хорошо если не из вопроса, а из ответов...
По возможности избегайте чтения таких каналов: может сложиться впечатление, что Emacs состоит из одних только проблем.
👌7🙈3
Если вы до сих пор не используете Counsel, то самое время попробовать:


;; 📦 COUNSEL
;; https://elpa.gnu.org/packages/counsel.html
;; Автодополнение на основе Ivy
(use-package counsel
:ensure t
:bind
(:map global-map
("M-x" . counsel-M-x)
("C-x C-f" . counsel-find-file)
("M-y" . counsel-yank-pop)
("C-h f" . counsel-describe-function)
("C-h v" . counsel-describe-variable)
("C-h l" . counsel-find-library)
("C-c c" . counsel-compile)
("C-c g" . counsel-git)
("C-x 8 RET" . counsel-unicode-char)))


В Counsel встроено множество команд, заменяющих собой стандартные команды. Главное удобство заключается в поиске. Например, counsel-M-x фильтрует записи по регулярному выражению прямо во время ввода команды!

Если вы ранее настроили Helm, не забудьте отключить часть его функций, чтобы не было конфликтов.

#counsel
Пакет colorful-mode.el обновился до стабильной версии 1.1.0. Он используется для отображения цветов в буферах. Если вы часто работаете с CSS или HTML-кодом, то вам этот пакет будет полезен тем, что фон строки с кодом цвета типа #FF2200 будет иметь именно этот оттенок красного! Также пакет распознаёт коды типа cyan, red, black и тому подобное.
Техписам тоже будет полезен при настройке тем AsciiDoc или Sphinx.


;; 📦 COLORFUL-MODE
;; https://github.com/DevelopmentCool2449/colorful-mode
;; Отображение цветов прямо в буфере. Наследник `raibow-mode.el'.
(use-package colorful-mode
:ensure t
:hook ((css-mode
emacs-lisp-mode
web-mode) . colorful-mode))


https://github.com/DevelopmentCool2449/colorful-mode
CSS-файл с активным colorful-mode.
👍4
А вы знали, что для ReStructured Text и Sphinx существует LSP-сервер? А он есть и называется Esbonio. Сегодня мне удалось его настроить вопреки инструкциям с сайта разработчиков, поэтому в ближайшем обновлении книги на Boosty будет целая глава про это. Всем остальным придётся ждать 3 месяца 😊
hl-line.el — это встроенный пакет. Всё, что он делает — подсвечивает активную строку. Конечно, у нас есть Pulsar и Beacon, но hl-line-mode не конфликтует с ними, а образует симбиоз. Единственное, что могу посоветовать — выбирайте тему оформления так, чтобы в ней подсвеченная строка нормально читалась. Например, в doom-monokai-pro приходилось напрягать глаза, зато в ef-autumn всё в порядке.

(require 'hl-line)
(global-hl-line-mode 1)


Впрочем, с use-package тоже можно:

(use-package hl-line
:config (global-hl-line-mode 1))
👍2
Жызнь с hl-line-mode и без него.
2
На Boosty опубликовано техническое обновление книги. В AsciiDoc пустые строки являются частью синтаксиса, и иногда из-за этого одна глава "прилипает" к другой. Вставил пустые строки в начало, кажется, всех файлов, кроме src/index.adoc. Сейчас структура оглавления должна быть корректной. Обо всех найденных ошибках можете писать мне на почту dunmaksim@yandex.ru или в Telegram-канал с обсуждением книги.
👍3
В книгу вчера были добавлены описания того, как работать с окнами Emacs. Частично продублирую контент сюда.

[C-x 0] — закрыть активное окно.
[C-x 1] — сделать активное окно единственным. Все прочие окна будут закрыты.
[C-x 2] — разделить активное окно горизонтальной чертой.
[C-x 3] — разделить активное окно вертикальной чертой.
[C-x 4 1] и [C-x 4 4] — это префиксы. Указанная после них команда будет принудительно выполнена в том же самом окне или в отдельном соответственно. Кстати, существует несколько сокращений по умолчанию. Например, не нужно отдельно вызывать Dired, достаточно нажать [C-x 4 d], и указанный каталог будет открыт в новом окне.
👍2🔥1
Какое действие выполняет последовательность [C-x 4 f]?
Anonymous Quiz
8%
Запуск find-grep
63%
Запуск find-file
29%
Создаёт окно и перемещает в него курсор
Пожалуй, постановка последнего опроса не вполне корректна, ведь при выполнении find-file-other-window формально Emacs создаёт новое окно и перемещает в него курсор. Постараюсь в следующий раз формулировать вопросы и ответы без спешки.
Надоело, что в русской раскладке не работает команда dired-up-directory, привязанная к [^]. Решил проблему радикально:
(keymap-set dired-mode-map ":" 'dired-up-directory)
👍2🤯1
Последнее время дичайше обновляются разные пакеты:

1. Counsel и Ivy до 0.15.0. Используется для быстрого поиска. Может заменить собой [M-x], тогда команды можно будет искать не по начальным буквам, а по регулярным выражениям. Но не только их. counsel-load-theme отличная замена для load-theme, а counsel-describe-function — для describe-function. Странно, что этот пакет (точнее, семейство пакетов) до сих пор не стали встроенными.
2. Eglot до 1.18. Это такая реализация интерфейса для LSP-сервера от проекта GNU.
4. Jinx до 1.12. Наконец-то нормальная проверка орфографии, в том числе для мультиязычных текстов. В отличие от Flyspell автоматически проверяет весь буфер, а не только введённые строки.
5. Org до 9.7.24. Про этот режим можно отдельную книгу написать. Органайзер, список дел, список задач и так далее.
👍8
В разработке Emacs используется SemVer, но не совсем обычный. Версии с минорным 0 — это версии для разработчиков, а вот если минорная версия 1 и выше, то это уже считается релиз для повседневного пользования. Именно поэтому так странно выглядит история версий:

29.0 — для разработчиков;
29.1 — релиз;
30.0 — для разработчиков;
30.1 — релиз.
👍8