2013-07-02 9 views
11

Ho sperimentato con lo org-babel tutorial che descrive come inserire la maggior parte del file init.el emacs in un file org. Comunque, mi piacerebbe usare org-mode 8 (principalmente per il nuovo esportatore) e sono su gnu emacs 24.3.1 (per Windows) che viene fornito con org-mode 7.9 built-in, quindi ho installato org-mode dal elpa package manager invece di utilizzare la versione integrata.Inizializzazione di Emacs come file org: come posso ottenere la versione corretta di org-mode?

Il mio problema è che emacs carica la modalità org fornita con emacs piuttosto che quella che ho installato in elpa. C'è un modo per caricare la modalità org di elpa?

Ecco il mio init.el, modificato dal tutorial org-babel per indicare (ho pensato) alla mia distribuzione in modalità org - ma la mia conoscenza di emacs-lisp è minima, quindi non so davvero cosa stia facendo .

;;; 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 

risposta

8

Inserire (package-initialize) prima di qualsiasi chiamata a org-babel-load-file o qualsiasi altra funzione Org e si otterrà la versione ELPA.

+1

In realtà devi assicurarti che '(package-initialize)' venga prima di ogni chiamata a qualsiasi funzione 'Org' con autoloads. Probabilmente è "org-babel-load-file" ma non è garantito. –

+0

Questo ha funzionato a meraviglia. Ho messo (package-initialize) all'inizio del mio init.el e org-mode 8 è stato caricato. –

+0

@ JonathanLeech-Pipino: buon punto, aggiornato. – legoscia

1

Scarico org-mode spediti e la versione di sviluppo installato questo modo

(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) 

Sostituire PATH-TO-NEW-org-mode con la directory tua versione era interessata risiede.

2

a configurare repository di pacchetti in un file di configurazione org-base e, quindi, per regolare il percorso di carico I avere questo nel mio init.el prima del caricamento 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)) 
2

Anche se già risolto e solo in qualche modo correlato, ho pensato di offrire questo per coloro che non utilizzano soluzioni basati su pacchetti, ma hanno bisogno di scaricare le cose come org e cedet/semantico, ecc non riavviare Emacs.

In generale per lo scarico di un insieme di funzionalità basate su un nome iniziale regexp, farei qualcosa di simile - che sembra più completo rispetto alla versione codificata della risposta di Andreas, che non sembra coprire tutte le funzioni dell'organizzazione caricate (almeno nel mio caso).

load-history è una massiccia lista assoc di file -> reqs, prevede, 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)) 

Sostituire l'espressione regolare "^org" base alle proprie esigenze, o andare selvatici e ne fanno un defun.

Questo potrebbe anche essere modificato per afferrare tutte le funzioni org caricate da load-history, scaricarle, aggiungere il nuovo percorso di caricamento e ricaricare le stesse funzionalità dalla nuova posizione.

+0

Grazie! Essendo ben consapevole il mio approccio non era così intelligente :) –

+0

Al contrario! Il tuo approccio e risposta è stata la mia finora =) – assem