You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
oh-my-fish/themes/budspencer/fish_right_prompt.fish

246 lines
7.5 KiB
Fish

# TODO: color definitions cleanup
# Init colors
set fcol_black (set_color 000000)
set fcol_base03 (set_color -o 002b36)
set fcol_base02 (set_color -o 073642)
set fcol_base01 (set_color -o 586e75)
set fcol_base00 (set_color -o 657b83)
set fcol_base0 (set_color -o 839496)
set fcol_base1 (set_color -o 93a1a1)
set fcol_base2 (set_color -o eee8d5)
set fcol_base3 (set_color -o fdf6e3)
set fcol_yellow (set_color -o b58900)
set fcol_orange (set_color -o cb4b16)
set fcol_red (set_color -o red)
set fcol_magenta (set_color -o d33682)
set fcol_violet (set_color -o 6c71c4)
set fcol_blue (set_color -o 268bd2)
set fcol_blue (set_color -o 268bd2)
set fcol_cyan (set_color -o 2aa198)
set fcol_green (set_color -o 859900)
set bcol_base03 (set_color -b 002b36)
set bcol_base02 (set_color -b 073642)
set bcol_base01 (set_color -b 586e75)
set bcol_base00 (set_color -b 657b83)
set bcol_base0 (set_color -b 839496)
set bcol_base1 (set_color -b 93a1a1)
set bcol_base2 (set_color -b eee8d5)
set bcol_base3 (set_color -b fdf6e3)
set bcol_yellow (set_color -b b58900)
set bcol_orange (set_color -b cb4b16)
set bcol_red (set_color -b dc322f)
set bcol_magenta (set_color -b d33682)
set bcol_violet (set_color -b 6c71c4)
set bcol_blue (set_color -b 268bd2)
set bcol_cyan (set_color -b 2aa198)
set bcol_green (set_color -b 859900)
function __budspencer_is_git_ahead_or_behind -d "Check if there are unpulled or unpushed commits"
echo (command git rev-list --count --left-right "HEAD...@{upstream}" ^/dev/null | sed 's/[[:space:]+]/\\x1e/g')
end
function __budspencer_git_status -d "Check git status"
set -l added 0
set -l deleted 0
set -l modified 0
set -l renamed 0
set -l unmerged 0
set -l untracked 0
set -l git_status (command git status --porcelain ^/dev/null)
for i in (seq 1 (count $git_status))
echo $git_status[$i] | egrep "^[ACDMT][\ MT]\ |^[ACMT]D\ " > /dev/null; and set added (math $added+1)
echo $git_status[$i] | egrep "^[\ ACMRT]D\ " > /dev/null; and set deleted (math $deleted+1)
echo $git_status[$i] | egrep "^.[MT]\ " > /dev/null; and set modified (math $modified+1)
echo $git_status[$i] | egrep "^R.\ " > /dev/null; and set renamed (math $renamed+1)
echo $git_status[$i] | egrep "^AA\ |^DD\ |^U.\ |^.U\ " > /dev/null; and set unmerged (math $unmerged+1)
echo $git_status[$i] | egrep "^\?\?\ " > /dev/null; and set untracked (math $untracked+1)
end
printf '%s\x1e%s\x1e%s\x1e%s\x1e%s\x1e%s' $added $deleted $modified $renamed $unmerged $untracked
end
function __budspencer_is_git_stashed -d "Check if there are stashed commits"
echo (command git stash list ^/dev/null | wc -l | awk '{print $1}')
end
set git_style "symbols"
function fish_git_toggle_cm --description "Toggles style of git segment, press ,, in NORMAL mode"
if test $git_style = "symbols"
set git_style "counts"
else
set git_style "symbols"
end
commandline -f repaint
end
bind -M default ',,' fish_git_toggle_cm
if set -q -x $PWDSTYLE
set -x PWDSTYLE short long none
end
set pwd_style $PWDSTYLE[1]
function fish_pwd_toggle_cm --description "Toggles style of pwd segment, press space bar in NORMAL mode"
for i in (seq 1 (count $PWDSTYLE))
if test $PWDSTYLE[$i] = $pwd_style
set pwd_style $PWDSTYLE[(math $i%(count $PWDSTYLE)+1)]
commandline -f repaint
break
end
end
end
bind -M default ' ' fish_pwd_toggle_cm
function fish_cmd_duration_cm -d "Displays the elapsed time of last command"
if test (count $CMD_DURATION) -gt 0
set -l duration (echo $CMD_DURATION | tr -d '[[:space:]]' | sed 's|\.[[:digit:]]*||')
if test $last_status -ne 0
echo -n $fcol_base02""$bcol_base02$fcol_red" "$duration
else
echo -n $fcol_base02""$bcol_base02$fcol_green" "$duration
end
end
end
function fish_git_prompt_cm --description "Displays the git symbols"
set -l git_prompt ""
set -l is_repo (command git rev-parse --is-inside-work-tree ^/dev/null)
if test $is_repo="true"
set -l git_ahead_behind (__budspencer_is_git_ahead_or_behind)
if test $git_ahead_behind[1] -gt 0
if test $git_style = "symbols"
set git_prompt $fcol_yellow" ↑"
else
set git_prompt $fcol_yellow" "$git_ahead_behind[1]
end
end
if test $git_ahead_behind[2] -gt 0
if test $git_style = "symbols"
set git_prompt $git_prompt$fcol_yellow" ↓"
else
set git_prompt $git_prompt$fcol_yellow" "$git_ahead_behind[2]
end
end
set -l git_status (__budspencer_git_status)
if test $git_status[1] -gt 0
if test $git_style = "symbols"
set git_prompt $git_prompt$fcol_green" +"
else
set git_prompt $git_prompt$fcol_green" "$git_status[1]
end
end
if test $git_status[2] -gt 0
if test $git_style = "symbols"
set git_prompt $git_prompt$fcol_red" "
else
set git_prompt $git_prompt$fcol_red" "$git_status[2]
end
end
if test $git_status[3] -gt 0
if test $git_style = "symbols"
set git_prompt $git_prompt$fcol_blue" ✱"
else
set git_prompt $git_prompt$fcol_blue" "$git_status[3]
end
end
if test $git_status[4] -gt 0
if test $git_style = "symbols"
set git_prompt $git_prompt$fcol_magenta" →"
else
set git_prompt $git_prompt$fcol_magenta" "$git_status[4]
end
end
if test $git_status[5] -gt 0
if test $git_style = "symbols"
set git_prompt $git_prompt$fcol_violet" ═"
else
set git_prompt $git_prompt$fcol_violet" "$git_status[5]
end
end
if test $git_status[6] -gt 0
if test $git_style = "symbols"
set git_prompt $git_prompt$fcol_base3" ●"
else
set git_prompt $git_prompt$fcol_base3" "$git_status[6]
end
end
set -l git_stashed (__budspencer_is_git_stashed)
if test git_stashed -gt 0
if test $git_style = "symbols"
set git_prompt $git_prompt$fcol_cyan" ✭"
else
set git_prompt $git_prompt$fcol_cyan" "$git_stashed
end
end
echo $git_prompt
end
end
function fish_pwd_prompt_cm --description "Displays the present working directory"
set -l user_host " "
if test (count $SSH_CLIENT) -gt 0
set user_host " "$USER"@"(hostname)
if test $pwd_style != "none"
set user_host $user_host":"
end
end
switch $fish_bind_mode
case default
set_color blue
echo -n ""
set_color normal
set_color --background blue 000
case insert
set_color yellow
echo -n ""
set_color normal
set_color --background yellow 000
case visual
set_color magenta
echo -n ""
set_color normal
set_color --background magenta 000
end
switch $pwd_style
case none
echo -n $user_host' '
case short
echo -n $user_host(prompt_pwd)' '
case long
echo -n $user_host$PWD' ' # | sed "s|$HOME|~|"
end
set_color normal
end
function fish_right_prompt -d "Write out the right prompt of the budspencer theme"
# Segments
# command duration
set ps_duration (fish_cmd_duration_cm)
# git
set ps_git (fish_git_prompt_cm)
if test -n "$ps_git"
set ps_git $fcol_base01""$bcol_base01""$ps_git
end
# pwd
set -l ps_pwd ""
if test "$fish_key_bindings" = "fish_vi_key_bindings" -o "$fish_key_bindings" = "my_fish_key_bindings"
set ps_pwd (fish_pwd_prompt_cm)
end
echo -n $ps_duration $ps_git $ps_pwd
set_color normal
end