Загрузка пакетов, установленных через "package.el" в Emacs24

Возможный дубликат:
Проблемы с инициализацией пакета Emacs 24

Я использую Emacs 24. У меня добавлены репозитории ELPA и Marmalade. Используя "пакет", я установил "автозаполнение". У меня есть следующие строки, добавленные в мой init.el:

(require 'auto-complete-config)
(ac-config-default)

Когда я запускаю Emacs, я получаю сообщение об ошибке

Ошибка файла: невозможно открыть файл загрузки, автозаполнение-config

Но затем я использую

M-x load-file

и загрузите один и тот же файл ~/.emacs.d/init.el, он отлично работает с подсказкой, говоря

Загрузка/home/user/.emacs.d/init.el(источник)... done

Как обычная загрузка отличается от команды "M-x load-file"? В начале файла init.el я делаю следующее: это как-то влияет на загрузку пакета.

(add-to-list 'load-path "~/.emacs.d" )
(загрузить" custom_code")

Ответ 1

Как уже упоминалось в комментарии ниже: ответ phils на повторяющийся вопрос, вероятно, более полезен, чем этот

Это почти наверняка означает, что ваш файл init.el запускается перед кодом, который сортирует пакеты для package.el. Последний код добавляет каталог с автозаполняемой библиотекой к вашему пути загрузки.

Я все еще использую ELPA, а не package.el. С elpa есть фрагмент, который выглядит так, который устанавливается в нижней части вашего .emacs.

;;; This was installed by package-install.el.
;;; This provides support for the package system and
;;; interfacing with ELPA, the package archive.
;;; Move this code earlier if you want to reference
;;; packages in your .emacs.
(when
    (load
     (expand-file-name "~/.emacs.d/elpa/package.el"))
  (package-initialize))

Как следует из комментария, вы, вероятно, захотите поместить свой эквивалентный package.el код инициализации перед материалом, который загружает init.el.

Наконец: я замечаю, что вы добавили .emacs.d к вашему load-path. Путь загрузки Emacs не рекурсивный, поэтому, вероятно, он не будет делать то, что вам нужно (при условии, что ваши библиотеки живут в подкаталогах). Несколько лет назад я написал этот фрагмент, чтобы загрузить различные библиотеки кода elisp, которые я написал. Вы можете найти это полезным. (Очевидно, что он будет работать только на unixy-системах с командной оболочкой и командой find. Он достаточно медленный, но это, кажется, shell-command-to-string, который занимает несколько миллисекунд даже при запуске "echo hello" и т.п.)

(defun find-elisp-dirs (dir)
  "Find all directories below DIR containing elisp sources, ignoring those"
  (split-string
   (shell-command-to-string
    (format "find %s -iname '*.el' -printf '%%h\\n' | sort -u"
            (expand-file-name dir t)))))