Pull to refresh

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). но хотелось бы узнать более подробно

  1. Держать под контролем ~/.emacs.d/ проще чем весь ~/. А elpa и другие каталоги обязательно нужно добавить в .gitignore.

  2. В примере для подсветки парных скобок используется встроенный пакет 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))


  3. corfu-indexed-mode работает так:

    1. Вводите часть строки, CORFu показывает варианты.

    2. Нажимаете [M-<номер> Enter]. CORFu вставляет выбранный вариант.

  4. Про автодополнение хорошая идея.

А ещё лучше выводить все временные и неважные файлы в ~/.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 будет работать, хоть в целом замечание про перенос в правильное место валидно

Sign up to leave a comment.

Articles