LINUX.ORG.RU

Помогите отдладить конфиг емакса

 


0

2

Всем привет.

Есть конфиг емакса.

Суть проблемы такова:

Емакс не прогружает конфиг при запуске(powerline, например, покорежена), приходится делать M-x load-file. Но хуки(например на python-mode) все-равно не работают, приходится включать вручную.

Помогите найти ошибки.

★★★★

Ответ на: комментарий от Difrex
(defun my-python-mode-hook ()
    (add-hook 'python-mode-hook 'fci-mode)
    (add-hook 'python-mode-hook 'flymake-python-pyflakes-load)
    (add-hook 'python-mode-hook 'jedi:setup)
    (setq py-autopep8-options '("--max-line-length=99"))
          (add-hook 'python-mode-hook 'py-autopep8-enable-on-save))
(add-hook 'python-mode-hook 'my-python-mode-hook)

внутри определения my-python-mode-hook вместо add-hook вызывай сами функции. А то при первом входе в python-mode твой хук вешает другие хуки на python-mode. на втором файле они, конечно, отработают, но сдается мне, что ты хотел другого. либо вместо

(add-hook 'python-mode-hook 'my-python-mode-hook)
делай
(my-python-mode-hook)

feofan ★★★★★ ()
Ответ на: комментарий от feofan

Спасибо. Вроде, понял. Дальше сам разберусь.

Difrex ★★★★ ()

Что удерживает людей от использования use-package/req-package или их менее известных/допиленных альтернатив? Это ведь намного удобнее, на мой взгляд, чем иметь раздробленный конфиг.

Ordy ()
Ответ на: комментарий от Ordy

Что удерживает людей от использования use-package/req-package

Ничего не «удерживает», просто не пробовал, и не вижу никакой необходимости.

Это ведь намного удобнее, на мой взгляд

А расскажите, в чем удобство? Может быть, действительно надо начать использовать.

чем иметь раздробленный конфиг.

Ну вот лично мне напротив — удобнее иметь много мелких файлов, а не одну простыню.

Zmicier ★★★★★ ()
Ответ на: комментарий от Zmicier

Ну вот лично мне напротив — удобнее иметь много мелких файлов, а не одну простыню.

«Раздробленность» не в плане количества файлов, а в плане отсутствия явной видимости того, где начинается и кончается настройка определенного пакета — сам я также использую конфиг из нескольких файлов.

А расскажите, в чем удобство?

Use-package позволяет унифицировать настройку плагинов и делает доступной конфигурацию отдельных регулярно используемых вещей через keyword'ы(к примеру, проверку на наличие установленного пакета, запуск по условию, отложенная загрузка и т.д.). В целом же конфиг пакета и практически все вещи, которые относятся к нему, на выходе получаются «изолированными» от остального. Вот пример настройки markdown-mode:

(use-package markdown-mode
  :commands (markdown-mode gfm-mode)
  :mode (("README\\.md\\'" . gfm-mode)
         ("\\.md\\'" . markdown-mode)
         ("\\.markdown\\'" . markdown-mode))
  :init 
  (setq markdown-command "multimarkdown"))
":commands" отвечает за то, что лишь эти комманды будут «торчать» наружу после инициализации пакеты, т.е. это один из случаев отложенной загрузки. ":mode" привязывает данный mode для обозначенных типов файлов(причем режимов, как видно выше, может быть несколько). :init отвечает за те комманды/настройки, которые будут выполнены при инициализации Emacs. Есть также :config, который будет выполнен непосредственно при загрузке пакета. Данных ключевых слов намного больше(есть запуск после определенного пакета, биндинги клавиш, diminish для скрытия показа в mode-line, etc). Если заинтересовало, то настоятельно рекомендую ознакомиться с официальным описанием плагина. Также можно делать вложенные конфигурации пакетов, т.е. в одном use-package будет использование ещё какого-то пакета. Некоторые сторонние плагины(я использую general.el для биндигов) добавляют свои собственные keyword в use-package.

Да, все это в принципе можно сделать посредством ванильного Емакса, однако use-package избавляет от необходимости совершать лишние телодвижения и значительно упрощает отладку.

Ordy ()
Ответ на: комментарий от Ordy

Спасибо, видел в чужих конфигах такие записи, да руки всё не доходили разоьраться с тем, что это такое.

najlus ★★★★★ ()
Ответ на: комментарий от Ordy

use-package/req-package или их менее известных/допиленных альтернатив?

с учетом того, что use-package сейчас планомерно готовят к включению в базовую поставку emacs'а, имеет смысл смотреть именно на него. Я после этой новости стал постепенно свой конфиг на него переводить, но пока далеко не все пакеты я так настраиваю.

feofan ★★★★★ ()
Ответ на: комментарий от Ordy

Предпросмотр Позволяет ли use-package подключать пакеты по требованию, а не при старте емакса? Например: когда я открываю файл *.hs происходит подключение haskell-mode, company-ghc, ... также настройка должна производится после подключения оных. Можно ли выставлять настройки перед подключением пакетов? Например: некоторые опции evil-mode это требуют. Можно ли выбирать из какого репозитория (melpa/stable) будет загружен конкретный пакет? Нужно для ensime-mode. Как часто и когда use-package дергает package-refresh-contents?

anonymous ()
Ответ на: комментарий от Ordy

Позволяет ли use-package подключать пакеты по требованию

with-eval-after-load имел ввиду

anonymous ()
Ответ на: комментарий от Ordy

":commands" отвечает за то, что лишь эти комманды будут «торчать» наружу после инициализации пакеты, т.е. это один из случаев отложенной загрузки.

То есть это велосипед на замену автозагрузке, только еще и требующий ручной настройки с моей стороны? Но зачем???

":mode" привязывает данный mode для обозначенных типов файлов (причем режимов, как видно выше, может быть несколько)

Простите, но опять не понял. Удобство заключается в том, что мне надо вручную переписывать из markdown-mode.el весь список суффиксов?

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от anonymous

Позволяет ли use-package подключать пакеты по требованию, а не при старте емакса?

Да, позволяет. Есть явное указании defer/при загрузке определенных файлов(выше пример с mode), или lazy loading реализован через if, commands и некоторые другие keyword'ы.

Если нужно быть уверенным в том, что пакет загрузиться после другого пакета, то есть :after или возможность вложенных конфигураций.

Можно ли выбирать из какого репозитория (melpa/stable) будет загружен конкретный пакет?

Use-package является утилитой для конфигурации, а не менеджером пакетов. Если выставлен ":esnure t" у пакета, то таскает он через elpa при помощи package.el. Если сильно захочется, то не думаю, что будет проблематично переопределить функцию или переменную из него.

Можно ли выставлять настройки перед подключением пакетов? Например: некоторые опции evil-mode это требуют.

Да, через :init.

Как часто и когда use-package дергает package-refresh-contents?

Здесь не могу точно сказать. Судя по найденной информации, он его не трогает самостоятельно.

Ordy ()
Ответ на: комментарий от Difrex

Выглядит круто.

Да нет, пока выглядит ущербно.

Zmicier ★★★★★ ()
Ответ на: комментарий от Ordy

Use-package является утилитой для конфигурации, а не менеджером пакетов. Если выставлен ":esnure t" у пакета, то таскает он через elpa при помощи package.el.

А если ":esnure t" не выставлен то откуда use-package тянет пакет?

anonymous ()
Ответ на: комментарий от Zmicier

То есть велосипед на замену автозагрузке, только еще и требующий ручной настройки с моей стороны? Но зачем?

Никто не заставляет настраивать отложенный запуск — это своего рода advanced фича. Профит использования такой расширенной конфигурации кроется в скорости загрузки/работы Емакса. К примеру запуск vim'a при помощи технологий lazy-loading можно ускорить в два-три раза и достичь отметки в ~0.5-7 мс.

Я здесь агитирую использовать use-package не из-за этого, а именно из-за возможности держать конфиг пакета в одной месте плюс иметь более простую дополнительную настройку пакета.

Удобство заключается в том, что мне надо вручную переписывать из markdown-mode.el весь список суффиксов?

Удобство заключается в том, что нет нужды писать нечто вроде:

(add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))
В отдельном месте, а можно просто сделать сие через встроенный keyword:
(use-package js2-mode
  :mode "\\.js\\'"
  ...)
Речь идет о неком сахаре, который делает жизнь пользователей use-package проще. А так mode работают так же, как и в обычном Emacs'e, т.е. если mode уже привязан к определенному расширению файлов, то он его загрузит.

Ordy ()
Ответ на: комментарий от anonymous

Опять же через пакетный менеджер, т.е. установленные пакеты на диске. Обычно я ставлю пакет через package-install, а после вписываю в конфиг нужное мне через use-package.
Многие предпочитают использовать связку use-package + cask.

Ordy ()
Ответ на: комментарий от anonymous

Точнее даже не пакетный менеджер, а вообще напрямую через load-path наверное должен подхватывать пакеты.

Ordy ()
Ответ на: комментарий от Ordy

Никто не заставляет настраивать отложенный запуск — это своего рода advanced фича.

Так я и говорю — то, что в искоробочном ГНУ Емаксе работает так, что пользователь об этом вообще может не знать, здесь считается за «advanced feature» и требует ручной настройки.

нет нужды писать нечто вроде:
(add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))

Конечно, нет — оно же давно написано автором этого самого js2-mode’а.

Ну, в общем я понял — это для тех, кто не любит, чтобы «просто работало», а хочет иметь полный контроль надо всем. Я уважаю таких людей, но сам к ним не отношусь. Спасибо, что откликнулись на просьбу.

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 2)
Ответ на: комментарий от Zmicier

я понял — это для тех, кто не любит, чтобы «просто работало», а хочет иметь полный контроль надо всем.

нет ты не понял, это для тех кто хчоет что бы просто работало! C use-package я получаю пухлого монстра в загрузку и теряю суть происходящего так как нужно разбираться как он и что делает, а это только мешает.

anonymous ()
Ответ на: комментарий от Zmicier

Ну я и говорю — то, что во встроенной в ГНУ Емакс системе управления пакетами работает из коробки, так, что пользователь об этом вообще может не знать, здесь считается за «advanced feature» и требует ручной настройки.

Пользователь в любом случае будет вписывать, о боже упаси, строки кода в свой конфиг, если ему понадобиться настройка или того требует определенный плагин. use-package в этом плане лишь предоставляет пользователю более удобный интерфейс для настройки(некоторые стандартные функции заменяются keyword'ами и все) в одном месте. А уж потом, если пользователь захочет, он может настроить принцип загрузки пакетов.

Ну конечно, нет — оно же давно написано автором этого самого js2-mode’а.

Открываем исходник и видим следующее:

;; To install it as your major mode for JavaScript editing:

;;   (add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))

Ну в общем я понял — это для тех, кто не любит, чтобы «просто работало», а хочет иметь полный контроль надо всем.

:D Кажется, это называется синдром утенка, да? use-package ничем не сложнее «просто работает» — достаточно лишь прочесть официальный readme по нему. Он никоим образом не мешает достижению целей пользователей, если ему не требуется что-нибудь из вышеперечисленного.

Когда конфиг превышает несколько сотен строк, то куда проще следить за всей своей экосистемой с использованием use-package.

Ordy ()
Ответ на: комментарий от anonymous

нет ты не понял, это для тех кто хочет что бы просто работало!

Ну тогда я вообще ничего не понимаю! Вот товарищ же пишет, что он сначала ставит пакет, а потом дописывает в конфиг под use-package’ем команды и шаблоны имен файлов по которым его подгружать. Тогда как ставлю пакет безо всякого use-package’а — и ничего никуда не дописываю, а все просто работает.

Zmicier ★★★★★ ()
Ответ на: комментарий от Ordy

Пользователь в любом случае будет вписывать...

Что вы мне рассказываете! У меня про этот js2 в конфиге ни строчки, а M-x js2-mode и файловые ассоциации работают.

Открываем исходник и видим следующее:

Совершенно верно, открываем исходник и на строчке 12791-й видим следующее:

;;;###autoload
(add-to-list 'auto-mode-alist '("\\.js$" . js2-mode))
Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от Ordy

Кажется, это называется синдром утенка, да? use-package ничем не сложнее «просто работает» — достаточно лишь прочесть официальный readme по нему.

Я кажется даже, специально оговорил, что вас — людей, что по десять раз пересобирают Линукс или пишут какие конфиги для ленивой загрузки плагинов, лишь бы выгадать пару секунд машинного времени — уважаю — и нет, вы все равно не можете удержаться от того, чтоб меня не подколоть.

Еще раз — большое спасибо за потраченное на об’яснения время, это не для меня, я грузить себе мозги чтением всяких «официальных ридми», решая проблему, которой для меня не существует, не хочу.

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 3)
Ответ на: комментарий от Zmicier

Совершенно верно, открываем исходник и на строчке 12791-й видим следующее

Ну, раз вы так настраиваете на своей правоте, то держите скриншот данной строки. Что-то пошло не так? :)

я грузить себе мозги чтением всяких «официальных ридми» не хочу.

Если человек не желает использовать действительно удобные и более эффективные вещи для работы, то я здесь бессилен. :c

Ordy ()
Ответ на: комментарий от anonymous

Можно ли выбирать из какого репозитория (melpa/stable) будет загружен конкретный пакет?

Да, можно. На остальное, вроде, ответили.

feofan ★★★★★ ()
Ответ на: комментарий от Ordy

скриншот данной строки

Еще на видео можно было снять.

Что-то пошло не так? :)

Понятия не имею, разбираться мне лень. У меня в Стретче эта строчка именно за этим номером. См. https://sources.debian.net/src/js2-mode/0~20170116-1/js2-mode.el/#L12791

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от Zmicier

Не во всех пакетах авторы позаботились об этом. Или какой-то дефолт не устраивает. Ну и отложенная загрузка сильно засахарена - позволяет легко и удобно сократить время запуска имакса.

У меня, например, время запуска при переходе на use-package сократилось с четырех секунд до полсекунды.

feofan ★★★★★ ()
Последнее исправление: feofan (всего исправлений: 1)
Ответ на: комментарий от anonymous

По умолчанию используется самая новая версия, но можно явно указать источник.

feofan ★★★★★ ()
Ответ на: комментарий от feofan

Ну и отложенная загрузка сильно засахарена — позволяет легко и удобно сократить время запуска имакса.

Да, спасибо, я уже понял. Сейчас посмотрел, я запускал последний раз ровно неделю назад, так что не горит никак. :-) В третий раз откланиваюсь.

Zmicier ★★★★★ ()
Ответ на: комментарий от Ordy

дваждую use-package, использую даже для локальных пакетов

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.