Comments 10
это точно текстовый редактор?
всё-таки порядок поиска конфигов немного сложнее. судя по статье мой ~/.emacs игнорируется (а судя по https://www.gnu.org/software/emacs/manual/html_node/emacs/Find-Init.html и моим глазам это конечно же не так).
также непонятно зачем держать ~/.emacs.d в vcs когда там куча временных данных пакетов и установленные с elpa пакеты (которые часто обновляются).
подсветка скобок у меня без всяких установленных пакетов.
corfu-indexed-mode - это только декорация или можно как-то цифрами выбрать?
идея для следующей статьи: разбор автодополнителей. начиная с ido, через ivy-mode/другие и corfu. потому как каждый из них пишет "лучше предыдущих", но почему не пишут по какой-то причине. corfu видимо назначен победителем так как курируется авторами emacs-а (и как случилось с eglot в противостоянии с lsp-mode). но хотелось бы узнать более подробно
Держать под контролем
~/.emacs.d/проще чем весь~/. Аelpaи другие каталоги обязательно нужно добавить в.gitignore.В примере для подсветки парных скобок используется встроенный пакет
paren.el. А для раскрашивания парных скобок рекомендуюrainbow-delimiters:;; 📦 RAINBOW-DELIMITERS ;; https://github.com/Fanael/rainbow-delimiters ;; Подсветка парных скобок одним цветом (use-package rainbow-delimiters :pin nongnu :ensure t :hook ((prog-mode text-mode) . rainbow-delimiters-mode))corfu-indexed-modeработает так:Вводите часть строки, CORFu показывает варианты.
Нажимаете [M-<номер> Enter]. CORFu вставляет выбранный вариант.
Про автодополнение хорошая идея.
А ещё лучше выводить все временные и неважные файлы в ~/.cache
;; Default locations is in system cache directory.
(setq-default vd/emacs-config-directory (file-name-directory load-file-name)
user-emacs-directory (expand-file-name "emacs/" (getenv "XDG_CACHE_HOME"))
package-user-dir (expand-file-name "packages/" user-emacs-directory)
url-history-file (expand-file-name "url/history" user-emacs-directory)
custom-file (expand-file-name "custom.el" user-emacs-directory))
(load custom-file :noerror)
И вообще есть ещё early-init.el. А настройки лучше хранить с помощью dotfile manager. Я использую Chezmoi, благодаря шаблонам легко в одном файле держать разные данные для разных машин и даже осей
1 какая разница в таком случае где в репозитории держать этот один (или несколько) файлов? ;-)
2 я имел в виду что для подсветки необязательно менять конфиг. радугу пробовал и не был в восторге - мельтешение цветов сбивает
3 возможно я понимаю почему у нас разные поведения. у меня номер отображается, но в выбрать не помогает (пробовал и M и C и Esc). подозреваю у вас емакс в графическом режиме, а у меня через putty в терминале. необходимые оконные либы для терминала нужные corfu планируют включить в емакс в версии 31. стороння corfu-terminal-mode видимо не поддерживает выбор по номеру...
Начинающим Emacser’s может пригодиться моя заготовка конфигурации: https://github.com/easimonenko/.emacs.d В ней упор сделан на использование встроенных пакетов и без навязывания каких-либо репозиториев пакетов (пакеты вы ставите любым приемлемых для вас способом вручную). Минимум настроек, отключено всё лишнее (с моей точки зрения). Это делает загрузку Emacs максимально быстрой, насколько это возможно в конкретной конфигурации.
А в общем, новичкам рекомендую начинать с пустой конфигурации и постепенно учиться строить её своими руками.
Вы хотели сказать https://github.com/emacs-ru/emacs-from-scratch
Я по диагонали посмотрел Ваш init.el и сходу выявил ряд проблем:
Вы настройки делаете через
setqв блоке:config, а не в блоке:custom. Я про эту ошибку уже писал: https://habr.com/ru/articles/816159/Вы неправильно связываете режимы. Допустим, вот этот код:
(use-package prog-mode :config (global-prettify-symbols-mode) :hook (prog-mode . flymake-mode))Почему в настройках пакета
prog-modeвы включаете режимflymake-mode? Эти настройки нжуно перенести в настройкиflymake:(use-package flymake :hook (prog-mode . flymake-mode))Потому что в вашем примере режим
flymake-modeна момент выполнения кода настройки не существует, связывать с хуком нечего.Настройки
project-mode-lineвы делаете вообще в отрыве от пакета:(setq project-mode-line t)Во-первых, используйте
setopt. Во-вторых, гдеuse-package? Почему такая непоследовательность?(use-package project :custom (project-mode-line t))Почему
visual-line-modeвключается не в настройках пакетаsimple, а вtext-mode? Правильно так:(use-package simple :hook (text-mode . visual-line-mode)))
Дальше просто не вижу смысла разбирать. Ваш репозиторий — сборник примеров того, как настраивать Emacs НЕ надо.
Спасибо, Максим, за замеченные проблемы. Займусь их исправлением на досуге.
Вы хотели сказать https://github.com/emacs-ru/emacs-from-scratch
Кстати, Вы неправильно используете лицензию GNU GPL: 1) в init.el отсутствует Copyright; 2) там же НЕ указана лицензия в форме:
;;; License:
;;
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
Это означает, что воспользоваться Вашим init.el вне emacs-from-scratch нельзя.
Ну что сказать, местами учим плохому. :init и :config работают не совсем так
в примераъ init - делает ровно то что нужно, а :config вообще не делает то, что ты думаешь и в некоторых случаях работать не будет.
чтобы убедиться, что не работает, поставь defer t и посмотри, что будет. require это не про загрузку пакетов, иногда он нужен, иногда нет.
Подсказка: "удивительно, что этот код вообще работает" - попробуйте детально разобраться, почему он работает (штатно, как и задумано).
пс. и даже в ответах на комменты есть неточности, опять же flymake mode hook будет работать, хоть в целом замечание про перенос в правильное место валидно
Инициализация Emacs