Ответ 1
Поместите (package-initialize)
перед любыми вызовами на org-babel-load-file
или с любой другой функцией Org, и вы получите версию ELPA.
Я экспериментировал с учебником org-babel, в котором описывается, как поместить основную часть вашего файла init.el emacs в файл org. Тем не менее, я хотел бы использовать org-mode 8 (главным образом для нового экспортера), и я на gnu emacs 24.3.1 (для Windows), который поставляется с org-mode 7.9, поэтому у меня установлен режим org из менеджера пакетов elpa вместо использования встроенной версии.
Моя проблема в том, что emacs загружает org-mode, который поставляется с emacs, а не тот, который я установил в elpa. Есть ли способ загрузить org-mode elpa?
Вот мой init.el, измененный из учебника org-babel, чтобы указать (я думал) на мой дистрибутив в режиме org-mode, но мои знания emacs- lisp минимальны, поэтому я действительно не знаю, что это такое делает.
;;; From http://orgmode.org/worg/org-contrib/babel/intro.html#literate-programming
;;; init.el --- Where all the magic begins
;;
;; This file loads Org-mode and then loads the rest of our Emacs initialization from Emacs lisp
;; embedded in literate Org-mode files.
;; Load up Org Mode and (now included) Org Babel for elisp embedded in Org Mode files
(setq dotfiles-dir (file-name-directory (or (buffer-file-name) load-file-name)))
(let* ((org-dir (expand-file-name
"elpa" (expand-file-name
"org-plus-contrib-20130624" )))
(org-contrib-dir (expand-file-name
"lisp" (expand-file-name
"contrib" (expand-file-name
".." org-dir))))
(load-path (append (list org-dir org-contrib-dir)
(or load-path nil))))
;; load up Org-mode and Org-babel
(require 'org-install)
(require 'ob-tangle))
;; load up all literate org-mode files in this directory
(mapc #'org-babel-load-file (directory-files dotfiles-dir t "\\.org$"))
;;; init.el ends here
Поместите (package-initialize)
перед любыми вызовами на org-babel-load-file
или с любой другой функцией Org, и вы получите версию ELPA.
Я использую такую же инициализацию и недавно сделал два основных изменения:
Вот как выглядит мой init.el,
https://github.com/d4gg4d/my-emacs/blob/master/init.el
Кроме того,
Я также настраиваю репозитории пакетов в файле конфигурации на основе org, поэтому, чтобы настроить путь загрузки, у меня есть это в моем init.el перед загрузкой org:
;; remove org-mode shipped with emacs from the load-path
(setq custom-org-path (car (file-expand-wildcards
(concat my-init-dir "elpa/org-plus-contrib-20*"))))
(when custom-org-path
(setq load-path (remove-if (lambda (x) (string-match-p "org$" x)) load-path))
(add-to-list 'load-path custom-org-path))
Хотя я уже решил и только несколько связал, я думал, что предлагаю это для тех, кто не использует пакетные решения, но должен выгружать такие вещи, как org и cedet/semantic, и т.д. без перезапуска emacs.
В общем случае для разгрузки набора функций, основанных на начальном имени regexp, я бы сделал что-то вроде этого - что кажется более полным, чем жестко запрограммированная версия ответа Андреаса, которая, похоже, не охватывает все загруженные функции org ( по крайней мере, в моем случае).
load-history
- массивный список файлов → reqs, обеспечивает, defuns,...
(mapc
#'(lambda (f) (and (featurep f) (unload-feature f t)))
(loop for file-syms in load-history
for prov = (assoc 'provide file-syms)
with features
if (and prov (string-match "^org" (symbol-name (cdr prov))))
collect (cdr prov) into features
finally return features))
Замените regexp "^org"
в соответствии с вашими потребностями или умрите и сделайте его defun.
Это также можно изменить, чтобы захватить все загруженные компоненты org из load-history
, выгрузить их, добавить новый путь загрузки и перезагрузить те же самые функции из нового местоположения.
Разгруженный отправленный org-mode и установленная версия разработки таким образом
(defun unload-org-mode ()
(interactive)
(and (featurep 'org-agenda)(unload-feature 'org-agenda t ))
(and (featurep 'org-bbdb)(unload-feature 'org-bbdb t ))
(and (featurep 'org-bibtex)(unload-feature 'org-bibtex t ))
(and (featurep 'org-compat)(unload-feature 'org-compat t ))
(and (featurep 'org-exp)(unload-feature 'org-exp t ))
(and (featurep 'org-exp-blocks)(unload-feature 'org-exp-blocks t ))
(and (featurep 'org-faces)(unload-feature 'org-faces t ))
(and (featurep 'org-footnote)(unload-feature 'org-footnote t ))
(and (featurep 'org-gnus)(unload-feature 'org-gnus t ))
(and (featurep 'org-html)(unload-feature 'org-html t ))
(and (featurep 'org-info)(unload-feature 'org-info t ))
(and (featurep 'org-infojs)(unload-feature 'org-infojs t ))
(and (featurep 'org-irc)(unload-feature 'org-irc t ))
(and (featurep 'org-jsinfo)(unload-feature 'org-jsinfo t ))
(and (featurep 'org-list)(unload-feature 'org-list t ))
(and (featurep 'org-macs)(unload-feature 'org-macs t ))
(and (featurep 'org-mew)(unload-feature 'org-mew t ))
(and (featurep 'org-mhe)(unload-feature 'org-mhe t ))
(and (featurep 'org-rmail)(unload-feature 'org-rmail t ))
(and (featurep 'org-src)(unload-feature 'org-src t ))
(and (featurep 'org-vm)(unload-feature 'org-vm t))
(and (featurep 'org-w3m)(unload-feature 'org-w3m t))
(and (featurep 'org-wl)(unload-feature 'org-wl t )))
(defun ar-load-PATH-TO-NEW-org-mode ()
(interactive)
(unload-org-mode)
(find-file "~/PATH-TO-NEW-org-mode/lisp/ob-python.el")
(add-to-list 'load-path "~/PATH-TO-NEW-org-mode")
(add-to-list 'load-path "~/PATH-TO-NEW-org-mode/lisp")
(load "~/PATH-TO-NEW-org-mode/lisp/ob-comint.el" nil t)
(load "~/PATH-TO-NEW-org-mode/lisp/ob-emacs-lisp.el" nil t)
(load "~/PATH-TO-NEW-org-mode/lisp/org.el" nil t)
(load "~/PATH-TO-NEW-org-mode/lisp/ob-eval.el" nil t)
(load "~/PATH-TO-NEW-org-mode/lisp/ob.el" nil t)
(load "~/PATH-TO-NEW-org-mode/lisp/ob-python.el")
;; (load "~/PATH-TO-NEW-org-mode/testing/org-test-ob-consts.el" nil t)
;; (load "~/PATH-TO-NEW-org-mode/testing/org-test.el" nil t)
(load-this-directory "~/PATH-TO-NEW-org-mode/lisp")
(org-babel-do-load-languages
'org-babel-load-languages
'(
(sh . t)
(python . t)
(emacs-lisp . t)
(perl . t)
(R . t)
))
)
(ar-load-PATH-TO-NEW-org-mode)
Замените PATH-TO-NEW-org-mode
каталогом, в котором находится ваша версия.