LINUX.ORG.RU

Emacs-starter-kit

 ,


0

2

Кто-нибудь пользуется сабжем? Я имею ввиду версию от technomancy, которая самая популярная. Наткнулся на проблему в нем, не пойму - то ли я делаю что то не правильно, то ли там где то баг. Сам кит ставится как обычный пакет через package.el. Там есть вот такой код -

;;;###autoload
(progn
  ;; Turn off mouse interface early in startup to avoid momentary display
  (dolist (mode '(menu-bar-mode tool-bar-mode scroll-bar-mode))
    (when (fboundp mode) (funcall mode -1)))

  (mapc 'require '(uniquify starter-kit-defuns starter-kit-misc))

  ;; You can keep system- or user-specific customizations here
  (setq esk-system-config (concat user-emacs-directory system-name ".el")
        esk-user-config (concat user-emacs-directory user-login-name ".el")
        esk-user-dir (concat user-emacs-directory user-login-name))

  (add-to-list 'load-path esk-user-dir)

  (setq smex-save-file (concat user-emacs-directory ".smex-items"))
  (smex-initialize)
  (global-set-key (kbd "M-x") 'smex)

  (when (file-exists-p esk-system-config) (load esk-system-config))
  (when (file-exists-p esk-user-config) (load esk-user-config))
  (when (file-exists-p esk-user-dir)
    (mapc 'load (directory-files esk-user-dir nil "^[^#].*el$"))))

(provide 'starter-kit)

Самое интересное - вторая половина. Он загружает файл .emacs.d/username.el и файлы из директории .emacs.d/username/ Проблема в том, что он загружает эти файлы не после того, как загрузятся все установленные пакеты, а в середине загрузки. Соответственно я не могу в конфиге использовать функции из пакетов, которые еще не загрузились. Залез на гитхаб, там код отличается от того, что в пакете -

;;;###autoload
(progn
  ;; Turn off mouse interface early in startup to avoid momentary display
  (dolist (mode '(menu-bar-mode tool-bar-mode scroll-bar-mode))
    (when (fboundp mode) (funcall mode -1)))

  (mapc 'require '(uniquify starter-kit-defuns starter-kit-misc))

  ;; You can keep system- or user-specific customizations here
  (setq esk-system-config (concat user-emacs-directory system-name ".el")
        esk-user-config (concat user-emacs-directory user-login-name ".el")
        esk-user-dir (concat user-emacs-directory user-login-name))

  (setq smex-save-file (concat user-emacs-directory ".smex-items"))
  (smex-initialize)
  (global-set-key (kbd "M-x") 'smex)

  (defun esk-eval-after-init (form)
    "Add `(lambda () FORM)' to `after-init-hook'.

If Emacs has already finished initialization, also eval FORM immediately."
    (let ((func (list 'lambda nil form)))
      (add-hook 'after-init-hook func)
      (when after-init-time
        (eval form))))

  (esk-eval-after-init
   '(progn
      (when (file-exists-p esk-system-config) (load esk-system-config))
      (when (file-exists-p esk-user-config) (load esk-user-config))
      (when (file-exists-p esk-user-dir)
        (mapc 'load (directory-files esk-user-dir t "^[^#].*el$"))))))

(provide 'starter-kit)
;;; starter-kit.el ends here
Если я правильно понимаю, то тут конфиги пользователя должны загружаться в последнюю очередь. Я заменил файл из пакета файлом с гитхаба, но проблема осталась - функция, которая нормально вызывается через М-х после загрузки имакса, не хочет запускаться из username.el, пишет что она не определена. Скажите, это я что то делаю не так, или это действительно баг?

★★

package-initialize где вызывается? До или после подгрузки username.el?

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

Хрен его знает, смотря что он делает. Если это функция, которая собственно загружает установленные пакеты, то да. Потому что загрузка username.el вызывается установленным пакетом emacs-starter-kit.

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

Ну так попробуй добавить после:

(require 'package)
(package-initialize)

У меня это в ~/.emacs.d/init.el, который я гружу сразу после .emacs (в котором кроме load'а и настроек внешнего вида ничего нету).

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

Мой init.el -

(require 'package)
(add-to-list 'package-archives
             '("marmalade" . "http://marmalade-repo.org/packages/") t)
(add-to-list 'package-archives '("sunrise" . "http://joseito.republika.pl/sunrise-commander/"))
(package-initialize)
(when (not package-archive-contents)
  (package-refresh-contents))

;; Add in your own as you wish:
(defvar my-packages '(starter-kit org)
  "A list of packages to ensure are installed at launch.")

(dolist (p my-packages)
  (when (not (package-installed-p p))
    (package-install p)))
У меня вначале грузится init.el, из него загружаются пакеты, и из одного из пакетов загружается тот самый пользовательский конфиг. Но он загружается до того, как загрузятся все установленные пакеты. А в одном из пакетов лежит цветовая схема, из за которой я и начал с проблемой разбираться. То есть я не могу поставить эту схему из своего конфига.

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

Ам... цветовая схема... в 24 они мышкой через интерфейс ставятся + из реп дополнительные. А прописываются в ~/.emacs.

Старый color-themes вообще как-то плохо с 24 уживался у меня.

P.S. Я думаю тебе придётся кого-то ещё ждать, т.к. лично я не юзаю starter-kit, а от color-themes отказался при переходе на 24й emacs.

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

Ну единственное что можешь попробовать:

(setq package-archives '(("melpa" . "http://melpa.milkbox.net/packages/")))

и поставить стартеркит оттуда.
мармаладе какой-то ходячий труп.
Но чесно говоря это не удивительно. Как-то плохо сочитаются все эти стартеркиты с пакетной системой, имхо, т.к. там наверное, ещё не продуманы механизмы порядковой загрузки по зависимостям.

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

Спасибо, пакет с мельпы работает как надо. А вообще - есть смысл использовать мармелад, или его вообще можно из списков репозиториев убрать?

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

есть смысл использовать мармелад, или его вообще можно из списков репозиториев убрать?

пока мелпа работает — нету. Лучше закомментируй пока.

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