tags:

views:

95

answers:

3

Let's say I have my own elisp code in ~/bin/hello.el.

The ~/.emacs file has the following code to run hello.el at startup.

(add-to-list 'load-path "~/bin/elisp")
(require 'hello)

But, I get the following error message.

Warning (initialization): An error occurred while loading `/Users/smcho/.emacs':

error: Required feature `hello' was not provided

What's wrong with this?

+7  A: 

Does hello.el provide hello? It should start with (provide 'hello). See the elisp manual. Does (load "hello.el") work?

deinst
(provide 'hello) should be added for the first line of the elisp code. Thanks.
prosseek
@deinst : What's the difference between (require) and (load)?
prosseek
(load) loads the file. (require) loads a feature when it is used. A file can provide more than one feature, but I do not think that the code in the file is evaluated until the feature is used (don't quote me on the exact semantics). Require is essentially saying I'm going to need this, figure out where it is and have it ready if I need it.
deinst
Actually the convention is that (provide 'feature) should be the last line of an Emacs Lisp source file...
Bozhidar Batsov
+1  A: 

You have to put something like that in your LISP code:

(provide 'hello)

Vlad
+1  A: 

If you added ~/bin/elisp to your load-path, then Emacs won't find a file in ~/bin. In this case, Emacs would try to load ~/bin/elisp/hello.el, and if it can't find that, then it will look for a file named hello.elc or hello.el (in that order) in the other parts of your load-path.

Also, as others have mentioned, hello.el needs to have a (provide 'hello) in it (typically at the end).

haxney