17

In Emacs, when using clojure-mode, I ought to be able to launch a REPL with C-c C-z. Whenever I try, though, I get the error:

Searching for program: no such file or directory: lein

I have lein installed in /usr/local/bin (via brew) and /usr/local/bin is in my PATH (even Emacs says so, via eval-expression (getenv "PATH")).

What am I missing?

jemmons
  • 18,605
  • 8
  • 55
  • 84
  • A have made a question like yours here: http://stackoverflow.com/questions/13243048/mac-osx-emacs-24-2-and-nrepl-el-not-working. Maybe the answare could help you. ;) – Giuliani Sanches Dec 03 '12 at 13:48

2 Answers2

38

Ah! The PATH environment variable isn't the end-all and be-all of emacs search paths. There's also the "exec-path". It apparently does mostly the same thing but not exactly.

Anyway, adding:

(add-to-list 'exec-path "/usr/local/bin")

To my .emacs.d/init.el (or .emacs if that's how you roll) cleared things up for me. The doc linked above suggests something a little more comprehensive, like:

(setenv "PATH" (concat (getenv "PATH") ":/usr/local/bin"))
(setq exec-path (append exec-path '("/usr/local/bin")))

I'd try the (simpler) add-to-list, first. But YMMV.

jemmons
  • 18,605
  • 8
  • 55
  • 84
1

I had the same problem and started to investigate what was wrong. I soon discovered my exec-path looked like this (simplified example):

("/usr/local/bin /bin /sbin").

It was a list with just one long string instead of a list of separate paths. My env PATH variable looked exactly the same. Obviously the problem was coming from my shell.

I use fish-shell. It's PATH variable separator is just a space. The exec-path-from-shell package I use can't parse it. I fixed it by appending this to my .emacs.d/init.el:

(setq exec-path (split-string (car exec-path)))

Update: In the end it was an outdated exec-path-from-shell package. Use version 1.8. It works well with fish (and tcsh).

Nek
  • 1,909
  • 20
  • 31