144 lines
4.5 KiB
Fish
144 lines
4.5 KiB
Fish
# This file is modified from:
|
|
# https://github.com/tyler-stefani/starship/blob/main/conf.d/starship.fish
|
|
# The MIT License can be found here:
|
|
# https://github.com/tyler-stefani/starship/blob/main/LICENSE
|
|
|
|
status is-interactive
|
|
or exit 0
|
|
|
|
# set temp file and signal for async prompts
|
|
if test -n "$XDG_RUNTIME_DIR"
|
|
set -g starship_temp_dir "$XDG_RUNTIME_DIR"/fish-async-prompt
|
|
else
|
|
set -g starship_temp_dir /tmp/fish-async-prompt
|
|
end
|
|
mkdir -p "$starship_temp_dir"
|
|
set -g starship_temp_file "$starship_temp_dir"/"$fish_pid"_last_prompt
|
|
set -g starship_async_signal SIGUSR1
|
|
|
|
function fish_prompt
|
|
if test "$TRANSIENT" = "1"
|
|
starship_transient_prompt_func
|
|
else if test -e $starship_temp_file
|
|
cat $starship_temp_file
|
|
else
|
|
starship_transient_prompt_func
|
|
end
|
|
end
|
|
|
|
function starship_transient_prompt_func
|
|
# Clear from cursor to end of screen as `commandline -f repaint` does not do this
|
|
# See https://github.com/fish-shell/fish-shell/issues/8418
|
|
printf \e\[0J
|
|
starship module character
|
|
end
|
|
|
|
|
|
function fish_right_prompt
|
|
switch "$fish_key_bindings"
|
|
case fish_hybrid_key_bindings fish_vi_key_bindings
|
|
set STARSHIP_KEYMAP "$fish_bind_mode"
|
|
case '*'
|
|
set STARSHIP_KEYMAP insert
|
|
end
|
|
set STARSHIP_CMD_PIPESTATUS $pipestatus
|
|
set STARSHIP_CMD_STATUS $status
|
|
# Account for changes in variable name between v2.7 and v3.0
|
|
set STARSHIP_DURATION "$CMD_DURATION$cmd_duration"
|
|
set STARSHIP_JOBS (count (jobs -p))
|
|
if test "$TRANSIENT" = "1"
|
|
if type -q starship_transient_rprompt_func
|
|
starship_transient_rprompt_func
|
|
else
|
|
printf ""
|
|
end
|
|
else
|
|
starship prompt --right --terminal-width="$COLUMNS" --status=$STARSHIP_CMD_STATUS --pipestatus="$STARSHIP_CMD_PIPESTATUS" --keymap=$STARSHIP_KEYMAP --cmd-duration=$STARSHIP_DURATION --jobs=$STARSHIP_JOBS
|
|
end
|
|
end
|
|
|
|
# Disable virtualenv prompt, it breaks starship
|
|
set -g VIRTUAL_ENV_DISABLE_PROMPT 1
|
|
|
|
# Remove default mode prompt
|
|
builtin functions -e fish_mode_prompt
|
|
|
|
set -gx STARSHIP_SHELL fish
|
|
|
|
# Transience related functions
|
|
function reset-transient --on-event fish_postexec
|
|
set -g TRANSIENT 0
|
|
end
|
|
|
|
function transient_execute
|
|
if commandline --is-valid
|
|
set -g TRANSIENT 1
|
|
commandline -f repaint
|
|
else
|
|
set -g TRANSIENT 0
|
|
end
|
|
commandline -f execute
|
|
end
|
|
|
|
function transient_cancel
|
|
if string length -q -- (commandline)
|
|
set -g TRANSIENT 1
|
|
commandline -f repaint
|
|
end
|
|
commandline -f cancel-commandline
|
|
end
|
|
|
|
# --user is the default, but listed anyway to make it explicit.
|
|
function enable_transience --description 'enable transient prompt keybindings'
|
|
bind --user \r transient_execute
|
|
bind --user -M insert \r transient_execute
|
|
bind --user \cc transient_cancel
|
|
end
|
|
|
|
# Erase the transient prompt related key bindings.
|
|
# --user is the default, but listed anyway to make it explicit.
|
|
# Erasing a user binding will revert to the preset.
|
|
function disable_transience --description 'remove transient prompt keybindings'
|
|
bind --user -e \r
|
|
bind --user -M insert -e \r
|
|
bind --user -e \cc
|
|
end
|
|
|
|
# Set up the session key that will be used to store logs
|
|
# We don't use `random [min] [max]` because it is unavailable in older versions of fish shell
|
|
set -gx STARSHIP_SESSION_KEY (string sub -s1 -l16 (random)(random)(random)(random)(random)0000000000000000)
|
|
|
|
# async related functions
|
|
function write_prompt_to_temp --on-event fish_prompt
|
|
switch "$fish_key_bindings"
|
|
case fish_hybrid_key_bindings fish_vi_key_bindings
|
|
set STARSHIP_KEYMAP "$fish_bind_mode"
|
|
case '*'
|
|
set STARSHIP_KEYMAP insert
|
|
end
|
|
set STARSHIP_CMD_PIPESTATUS $pipestatus
|
|
set STARSHIP_CMD_STATUS $status
|
|
# Account for changes in variable name between v2.7 and v3.0
|
|
set STARSHIP_DURATION "$CMD_DURATION$cmd_duration"
|
|
set STARSHIP_JOBS (count (jobs -p))
|
|
|
|
# MODIFIED: '"$STARSHIP_CMD_PIPESTATUS"' -> '$STARSHIP_CMD_PIPESTATUS'
|
|
fish -c 'starship prompt \
|
|
--terminal-width='"$COLUMNS"' \
|
|
--status='$STARSHIP_CMD_STATUS' \
|
|
--pipestatus='$STARSHIP_CMD_PIPESTATUS' \
|
|
--keymap='$STARSHIP_KEYMAP' \
|
|
--cmd-duration='$STARSHIP_DURATION' \
|
|
--jobs='$STARSHIP_JOBS' > '$starship_temp_file' \
|
|
&& kill -s '"$starship_async_signal"' '"$fish_pid"'' &
|
|
disown
|
|
end
|
|
|
|
function repaint_prompt_on_signal --on-signal "$starship_async_signal"
|
|
commandline -f repaint
|
|
end
|
|
|
|
function remove_temp_prompt_on_exit --on-event fish_exit
|
|
rm -f $starship_temp_file
|
|
end
|