2013-06-22 4 views
5

Ho diversi file .el nel mio directory "~/.emacs.d" e ho aggiunto le seguenti righe al mio file .emacs per caricarli all'avvio:Si tratta di uno stile lisc proprio di Emacs (24.3.2) per caricare i file .el dell'utente da .emacs?

(let ((base "~/.emacs.d/") 
     (files '("user.el" "erlang.el" "sbcl-slime.el")) 
     (bfload (lambda (file) (load (expand-file-name (concat base file)))))) 
    (mapcar bfload files)) 

Funziona, ma è questo il corretto Stile Emacs Lisp? Come può essere migliorato, per favore?

+3

Normalmente li aggiungeresti a 'load-path' e quindi' require' (questo implica che il file che stai caricando' fornisce's qualcosa.) Alcuni preferiscono non richiedere i file fino a quando non verrà caricata la modalità corrispondente : [Ulteriori informazioni] (http://stackoverflow.com/questions/6935908/emacs- best-practice-for-lazy-loading-modes-in-emacs). –

+0

@wvxvw In realtà quei file '* .el' sono solo wrapper per _providers_ (solo impostando i percorsi corretti per loro) e io non volevo ingombrare il file' .emacs'. –

risposta

12

Innanzitutto, non mettere i file .el direttamente in ~/.emacs.d (Emacs inserisce diversi file e non è previsto che siano pacchetti Elisp). Ad esempio, puoi inserirli in ~/.emacs.d/pkgs.

Come 'bout:

(dolist (file '("user.el" "erlang.el" "sbcl-slime.el")) 
    (load (expand-file-name file "~/.emacs.d/pkgs")) 
+0

Mi piace molto questo cambiamento, ma ho aggiunto anche un piccolo controllo ... –

2

È possibile combinare eccellenti suggerimenti di Stefan di spostare i file in una directory separata con init-loader https://github.com/emacs-jp/init-loader

si avrà un paio di vantaggi aggiuntivi (auto byte- compilando i file) e non sarà necessario mantenere l'elenco dei file (basta spostare/creare un file in quella directory).

+0

Il 'init-loader' è un progetto molto interessante, ma solo un po 'gonfiato da ciò che avevo in mente. Ma grazie per il puntatore! –

1

Sulla base l'esempio di Stefan, aggiungo solo file-exists-p:

(dolist (file '("user.el" "erlang.el" "sbcl-slime.el")) 
    (let ((f (expand-file-name file "~/.emacs.d/pkgs"))) 
    (if (file-exists-p f) 
     (load f)))) 

penso, questa è la versione userò.

+2

'file-exists-p' è una buona idea. Si potrebbe anche usare l'argomento 'noerror' di' load' per ottenere lo stesso risultato. – Stefan