help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Why is TAB-completion in shell not working for some commands?


From: Marius Hofert
Subject: Re: Why is TAB-completion in shell not working for some commands?
Date: Wed, 9 Nov 2011 18:28:23 +0100

> This rang a bell for me. When launching anything from the Finder the
> PATH is not set correctly (since the Finder is not itself run from
> your shell). I am a bit fuzzy now on the details of how `exec-path',
> the PATH variable and tab-completion in shell-mode interact, but I
> would suggest putting something in your .emacs or init.el file that
> (1) sets the emacs variable `exec-path' to the sequence of directories
> you expect to find in PATH, and (2) sets the environment variable PATH
> based on that. Here's what I have, just as an example:
> 
> ;; Exec-path and env variable
> (setq exec-path
>      (append '("/opt/local/bin" "/opt/local/sbin" "/opt/local/libexec/gnubin/"
>               "/usr/local/mysql/bin/" "/usr/local/share/rhino" "~/bin")
>             exec-path
>             '("/Applications/LilyPond.app/Contents/Resources/bin/"
>               "/Applications/Racket v5.1.3/bin/")))
> 
> (setenv "PATH" (mapconcat 'identity exec-path ":"))

I just tried out something:

1) If I start emacs from the terminal, TAB-completion works (as reported 
earlier). Now the emacs I start from the terminal is actally (output of "which 
emacs"):
/Applications/Emacs.app/Contents/MacOS//emacs
and not the /Applications/Emacs.app (the GUI version one clicks on in the 
dock). So when I started emacs from the terminal, I used Options -> Keep in 
Dock to keep that in the dock instead of /Applications/Emacs.app. Starting the 
former, I again did not have TAB-completion, so it only works when (really) 
starting emacs from the terminal (which is funny cause I thought I can get rid 
of the Mac's terminal since I have a shell in emacs...)
Don't know if that makes sense to the experts, I just wanted to report on this.

2)  Jonathan, your hint led me to a search which brought up this: 
http://stackoverflow.com/questions/930439/using-git-with-emacs
So that seems to be related to the fact that emacs started from the dock does 
not get the same initialization as emacs started from the terminal (the latter 
having environment variables set up correctly). The only thing I'm wondering 
about is, if I set up the path to a2ps in .emacs and it finally works, what 
about all other not TAB-completed commands? What is a *general* solution to 
this problem (not depending on adding specific paths)? The bottom line is: I 
want to have exactly the same behavior for the emacs started from the dock as 
from the one started from the terminal.

3) There's a hint on the bottom of the above linked page. I executed C-h v 
exec-path and obtained:
exec-path is a variable defined in `C source code'.
Its value is
("/usr/bin" "/bin" "/usr/sbin" "/sbin" "/usr/local/bin" "/usr/X11/bin" 
"/usr/texbin" "/Applications/Emacs.app/Contents/MacOS/bin")

Original value was 
("/usr/bin" "/bin" "/usr/sbin" "/sbin" "/usr/local/bin" "/usr/X11/bin" 
"/Users/david/src/emacs-dev/ftp-versions/emacs-24.0.91/lib-src" 
"/Users/david/src/emacs-dev/ftp-versions/emacs-24.0.91/nextstep/Emacs.app/Contents/MacOS//libexec/emacs/24.0.91/x86_64-apple-darwin")


  This variable is potentially risky when used as a file local variable.

Documentation:
*List of directories to search programs to run in subprocesses.
Each element is a string (directory name) or nil (try default directory).

You can customize this variable.

=> Clearly, the /opt-directories are missing. I haven't tried but one might 
just add all directories from PATH to exec-path, but whenever I change PATH, I 
have to remember to do the same for exec-path. Is there a nicer way?

Cheers,

Marius





reply via email to

[Prev in Thread] Current Thread [Next in Thread]