mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00

The behavior of some programs (e.g., emacs) differs depending on whether INFOPATH is terminated in a colon or not. For example, the info viewer built into emacs has a default list of places from which it will draw info files, and it will only check this if either (a) INFOPATH is unset, or (b) INFOPATH ends in a colon. Currently brew shellenv prepends to the existing $INFOPATH and will separate with a colon if $INFOPATH already exists, but if it does not it will not terminate in a colon. As a result, info pages (like emacs and elisp) are missing from the info viewer. The existing brew shellenv logic used a parameter expansion trick to include a colon only if it was prepending to an extant INFOPATH, but because we want brew's contribution to the INFOPATH to always end in a colon (whether there's an existing INFOPATH or not), we don't have to use the parameter expansion trick This commit only changes behavior for "other" shells (i.e., not fish, csh, or tcsh) since I don't know how to append a colon to variables in these shells.
36 lines
1.9 KiB
Bash
36 lines
1.9 KiB
Bash
#: * `shellenv`
|
|
#:
|
|
#: Print export statements. When run in a shell, this installation of Homebrew will be added to your `PATH`, `MANPATH`, and `INFOPATH`.
|
|
#:
|
|
#: The variables `HOMEBREW_PREFIX`, `HOMEBREW_CELLAR` and `HOMEBREW_REPOSITORY` are also exported to avoid querying them multiple times.
|
|
#: Consider adding evaluation of this command's output to your dotfiles (e.g. `~/.profile`, `~/.bash_profile`, or `~/.zprofile`) with: `eval $(brew shellenv)`
|
|
|
|
homebrew-shellenv() {
|
|
case "$SHELL" in
|
|
*/fish|fish)
|
|
echo "set -gx HOMEBREW_PREFIX \"$HOMEBREW_PREFIX\";"
|
|
echo "set -gx HOMEBREW_CELLAR \"$HOMEBREW_CELLAR\";"
|
|
echo "set -gx HOMEBREW_REPOSITORY \"$HOMEBREW_REPOSITORY\";"
|
|
echo "set -q PATH; or set PATH ''; set -gx PATH \"$HOMEBREW_PREFIX/bin\" \"$HOMEBREW_PREFIX/sbin\" \$PATH;"
|
|
echo "set -q MANPATH; or set MANPATH ''; set -gx MANPATH \"$HOMEBREW_PREFIX/share/man\" \$MANPATH;"
|
|
echo "set -q INFOPATH; or set INFOPATH ''; set -gx INFOPATH \"$HOMEBREW_PREFIX/share/info\" \$INFOPATH;"
|
|
;;
|
|
*/csh|csh|*/tcsh|tcsh)
|
|
echo "setenv HOMEBREW_PREFIX $HOMEBREW_PREFIX;"
|
|
echo "setenv HOMEBREW_CELLAR $HOMEBREW_CELLAR;"
|
|
echo "setenv HOMEBREW_REPOSITORY $HOMEBREW_REPOSITORY;"
|
|
echo "setenv PATH $HOMEBREW_PREFIX/bin:$HOMEBREW_PREFIX/sbin:\$PATH;"
|
|
echo "setenv MANPATH $HOMEBREW_PREFIX/share/man\`[ \${?MANPATH} == 1 ] && echo \":\${MANPATH}\"\`:;"
|
|
echo "setenv INFOPATH $HOMEBREW_PREFIX/share/info\`[ \${?INFOPATH} == 1 ] && echo \":\${INFOPATH}\"\`;"
|
|
;;
|
|
*)
|
|
echo "export HOMEBREW_PREFIX=\"$HOMEBREW_PREFIX\";"
|
|
echo "export HOMEBREW_CELLAR=\"$HOMEBREW_CELLAR\";"
|
|
echo "export HOMEBREW_REPOSITORY=\"$HOMEBREW_REPOSITORY\";"
|
|
echo "export PATH=\"$HOMEBREW_PREFIX/bin:$HOMEBREW_PREFIX/sbin\${PATH+:\$PATH}\";"
|
|
echo "export MANPATH=\"$HOMEBREW_PREFIX/share/man\${MANPATH+:\$MANPATH}:\";"
|
|
echo "export INFOPATH=\"$HOMEBREW_PREFIX/share/info:\${INFOPATH}\";"
|
|
;;
|
|
esac
|
|
}
|