2010-05-12 23 views
16

Je travaille sur un fichier .emacs personnalisé que je serai capable d'utiliser sur plusieurs ordinateurs différents. Je voudrais pouvoir charger un mode s'il existe sur le système. Si ce n'est pas le cas, j'aimerais qu'Emacs arrête de montrer l'erreur: File error: Cannot open load file, X.En Lisp, Evitez "Impossible d'ouvrir le fichier de chargement" lors de l'utilisation besoin

Par exemple:

(require 'darkroom-mode) 

Résultats dans:

File error: Cannot open load file, darkroom-mode 

J'utilise file-exists-p pour tester si certains autres fichiers existent, mais pour ce test, je suppose que je dois chercher ma load-path . Je suis nouveau à Lisp alors ça me bouscule.

+3

Ou, juste '(ignore-errors (require 'peu importe)) '. – jrockway

Répondre

25

Si vous voulez juste garder require d'émettre une erreur, vous pouvez faire:

; third arg non-nil means to not signal an error if file not found 
; a symbol provides documentation at the invocation (and is non-nil) 
(require 'darkroom-mode nil 'noerror) 

De la documentation (Ch f exigent RET):

require is a built-in function in `C source code'. 

(require feature &optional filename noerror) 

If feature feature is not loaded, load it from filename. 
If feature is not a member of the list `features', then the feature 
is not loaded; so load the file filename. 
If filename is omitted, the printname of feature is used as the file name, 
and `load' will try to load this name appended with the suffix `.elc' or 
`.el', in that order. The name without appended suffix will not be used. 
If the optional third argument noerror is non-nil, 
then return nil if the file is not found instead of signaling an error.