8
votes

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?

3
Incidentally, you might consider reorganizing your code: instead of a ~/.emacs, Emacs will automatically find and load ~/.emacs.d/init.el, so you can put all your elisp inside ~/.emacs.d. - sanityinc
@sanityinc : It's different from my understanding. Could you check <a href="stackoverflow.com/questions/3349172/…>? - prosseek
Yes, it's different, but I'm not sure in which way you mean. Here's my config (with no ~/.emacs), in case it helps: github.com/purcell/emacs.d - sanityinc

3 Answers

16
votes

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

3
votes

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

(provide 'hello)

1
votes

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