GNU EMACS для технических писателей
284 subscribers
11 photos
19 files
87 links
Настройка, использование, хаки
Download Telegram
Загадка на эти выходные: что делают эти две команды?

1.

find ./ -name "*.<ext>" -exec grep -e "[A-Za-z][А-Яа-яЁё]" {} \;


2.

find ./ -name "*.<ext>" -exec grep -e "[А-Яа-яЁё][A-Za-z]" {} \;


Вместо <ext> подставьте расширение файлов, в которых хранится код ваших проектов: md для Markdown, rst для ReStructured Text, adoc для AsciiDoc, tex для LaTeX и так далее.
👍1
Теперь ответ на приведённую выше задачу.

Утилита find используется для поиска файлов. В данном случае выполняется поиск по части имени.
Найденные файлы передаются в утилиту grep, которая выполняет поиск нужной строки. Только вместо строки у нас регулярное выражение, которое в первом случае означает "Найди места, где после символов латиницы идут символы кириллицы", а во втором случае — наоборот, "Найди места, где сначала идёт кириллица, а потом латиница".

При желании можно объединить эти две команды в одну, подправив регулярное выражение. Однако, при этом пострадает простота понимания. Регулярные выражения сложны сами по себе, поэтому не усложняйте их без веской причины.
👍1
Команда 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