[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: |
Jonathan Oddie |
Subject: |
Re: Why is TAB-completion in shell not working for some commands? |
Date: |
Wed, 9 Nov 2011 17:46:46 +0000 |
That took less time than I thought it might. See if this helps you:
(let ((path (shell-command-to-string "echo $PATH")))
(setenv "PATH" path)
(setq exec-path
(append
(split-string-and-unquote path ":")
exec-path)))
(In case you're not used to evaluating bits of Lisp code in Emacs:
paste that into your *scratch* buffer, put point somewhere in the
middle and type C-M-x or M-x eval-defun)
You would have to kill any existing shell-mode buffers and start over
for this to do anything, I think.
Does that fix it?
cheers,
Jonathan
On 9 Nov 2011, at 17:28, Marius Hofert wrote:
>
>> 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
>
>
Re: Why is TAB-completion in shell not working for some commands?,
Jonathan Oddie <=