mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-25 12:23:09 +00:00
Invoke path_helper on macOS on all sessions, not just login
fish reads paths out of /etc/paths.d. Prior toadbaddf
it did this on every shell invocation; withadbaddf
it does so on only login shells. This change wasn't justified so let's revert this behavior.
This commit is contained in:
parent
535617623b
commit
c0f832a743
1 changed files with 35 additions and 33 deletions
|
@ -200,45 +200,47 @@ if not set -q __fish_init_2_3_0
|
|||
set -U __fish_init_2_3_0
|
||||
end
|
||||
|
||||
# macOS-ism: Emulate calling path_helper.
|
||||
if command -sq /usr/libexec/path_helper
|
||||
# Adapt construct_path from the macOS /usr/libexec/path_helper
|
||||
# executable for fish; see
|
||||
# https://opensource.apple.com/source/shell_cmds/shell_cmds-203/path_helper/path_helper.c.auto.html .
|
||||
function __fish_macos_set_env -d "set an environment variable like path_helper does (macOS only)"
|
||||
set -l result
|
||||
|
||||
for path_file in $argv[2] $argv[3]/*
|
||||
if test -f $path_file
|
||||
while read -la entry
|
||||
if not contains $entry $result
|
||||
set result $result $entry
|
||||
end
|
||||
end <$path_file
|
||||
end
|
||||
end
|
||||
|
||||
for entry in $$argv[1]
|
||||
if not contains $entry $result
|
||||
set result $result $entry
|
||||
end
|
||||
end
|
||||
|
||||
set -xg $argv[1] $result
|
||||
end
|
||||
|
||||
__fish_macos_set_env 'PATH' '/etc/paths' '/etc/paths.d'
|
||||
if [ -n "$MANPATH" ]
|
||||
__fish_macos_set_env 'MANPATH' '/etc/manpaths' '/etc/manpaths.d'
|
||||
end
|
||||
functions -e __fish_macos_set_env
|
||||
end
|
||||
|
||||
|
||||
#
|
||||
# Some things should only be done for login terminals
|
||||
# This used to be in etc/config.fish - keep it here to keep the semantics
|
||||
#
|
||||
|
||||
# Adapt construct_path from the macOS /usr/libexec/path_helper
|
||||
# executable for fish; see
|
||||
# https://opensource.apple.com/source/shell_cmds/shell_cmds-203/path_helper/path_helper.c.auto.html .
|
||||
function __fish_macos_set_env -d "set an environment variable like path_helper does (macOS only)"
|
||||
set -l result
|
||||
|
||||
for path_file in $argv[2] $argv[3]/*
|
||||
if test -f $path_file
|
||||
while read -la entry
|
||||
if not contains $entry $result
|
||||
set result $result $entry
|
||||
end
|
||||
end <$path_file
|
||||
end
|
||||
end
|
||||
|
||||
for entry in $$argv[1]
|
||||
if not contains $entry $result
|
||||
set result $result $entry
|
||||
end
|
||||
end
|
||||
|
||||
set -xg $argv[1] $result
|
||||
end
|
||||
|
||||
if status --is-login
|
||||
# macOS-ism: Emulate calling path_helper.
|
||||
if command -sq /usr/libexec/path_helper
|
||||
__fish_macos_set_env 'PATH' '/etc/paths' '/etc/paths.d'
|
||||
if [ -n "$MANPATH" ]
|
||||
__fish_macos_set_env 'MANPATH' '/etc/manpaths' '/etc/manpaths.d'
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Put linux consoles in unicode mode.
|
||||
#
|
||||
|
|
Loading…
Reference in a new issue