From fce4caddb76a2f42520e1dd03395af2749236663 Mon Sep 17 00:00:00 2001 From: Joseph Tannhuber Date: Thu, 21 Aug 2014 19:58:10 +0200 Subject: [PATCH] Budspencer theme improvements - Bookmarks and command/directory history functions implemented - Function to edit commandline with $EDITOR - Faster git parser --- themes/budspencer/README.md | 3 +- themes/budspencer/fish_greeting.fish | 64 +- themes/budspencer/fish_prompt.fish | 994 ++++++++++++----------- themes/budspencer/fish_right_prompt.fish | 341 ++++---- 4 files changed, 707 insertions(+), 695 deletions(-) diff --git a/themes/budspencer/README.md b/themes/budspencer/README.md index e426bb2..8d8938c 100644 --- a/themes/budspencer/README.md +++ b/themes/budspencer/README.md @@ -171,7 +171,8 @@ It makes the commandline as powerful as your editor. If `$EDITOR` is not set, vi is used. The following shortcut needs vi mode: -- Type `.` in NORMAL mode to edit commandline in editor. +- Type `.` in NORMAL mode or `\cv` in NORMAL/INSERT mode to edit commandline in + editor. ## Sessions diff --git a/themes/budspencer/fish_greeting.fish b/themes/budspencer/fish_greeting.fish index e2ef8cf..9c00353 100644 --- a/themes/budspencer/fish_greeting.fish +++ b/themes/budspencer/fish_greeting.fish @@ -27,8 +27,8 @@ set -U budspencer_night 000000 083743 445659 fdf6e3 b58900 cb4b16 dc121f af005f 6c71c4 268bd2 2aa198 859900 set -U budspencer_day 000000 333333 666666 ffffff ffff00 ff6600 ff0000 ff0033 3300ff 00aaff 00ffff 00ff00 if not set -q budspencer_colors - # Values are: black dark_gray light_gray white yellow orange red magenta violet blue cyan green - set -U budspencer_colors $budspencer_night + # Values are: black dark_gray light_gray white yellow orange red magenta violet blue cyan green + set -U budspencer_colors $budspencer_night end # Cursor color changes according to vi-mode @@ -38,7 +38,7 @@ set -U budspencer_cursors "\033]12;#$budspencer_colors[10]\007" "\033]12;#$budsp # Some terminals cannot change the cursor color set -l unsupported_terminals 'fbterm' 'st' 'linux' 'screen' if contains $TERM $unsupported_terminals - set budspencer_cursors '' '' '' '' + set budspencer_cursors '' '' '' '' end ############################################################################### @@ -49,54 +49,54 @@ end # => Help ######### function budspencer_help -d 'Show helpfile' - set -l readme_file "$fish_path/themes/budspencer/README.md" - if set -q PAGER - if [ -e $readme_file ] - eval $PAGER $readme_file - else - set_color $fish_color_error[1] - echo "$readme_file wasn't found." - end - else - open $readme_file - end + set -l readme_file "$fish_path/themes/budspencer/README.md" + if set -q PAGER + if [ -e $readme_file ] + eval $PAGER $readme_file + else + set_color $fish_color_error[1] + echo "$readme_file wasn't found." + end + else + open $readme_file + end end ################ # => Environment ################ function day -d "Set color palette for bright environment." - set budspencer_colors $budspencer_day - set budspencer_cursors "\033]12;#$budspencer_colors[10]\007" "\033]12;#$budspencer_colors[5]\007" "\033]12;#$budspencer_colors[8]\007" "\033]12;#$budspencer_colors[9]\007" + set budspencer_colors $budspencer_day + set budspencer_cursors "\033]12;#$budspencer_colors[10]\007" "\033]12;#$budspencer_colors[5]\007" "\033]12;#$budspencer_colors[8]\007" "\033]12;#$budspencer_colors[9]\007" end function night -d "Set color palette for dark environment." - set budspencer_colors $budspencer_night - set budspencer_cursors "\033]12;#$budspencer_colors[10]\007" "\033]12;#$budspencer_colors[5]\007" "\033]12;#$budspencer_colors[8]\007" "\033]12;#$budspencer_colors[9]\007" + set budspencer_colors $budspencer_night + set budspencer_cursors "\033]12;#$budspencer_colors[10]\007" "\033]12;#$budspencer_colors[5]\007" "\033]12;#$budspencer_colors[8]\007" "\033]12;#$budspencer_colors[9]\007" end ################# # => Window title ################# function wt -d 'Set window title' - set -g window_title $argv - function fish_title - echo -n $window_title - end + set -g window_title $argv + function fish_title + echo -n $window_title + end end #################### # => Welcome message #################### function fish_greeting -d 'Show greeting in login shell.' - if not set -q budspencer_nogreeting - if begin - not set -q -x LOGIN - and not set -q -x RANGER_LEVEL - and not set -q -x VIM - end - echo This is (set_color -b $budspencer_colors[2] $budspencer_colors[10])budspencer(set_color normal) theme for fish, a theme for the 70s. - echo Type (set_color -b $budspencer_colors[2] $budspencer_colors[6])»budspencer_help«(set_color normal) in order to see how you can speed up your workflow. - end - end + if not set -q budspencer_nogreeting + if begin + not set -q -x LOGIN + and not set -q -x RANGER_LEVEL + and not set -q -x VIM + end + echo This is (set_color -b $budspencer_colors[2] $budspencer_colors[10])budspencer(set_color normal) theme for fish, a theme for the 70s. + echo Type (set_color -b $budspencer_colors[2] $budspencer_colors[6])»budspencer_help«(set_color normal) in order to see how you can speed up your workflow. + end + end end diff --git a/themes/budspencer/fish_prompt.fish b/themes/budspencer/fish_prompt.fish index 1f0aff1..8847cb9 100644 --- a/themes/budspencer/fish_prompt.fish +++ b/themes/budspencer/fish_prompt.fish @@ -32,17 +32,19 @@ ############################################################################### if [ $fish_key_bindings = 'fish_vi_key_bindings' ] - bind '#' __budspencer_toggle_symbols - bind -M visual '#' __budspencer_toggle_symbols - bind ' ' __budspencer_toggle_pwd - bind -M visual ' ' __budspencer_toggle_pwd - bind L __budspencer_cd_next - bind H __budspencer_cd_prev - bind m mark - bind M unmark - bind . __budspencer_edit_comandline - bind -M insert \n __budspencer_preexec - bind \n __budspencer_preexec + bind '#' __budspencer_toggle_symbols + bind -M visual '#' __budspencer_toggle_symbols + bind ' ' __budspencer_toggle_pwd + bind -M visual ' ' __budspencer_toggle_pwd + bind L __budspencer_cd_next + bind H __budspencer_cd_prev + bind m mark + bind M unmark + bind . __budspencer_edit_commandline + bind \cv __budspencer_edit_commandline + bind -M insert \cv __budspencer_edit_commandline + bind -M insert \n __budspencer_preexec + bind \n __budspencer_preexec end ############################################################################### @@ -63,558 +65,566 @@ set -g budspencer_tmpfile '/tmp/'(echo %self)'_budspencer_edit.fish' # => Pre execute ################ function __budspencer_preexec -d 'Execute after hitting before doing anything else' - set -l cmd (commandline | sed 's|\s\+|\x1e|g') - if [ $_ = 'fish' ] - if [ -z $cmd[1] ] - set -e cmd[1] - end - if [ -z $cmd[1] ] - return - end - set -e budspencer_prompt_error[1] - if not type -q $cmd[1] - if [ -d $cmd[1] ] - set budspencer_prompt_error (cd $cmd[1] ^&1) - and commandline '' - commandline -f repaint - return - end - end - switch $cmd[1] - case 'c' - if begin - [ (count $cmd) -gt 1 ] - and [ $cmd[2] -gt 0 ] - and [ $cmd[2] -lt $pcount ] - end - commandline $prompt_hist[$cmd[2]] - echo $prompt_hist[$cmd[2]] | xsel - commandline -f repaint - return - end - case 'cd' - if [ (count $cmd) -le 2 ] - set budspencer_prompt_error (eval $cmd ^&1) - and commandline '' - if [ (count $budspencer_prompt_error) -gt 1 ] - set budspencer_prompt_error $budspencer_prompt_error[1] - end - commandline -f repaint - return - end - case 'day' 'night' - if [ (count $cmd) -eq 1 ] - eval $cmd - commandline '' - commandline -f repaint - return - end - end + set -l cmd (commandline | sed 's|\s\+|\x1e|g') + if [ $_ = 'fish' ] + if [ -z $cmd[1] ] + set -e cmd[1] + end + if [ -z $cmd[1] ] + return + end + set -e budspencer_prompt_error[1] + if not type -q $cmd[1] + if [ -d $cmd[1] ] + set budspencer_prompt_error (cd $cmd[1] ^&1) + and commandline '' + commandline -f repaint + return + end + end + switch $cmd[1] + case 'c' + if begin + [ (count $cmd) -gt 1 ] + and [ $cmd[2] -gt 0 ] + and [ $cmd[2] -lt $pcount ] end - commandline -f execute + commandline $prompt_hist[$cmd[2]] + echo $prompt_hist[$cmd[2]] | xsel + commandline -f repaint + return + end + case 'cd' + if [ (count $cmd) -le 2 ] + set budspencer_prompt_error (eval $cmd ^&1) + and commandline '' + if [ (count $budspencer_prompt_error) -gt 1 ] + set budspencer_prompt_error $budspencer_prompt_error[1] + end + commandline -f repaint + return + end + case 'day' 'night' + if [ (count $cmd) -eq 1 ] + eval $cmd + commandline '' + commandline -f repaint + return + end + end +end +commandline -f execute +end + +##################### +# => Fish termination +##################### +function __budspencer_on_termination -s HUP -s INT -s QUIT -s TERM --on-process %self -d 'Execute when shell terminates' + set -l item (contains -i %self $budspencer_sessions_active_pid ^ /dev/null) + __budspencer_detach_session $item end ###################### # => Directory history ###################### function __budspencer_create_dir_hist -v PWD -d 'Create directory history without duplicates' - if [ $pwd_hist_lock = false ] - if contains $PWD $$dir_hist - set -e $dir_hist[1][(contains -i $PWD $$dir_hist)] - end - set $dir_hist $$dir_hist $PWD - set -g dir_hist_val (count $$dir_hist) - end + if [ "$pwd_hist_lock" = false ] + if contains $PWD $$dir_hist + set -e $dir_hist[1][(contains -i $PWD $$dir_hist)] + end + set $dir_hist $$dir_hist $PWD + set -g dir_hist_val (count $$dir_hist) +end end function __budspencer_cd_prev -d 'Change to previous directory, press H in NORMAL mode.' - if [ $dir_hist_val -gt 1 ] - set dir_hist_val (expr $dir_hist_val - 1) - set pwd_hist_lock true - cd $$dir_hist[1][$dir_hist_val] - commandline -f repaint - end + if [ $dir_hist_val -gt 1 ] + set dir_hist_val (expr $dir_hist_val - 1) + set pwd_hist_lock true + cd $$dir_hist[1][$dir_hist_val] + commandline -f repaint +end end function __budspencer_cd_next -d 'Change to next directory, press L in NORMAL mode.' - if [ $dir_hist_val -lt (count $$dir_hist) ] - set dir_hist_val (expr $dir_hist_val + 1) - set pwd_hist_lock true - cd $$dir_hist[1][$dir_hist_val] - commandline -f repaint - end + if [ $dir_hist_val -lt (count $$dir_hist) ] + set dir_hist_val (expr $dir_hist_val + 1) + set pwd_hist_lock true + cd $$dir_hist[1][$dir_hist_val] + commandline -f repaint +end end function d -d 'List directory history, jump to directory in list with d ' - set -l num_items (expr (count $$dir_hist) - 1) - if [ $num_items -eq 0 ] - set_color $fish_color_error[1] - echo 'Directory history is empty. '(set_color normal)'It will be created automatically' - return - end - for i in (seq $num_items) - if [ (expr \( $num_items - $i \) \% 2) -eq 0 ] - set_color normal - else - set_color $budspencer_colors[4] - end - echo (expr $num_items - $i)\t$$dir_hist[1][$i] | sed "s|$HOME|~|" - end - if [ $num_items -eq 1 ] - set last_item '' - else - set last_item '-'(expr $num_items - 1) - end - echo -en $budspencer_cursors[2] - set input_length (expr length (expr $num_items - 1)) - read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[5])" ♻ Goto [e|0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[5])' -n $input_length -l dir_num - switch $dir_num - case (seq 0 (expr $num_items - 1)) - cd $$dir_hist[1][(expr $num_items - $dir_num)] - return 0 - case 'e' - read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[5])" ♻ Erase [0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[5])' -n $input_length -l dir_num - set -e $dir_hist[1][(expr $num_items - $dir_num)] ^ /dev/null - set dir_hist_val (count $$dir_hist) - return 0 - end - return 1 + set -l num_items (expr (count $$dir_hist) - 1) + if [ $num_items -eq 0 ] + set_color $fish_color_error[1] + echo 'Directory history is empty. '(set_color normal)'It will be created automatically' + return +end +for i in (seq $num_items) + if [ (expr \( $num_items - $i \) \% 2) -eq 0 ] + set_color normal + else + set_color $budspencer_colors[4] + end + echo (expr $num_items - $i)\t$$dir_hist[1][$i] | sed "s|$HOME|~|" +end +if [ $num_items -eq 1 ] + set last_item '' +else + set last_item '-'(expr $num_items - 1) +end +echo -en $budspencer_cursors[2] +set input_length (expr length (expr $num_items - 1)) +read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[5])" ♻ Goto [e|0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[5])' -n $input_length -l dir_num +switch $dir_num +case (seq 0 (expr $num_items - 1)) + cd $$dir_hist[1][(expr $num_items - $dir_num)] + return 0 +case 'e' + read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[5])" ♻ Erase [0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[5])' -n $input_length -l dir_num + set -e $dir_hist[1][(expr $num_items - $dir_num)] ^ /dev/null + set dir_hist_val (count $$dir_hist) + return 0 +end +return 1 end #################### # => Command history #################### function __budspencer_create_cmd_hist -e fish_prompt -d 'Create command history without duplicates' - if [ $_ = 'fish' ] - set pcount (expr $pcount + 1) - set -l IFS '' - set -l cmd (echo $history[1] | fish_indent | expand -t 4) - # Create prompt history - set prompt_hist $prompt_hist $cmd - # Create command history - if not begin - expr $cmd : '[cdms] ' > /dev/null - or contains $cmd $budspencer_nocmdhist - end - if contains $cmd $$cmd_hist - set -e $cmd_hist[1][(contains -i $cmd $$cmd_hist)] - end - set $cmd_hist $$cmd_hist $cmd - end - end - set fish_bind_mode insert - echo -n \a + if [ $_ = 'fish' ] + set pcount (expr $pcount + 1) + set -l IFS '' + set -l cmd (echo $history[1] | fish_indent | expand -t 4) + # Create prompt history + set prompt_hist $prompt_hist $cmd + # Create command history + if not begin + expr $cmd : '[cdms] ' > /dev/null + or contains $cmd $budspencer_nocmdhist + end + if contains $cmd $$cmd_hist + set -e $cmd_hist[1][(contains -i $cmd $$cmd_hist)] + end + set $cmd_hist $$cmd_hist $cmd + end +end +set fish_bind_mode insert +echo -n \a end function c -d 'List command history, load command from prompt with c ' - set -l num_items (count $$cmd_hist) - if [ $num_items -eq 0 ] - set_color $fish_color_error[1] - echo 'Command history is empty. '(set_color normal)'It will be created automatically.' - return - end - for i in (seq $num_items) - if [ (expr \( $num_items - $i \) \% 2) -eq 0 ] - set_color normal - else - set_color $budspencer_colors[4] - end - echo -n (expr $num_items - $i) - set -l item (echo $$cmd_hist[1][$i]) - echo -n \t$item\n - end - if [ $num_items -eq 1 ] - set last_item '' - else - set last_item '-'(expr $num_items - 1) - end - echo -en $budspencer_cursors[4] - set input_length (expr length (expr $num_items - 1)) - read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[9])" ↩ Exec [e|0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[9])' -n $input_length -l cmd_num - switch $cmd_num - case (seq 0 (expr $num_items - 1)) - commandline $$cmd_hist[1][(expr $num_items - $cmd_num)] - echo $$cmd_hist[1][(expr $num_items - $cmd_num)] | xsel - return 0 - case 'e' - read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[9])" ↩ Erase [0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[9])' -n $input_length -l cmd_num - set -e $cmd_hist[1][(expr $num_items - $cmd_num)] ^ /dev/null - return 0 - end - return 1 + set -l num_items (count $$cmd_hist) + if [ $num_items -eq 0 ] + set_color $fish_color_error[1] + echo 'Command history is empty. '(set_color normal)'It will be created automatically.' + return +end +for i in (seq $num_items) + if [ (expr \( $num_items - $i \) \% 2) -eq 0 ] + set_color normal + else + set_color $budspencer_colors[4] + end + echo -n (expr $num_items - $i) + set -l item (echo $$cmd_hist[1][$i]) + echo -n \t$item\n +end +if [ $num_items -eq 1 ] + set last_item '' +else + set last_item '-'(expr $num_items - 1) +end +echo -en $budspencer_cursors[4] +set input_length (expr length (expr $num_items - 1)) +read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[9])" ↩ Exec [e|0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[9])' -n $input_length -l cmd_num +switch $cmd_num +case (seq 0 (expr $num_items - 1)) + commandline $$cmd_hist[1][(expr $num_items - $cmd_num)] + echo $$cmd_hist[1][(expr $num_items - $cmd_num)] | xsel + return 0 +case 'e' + read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[9])" ↩ Erase [0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[9])' -n $input_length -l cmd_num + set -e $cmd_hist[1][(expr $num_items - $cmd_num)] ^ /dev/null + return 0 +end +return 1 end ############## # => Bookmarks ############## function mark -d 'Create bookmark for present working directory.' - if not contains $PWD $bookmarks - set -U bookmarks $PWD $bookmarks - set pwd_hist_lock true - commandline -f repaint - end + if not contains $PWD $bookmarks + set -U bookmarks $PWD $bookmarks + set pwd_hist_lock true + commandline -f repaint +end end function unmark -d 'Remove bookmark for present working directory.' - if contains $PWD $bookmarks - set -e bookmarks[(contains -i $PWD $bookmarks)] - set pwd_hist_lock true - commandline -f repaint - end + if contains $PWD $bookmarks + set -e bookmarks[(contains -i $PWD $bookmarks)] + set pwd_hist_lock true + commandline -f repaint +end end function m -d 'List bookmarks, jump to directory in list with m ' - set -l num_items (count $bookmarks) - if [ $num_items -eq 0 ] - set_color $fish_color_error[1] - echo 'Bookmark list is empty. '(set_color normal)'Enter '(set_color $fish_color_command[1])'mark '(set_color normal)'in INSERT mode or '(set_color $fish_color_command[1])'m '(set_color normal)'in NORMAL mode, if you want to add the current directory to your bookmark list.' - return - end - for i in (seq $num_items) - if [ $PWD = $bookmarks[$i] ] - set_color $budspencer_colors[10] - else - if [ (expr \( $num_items - $i \) \% 2) -eq 0 ] - set_color normal - else - set_color $budspencer_colors[4] - end - end - echo (expr $num_items - $i)\t$bookmarks[$i] | sed "s|$HOME|~|" - end - if [ $num_items -eq 1 ] - set last_item '' - else - set last_item '-'(expr $num_items - 1) - end - echo -en $budspencer_cursors[1] - set input_length (expr length (expr $num_items - 1)) - read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[10])" ⌘ Goto [0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[10])' -n $input_length -l dir_num - switch $dir_num - case (seq 0 (expr $num_items - 1)) - cd $bookmarks[(expr $num_items - $dir_num)] - return 0 - end - return 1 + set -l num_items (count $bookmarks) + if [ $num_items -eq 0 ] + set_color $fish_color_error[1] + echo 'Bookmark list is empty. '(set_color normal)'Enter '(set_color $fish_color_command[1])'mark '(set_color normal)'in INSERT mode or '(set_color $fish_color_command[1])'m '(set_color normal)'in NORMAL mode, if you want to add the current directory to your bookmark list.' + return +end +for i in (seq $num_items) + if [ $PWD = $bookmarks[$i] ] + set_color $budspencer_colors[10] + else + if [ (expr \( $num_items - $i \) \% 2) -eq 0 ] + set_color normal + else + set_color $budspencer_colors[4] + end + end + echo (expr $num_items - $i)\t$bookmarks[$i] | sed "s|$HOME|~|" +end +if [ $num_items -eq 1 ] + set last_item '' +else + set last_item '-'(expr $num_items - 1) +end +echo -en $budspencer_cursors[1] +set input_length (expr length (expr $num_items - 1)) +read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[10])" ⌘ Goto [0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[10])' -n $input_length -l dir_num +switch $dir_num +case (seq 0 (expr $num_items - 1)) + cd $bookmarks[(expr $num_items - $dir_num)] + return 0 +end +return 1 end ############# # => Sessions ############# function __budspencer_delete_zombi_sessions -d 'Delete zombi sessions' - for i in $budspencer_sessions_active_pid - if not contains $i %fish - set -l item (contains -i $i $budspencer_sessions_active_pid) - set -e budspencer_sessions_active_pid[$item] - set -e budspencer_sessions_active[$item] - end - end + for i in $budspencer_sessions_active_pid + if not contains $i %fish + set -l item (contains -i $i $budspencer_sessions_active_pid) + set -e budspencer_sessions_active_pid[$item] + set -e budspencer_sessions_active[$item] + end +end end function __budspencer_create_new_session -d 'Create a new session' - set -U budspencer_session_cmd_hist_$argv[1] $$cmd_hist - set -U budspencer_session_dir_hist_$argv[1] $$dir_hist - set -U budspencer_sessions $argv[1] $budspencer_sessions + set -U budspencer_session_cmd_hist_$argv[1] $$cmd_hist + set -U budspencer_session_dir_hist_$argv[1] $$dir_hist + set -U budspencer_sessions $argv[1] $budspencer_sessions end function __budspencer_erase_session -d 'Erase current session' - if [ (count $argv) -eq 1 ] - set_color $fish_color_error[1] - echo 'Missing argument: name of session to erase' - return - end - if contains $argv[2] $budspencer_sessions_active - set_color $fish_color_error[1] - echo "Session '$argv[2]' cannot be erased because it's currently active." - return - end - if contains $argv[2] $budspencer_sessions - set -e budspencer_session_cmd_hist_$argv[2] - set -e budspencer_session_dir_hist_$argv[2] - set -e budspencer_sessions[(contains -i $argv[2] $budspencer_sessions)] - else - set_color $fish_color_error[1] - echo "Session '$argv[2]' not found. "(set_color normal)'Enter '(set_color $fish_color_command[1])'s '(set_color normal)'to show a list of all recorded sessions.' - end + if [ (count $argv) -eq 1 ] + set_color $fish_color_error[1] + echo 'Missing argument: name of session to erase' + return +end +if contains $argv[2] $budspencer_sessions_active + set_color $fish_color_error[1] + echo "Session '$argv[2]' cannot be erased because it's currently active." + return +end +if contains $argv[2] $budspencer_sessions + set -e budspencer_session_cmd_hist_$argv[2] + set -e budspencer_session_dir_hist_$argv[2] + set -e budspencer_sessions[(contains -i $argv[2] $budspencer_sessions)] +else + set_color $fish_color_error[1] + echo "Session '$argv[2]' not found. "(set_color normal)'Enter '(set_color $fish_color_command[1])'s '(set_color normal)'to show a list of all recorded sessions.' +end end function __budspencer_detach_session -d 'Detach current session' - set cmd_hist cmd_hist_nosession - set dir_hist dir_hist_nosession - if [ -z $$dir_hist ] ^ /dev/null - set $dir_hist $PWD - end - set dir_hist_val (count $$dir_hist) - set -e budspencer_sessions_active_pid[$argv] ^ /dev/null - set -e budspencer_sessions_active[$argv] ^ /dev/null - set budspencer_session_current '' - cd $$dir_hist[1][$dir_hist_val] + set cmd_hist cmd_hist_nosession + set dir_hist dir_hist_nosession + if [ -z $$dir_hist ] ^ /dev/null + set $dir_hist $PWD +end +set dir_hist_val (count $$dir_hist) +set -e budspencer_sessions_active_pid[$argv] ^ /dev/null +set -e budspencer_sessions_active[$argv] ^ /dev/null +set budspencer_session_current '' +cd $$dir_hist[1][$dir_hist_val] end function __budspencer_attach_session -d 'Attach session' - set argv (echo -sn $argv\n | sed 's|[^[:alnum:]]|_|g') - if contains $argv[1] $budspencer_sessions_active - wmctrl -a "✻ $argv[1]" - else - wt "✻ $argv[1]" - __budspencer_detach_session $argv[-1] - set budspencer_sessions_active $budspencer_sessions_active $argv[1] - set budspencer_sessions_active_pid $budspencer_sessions_active_pid %self - set budspencer_session_current $argv[1] - if not contains $argv[1] $budspencer_sessions - __budspencer_create_new_session $argv[1] - end - set cmd_hist budspencer_session_cmd_hist_$argv[1] - set dir_hist budspencer_session_dir_hist_$argv[1] - if [ -z $$dir_hist ] ^ /dev/null - set $dir_hist $PWD - end - set dir_hist_val (count $$dir_hist) - cd $$dir_hist[1][$dir_hist_val] ^ /dev/null - end + set argv (echo -sn $argv\n | sed 's|[^[:alnum:]]|_|g') + if contains $argv[1] $budspencer_sessions_active + wmctrl -a "✻ $argv[1]" +else + wt "✻ $argv[1]" + __budspencer_detach_session $argv[-1] + set budspencer_sessions_active $budspencer_sessions_active $argv[1] + set budspencer_sessions_active_pid $budspencer_sessions_active_pid %self + set budspencer_session_current $argv[1] + if not contains $argv[1] $budspencer_sessions + __budspencer_create_new_session $argv[1] + end + set cmd_hist budspencer_session_cmd_hist_$argv[1] + set dir_hist budspencer_session_dir_hist_$argv[1] + if [ -z $$dir_hist ] ^ /dev/null + set $dir_hist $PWD + end + set dir_hist_val (count $$dir_hist) + cd $$dir_hist[1][$dir_hist_val] ^ /dev/null +end end function s -d 'Create, delete or attach session' - __budspencer_delete_zombi_sessions - if [ (count $argv) -eq 0 ] - set -l active_indicator - set -l num_items (count $budspencer_sessions) - if [ $num_items -eq 0 ] - set_color $fish_color_error[1] - echo -n 'Session list is empty. ' - set_color normal - echo -n 'Enter ' - set_color $fish_color_command[1] - echo -n 's ' - set_color $fish_color_param[1] - echo -n 'session-name' - set_color normal - echo ' to record the current session.' - return - end - for i in (seq $num_items) - if [ $budspencer_sessions[$i] = $budspencer_session_current ] - set_color $budspencer_colors[8] - else - if [ (expr \( $num_items - $i \) \% 2) -eq 0 ] - set_color normal - else - set_color $budspencer_colors[4] - end - end - if contains $budspencer_sessions[$i] $budspencer_sessions_active - set active_indicator '✻ ' - else - set active_indicator ' ' - end - echo (expr $num_items - $i)\t$active_indicator$budspencer_sessions[$i] - end - if [ $num_items -eq 1 ] - set last_item '' - else - set last_item '-'(expr $num_items - 1) - end - echo -en $budspencer_cursors[3] - set input_length (expr length (expr $num_items - 1)) - read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[8])" ✻ Attach [e|0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[8])' -n $input_length -l session_num - switch $session_num - case (seq 0 (expr $num_items - 1)) - set argv[1] $budspencer_sessions[(expr $num_items - $session_num)] - case 'e' - read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[8])" ✻ Erase [0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[8])' -n $input_length -l session_num - __budspencer_erase_session -e $budspencer_sessions[(expr $num_items - $session_num)] - return 0 - case '*' - return 1 - end - end - set -l item (contains -i %self $budspencer_sessions_active_pid ^ /dev/null) - switch $argv[1] - case '-e' - __budspencer_erase_session $argv - case '-d' - wt 'fish' - __budspencer_detach_session $item - case '-*' - set_color $fish_color_error[1] - echo "Invalid argument: $argv[1]" - case '*' - __budspencer_attach_session $argv $item - end + __budspencer_delete_zombi_sessions + if [ (count $argv) -eq 0 ] + set -l active_indicator + set -l num_items (count $budspencer_sessions) + if [ $num_items -eq 0 ] + set_color $fish_color_error[1] + echo -n 'Session list is empty. ' + set_color normal + echo -n 'Enter ' + set_color $fish_color_command[1] + echo -n 's ' + set_color $fish_color_param[1] + echo -n 'session-name' + set_color normal + echo ' to record the current session.' + return + end + for i in (seq $num_items) + if [ $budspencer_sessions[$i] = $budspencer_session_current ] + set_color $budspencer_colors[8] + else + if [ (expr \( $num_items - $i \) \% 2) -eq 0 ] + set_color normal + else + set_color $budspencer_colors[4] + end + end + if contains $budspencer_sessions[$i] $budspencer_sessions_active + set active_indicator '✻ ' + else + set active_indicator ' ' + end + echo (expr $num_items - $i)\t$active_indicator$budspencer_sessions[$i] + end + if [ $num_items -eq 1 ] + set last_item '' + else + set last_item '-'(expr $num_items - 1) + end + echo -en $budspencer_cursors[3] + set input_length (expr length (expr $num_items - 1)) + read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[8])" ✻ Attach [e|0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[8])' -n $input_length -l session_num + switch $session_num + case (seq 0 (expr $num_items - 1)) + set argv[1] $budspencer_sessions[(expr $num_items - $session_num)] + case 'e' + read -p 'echo -n (set_color -b $budspencer_colors[2] $budspencer_colors[8])" ✻ Erase [0"$last_item"] "(set_color -b normal $budspencer_colors[2])" "(set_color $budspencer_colors[8])' -n $input_length -l session_num + __budspencer_erase_session -e $budspencer_sessions[(expr $num_items - $session_num)] + return 0 + case '*' + return 1 + end +end +set -l item (contains -i %self $budspencer_sessions_active_pid ^ /dev/null) +switch $argv[1] +case '-e' + __budspencer_erase_session $argv +case '-d' + wt 'fish' + __budspencer_detach_session $item +case '-*' + set_color $fish_color_error[1] + echo "Invalid argument: $argv[1]" +case '*' + __budspencer_attach_session $argv $item +end end ##################################### # => Commandline editing with $EDITOR ##################################### -function __budspencer_edit_comandline -d 'Open current commandline with your editor' - commandline > $budspencer_tmpfile - eval $EDITOR $budspencer_tmpfile - if [ -s $budspencer_tmpfile ] - commandline (sed 's|^\s*||' $budspencer_tmpfile) - else - commandline '' - end - rm $budspencer_tmpfile +function __budspencer_edit_commandline -d 'Open current commandline with your editor' + commandline | fish_indent > $budspencer_tmpfile + eval $EDITOR $budspencer_tmpfile + if [ -s $budspencer_tmpfile ] + commandline (sed 's|^\s*||' $budspencer_tmpfile) +else + commandline '' +end +rm $budspencer_tmpfile end ################ # => Git segment ################ function __budspencer_prompt_git_branch -d 'Return the current branch name' - set -l branch (command git symbolic-ref HEAD ^ /dev/null | sed -e 's|^refs/heads/||') - if not test $branch > /dev/null - set -l position (command git describe --contains --all HEAD ^ /dev/null) - if not test $position > /dev/null - set -l commit (command git rev-parse HEAD ^ /dev/null | sed 's|\(^.......\).*|\1|') - echo -n (set_color -b $budspencer_colors[11])''(set_color $budspencer_colors[1])' ➦ '$commit' '(set_color $budspencer_colors[11]) - else - echo -n (set_color -b $budspencer_colors[9])''(set_color $budspencer_colors[1])'  '$position' '(set_color $budspencer_colors[9]) - end - else - echo -n (set_color -b $budspencer_colors[3])''(set_color $budspencer_colors[1])'  '$branch' '(set_color $budspencer_colors[3]) - end + set -l branch (command git symbolic-ref HEAD ^ /dev/null | sed -e 's|^refs/heads/||') + if not test $branch > /dev/null + set -l position (command git describe --contains --all HEAD ^ /dev/null) + if not test $position > /dev/null + set -l commit (command git rev-parse HEAD ^ /dev/null | sed 's|\(^.......\).*|\1|') + echo -n (set_color -b $budspencer_colors[11])''(set_color $budspencer_colors[1])' ➦ '$commit' '(set_color $budspencer_colors[11]) + else + echo -n (set_color -b $budspencer_colors[9])''(set_color $budspencer_colors[1])'  '$position' '(set_color $budspencer_colors[9]) + end +else + echo -n (set_color -b $budspencer_colors[3])''(set_color $budspencer_colors[1])'  '$branch' '(set_color $budspencer_colors[3]) +end end ###################### # => Bind-mode segment ###################### function __budspencer_prompt_bindmode -d 'Displays the current mode' - switch $fish_bind_mode - case default - set budspencer_current_bindmode_color $budspencer_colors[10] - echo -en $budspencer_cursors[1] - case insert - set budspencer_current_bindmode_color $budspencer_colors[5] - echo -en $budspencer_cursors[2] - if [ $pwd_hist_lock = true ] - set pwd_hist_lock false - __budspencer_create_dir_hist - end - case visual - set budspencer_current_bindmode_color $budspencer_colors[8] - echo -en $budspencer_cursors[3] - end - if [ (count $budspencer_prompt_error) -eq 1 ] - set budspencer_current_bindmode_color $budspencer_colors[7] - end - set_color -b $budspencer_current_bindmode_color $budspencer_colors[1] - echo -n " $pcount " - set_color -b $budspencer_colors[1] $budspencer_current_bindmode_color + switch $fish_bind_mode +case default + set budspencer_current_bindmode_color $budspencer_colors[10] + echo -en $budspencer_cursors[1] +case insert + set budspencer_current_bindmode_color $budspencer_colors[5] + echo -en $budspencer_cursors[2] + if [ "$pwd_hist_lock" = true ] + set pwd_hist_lock false + __budspencer_create_dir_hist + end +case visual + set budspencer_current_bindmode_color $budspencer_colors[8] + echo -en $budspencer_cursors[3] +end +if [ (count $budspencer_prompt_error) -eq 1 ] + set budspencer_current_bindmode_color $budspencer_colors[7] +end +set_color -b $budspencer_current_bindmode_color $budspencer_colors[1] +echo -n " $pcount " +set_color -b $budspencer_colors[1] $budspencer_current_bindmode_color end #################### # => Symbols segment #################### function __budspencer_prompt_left_symbols -d 'Display symbols' - set -l jobs (jobs | wc -l) - if [ -e ~/.taskrc ] - set todo (task due.before:tomorrow ^ /dev/null | tail -1 | cut -f1 -d' ') - end - if [ -e ~/.reminders ] - set appointments (rem -a | cut -f1 -d' ') - end - if [ (count $todo) -eq 0 ] - set todo 0 - end - if [ (count $appointments) -eq 0 ] - set appointments 0 - end - set_color -b $budspencer_colors[2] - echo -n '' + set -l jobs (jobs | wc -l) + if [ -e ~/.taskrc ] + set todo (task due.before:tomorrow ^ /dev/null | tail -1 | cut -f1 -d' ') +end +if [ -e ~/.reminders ] + set appointments (rem -a | cut -f1 -d' ') +end +if [ (count $todo) -eq 0 ] + set todo 0 +end +if [ (count $appointments) -eq 0 ] + set appointments 0 +end +set_color -b $budspencer_colors[2] +echo -n '' - if [ $symbols_style = 'symbols' ] - if [ $budspencer_session_current != '' ] - set_color -o $budspencer_colors[8] - echo -n ' ✻' - end - if contains $PWD $bookmarks - set_color -o $budspencer_colors[10] - echo -n ' ⌘' - end - if set -q -x VIM - set_color -o $budspencer_colors[9] - echo -n ' V' - end - if set -q -x RANGER_LEVEL - set_color -o $budspencer_colors[9] - echo -n ' R' - end - if [ $jobs -gt 0 ] - set_color -o $budspencer_colors[11] - echo -n ' ⚙' - end - if [ ! -w . ] - set_color -o $budspencer_colors[6] - echo -n ' ' - end - if [ $todo -gt 0 ] - set_color -o $budspencer_colors[4] - echo -n ' ⚔' - end - if [ $appointments -gt 0 ] - set_color -o $budspencer_colors[5] - echo -n ' ⚑' - end - if [ $last_status -eq 0 ] - set_color -o $budspencer_colors[12] - echo -n ' ✔' - else - set_color -o $budspencer_colors[7] - echo -n ' ✘' - end - if [ $USER = 'root' ] - set_color -o $budspencer_colors[6] - echo -n ' ⚡' - end - else - if [ $budspencer_session_current != '' ] ^ /dev/null - set_color $budspencer_colors[8] - echo -n ' '(expr (count $budspencer_sessions) - (contains -i $budspencer_session_current $budspencer_sessions)) - end - if contains $PWD $bookmarks - set_color $budspencer_colors[10] - echo -n ' '(expr (count $bookmarks) - (contains -i $PWD $bookmarks)) - end - if set -q -x VIM - set_color -o $budspencer_colors[9] - echo -n ' V' - set_color normal - end - if set -q -x RANGER_LEVEL - set_color -b $budspencer_colors[2] $budspencer_colors[9] - echo -n ' '$RANGER_LEVEL - end - if [ $jobs -gt 0 ] - set_color -b $budspencer_colors[2] $budspencer_colors[11] - echo -n ' '$jobs - end - if [ ! -w . ] - set_color -o $budspencer_colors[6] - echo -n ' ' - set_color normal - end - if [ $todo -gt 0 ] - set_color -b $budspencer_colors[2] $budspencer_colors[4] - echo -n " $todo" - end - if [ $appointments -gt 0 ] - set_color -b $budspencer_colors[2] $budspencer_colors[5] - echo -n " $appointments" - end - if [ $last_status -eq 0 ] - set_color -b $budspencer_colors[2] $budspencer_colors[12] - echo -n ' '$last_status - else - set_color -b $budspencer_colors[2] $budspencer_colors[7] - echo -n ' '$last_status - end - if [ $USER = 'root' ] - set_color -o $budspencer_colors[6] - echo -n ' ⚡' - end - end - echo -n ' ' - set_color -b normal $budspencer_colors[2] +if [ $symbols_style = 'symbols' ] + if [ $budspencer_session_current != '' ] + set_color -o $budspencer_colors[8] + echo -n ' ✻' + end + if contains $PWD $bookmarks + set_color -o $budspencer_colors[10] + echo -n ' ⌘' + end + if set -q -x VIM + set_color -o $budspencer_colors[9] + echo -n ' V' + end + if set -q -x RANGER_LEVEL + set_color -o $budspencer_colors[9] + echo -n ' R' + end + if [ $jobs -gt 0 ] + set_color -o $budspencer_colors[11] + echo -n ' ⚙' + end + if [ ! -w . ] + set_color -o $budspencer_colors[6] + echo -n ' ' + end + if [ $todo -gt 0 ] + set_color -o $budspencer_colors[4] + echo -n ' ⚔' + end + if [ $appointments -gt 0 ] + set_color -o $budspencer_colors[5] + echo -n ' ⚑' + end + if [ $last_status -eq 0 ] + set_color -o $budspencer_colors[12] + echo -n ' ✔' + else + set_color -o $budspencer_colors[7] + echo -n ' ✘' + end + if [ $USER = 'root' ] + set_color -o $budspencer_colors[6] + echo -n ' ⚡' + end +else + if [ $budspencer_session_current != '' ] ^ /dev/null + set_color $budspencer_colors[8] + echo -n ' '(expr (count $budspencer_sessions) - (contains -i $budspencer_session_current $budspencer_sessions)) + end + if contains $PWD $bookmarks + set_color $budspencer_colors[10] + echo -n ' '(expr (count $bookmarks) - (contains -i $PWD $bookmarks)) + end + if set -q -x VIM + set_color -o $budspencer_colors[9] + echo -n ' V' + set_color normal + end + if set -q -x RANGER_LEVEL + set_color -b $budspencer_colors[2] $budspencer_colors[9] + echo -n ' '$RANGER_LEVEL + end + if [ $jobs -gt 0 ] + set_color -b $budspencer_colors[2] $budspencer_colors[11] + echo -n ' '$jobs + end + if [ ! -w . ] + set_color -o $budspencer_colors[6] + echo -n ' ' + set_color normal + end + if [ $todo -gt 0 ] + set_color -b $budspencer_colors[2] $budspencer_colors[4] + echo -n " $todo" + end + if [ $appointments -gt 0 ] + set_color -b $budspencer_colors[2] $budspencer_colors[5] + echo -n " $appointments" + end + if [ $last_status -eq 0 ] + set_color -b $budspencer_colors[2] $budspencer_colors[12] + echo -n ' '$last_status + else + set_color -b $budspencer_colors[2] $budspencer_colors[7] + echo -n ' '$last_status + end + if [ $USER = 'root' ] + set_color -o $budspencer_colors[6] + echo -n ' ⚡' + end +end +echo -n ' ' +set_color -b normal $budspencer_colors[2] end ############################################################################### @@ -639,37 +649,37 @@ set -g symbols_style 'symbols' # Load user defined key bindings if functions --query fish_user_key_bindings - fish_user_key_bindings + fish_user_key_bindings end # Set favorite editor if not set -q EDITOR - set -g EDITOR vi + set -g EDITOR vi end # Source config file if [ -e $budspencer_config ] - source $budspencer_config + source $budspencer_config end # Don't save in command history if not set -q budspencer_nocmdhist - set -U budspencer_nocmdhist 'c' 'd' 'll' 'ls' 'm' 's' + set -U budspencer_nocmdhist 'c' 'd' 'll' 'ls' 'm' 's' end # Set PWD segment style if not set -q budspencer_pwdstyle - set -U budspencer_pwdstyle short long none + set -U budspencer_pwdstyle short long none end set pwd_style $budspencer_pwdstyle[1] # Cd to newest bookmark if this is a login shell if not begin - set -q -x LOGIN - or set -q -x RANGER_LEVEL - or set -q -x VIM + set -q -x LOGIN + or set -q -x RANGER_LEVEL + or set -q -x VIM end ^ /dev/null - cd $bookmarks[1] +cd $bookmarks[1] end set -x LOGIN $USER @@ -678,6 +688,6 @@ set -x LOGIN $USER ############################################################################### function fish_prompt -d 'Write out the left prompt of the budspencer theme' - set -g last_status $status - echo -n -s (__budspencer_prompt_bindmode) (__budspencer_prompt_git_branch) (__budspencer_prompt_left_symbols) '' ' ' + set -g last_status $status + echo -n -s (__budspencer_prompt_bindmode) (__budspencer_prompt_git_branch) (__budspencer_prompt_left_symbols) '' ' ' end diff --git a/themes/budspencer/fish_right_prompt.fish b/themes/budspencer/fish_right_prompt.fish index 93a975e..600271c 100644 --- a/themes/budspencer/fish_right_prompt.fish +++ b/themes/budspencer/fish_right_prompt.fish @@ -27,205 +27,206 @@ # => Toggle functions ##################### function __budspencer_toggle_symbols -d 'Toggles style of symbols, press # in NORMAL or VISUAL mode' - if [ $symbols_style = 'symbols' ] - set symbols_style 'numbers' - else - set symbols_style 'symbols' - end - set pwd_hist_lock true - commandline -f repaint + if [ $symbols_style = 'symbols' ] + set symbols_style 'numbers' + else + set symbols_style 'symbols' + end + set pwd_hist_lock true + commandline -f repaint end function __budspencer_toggle_pwd -d 'Toggles style of pwd segment, press space bar in NORMAL or VISUAL mode' - for i in (seq (count $budspencer_pwdstyle)) - if [ $budspencer_pwdstyle[$i] = $pwd_style ] - set pwd_style $budspencer_pwdstyle[(expr $i \% (count $budspencer_pwdstyle) + 1)] - set pwd_hist_lock true - commandline -f repaint - break - end - end + for i in (seq (count $budspencer_pwdstyle)) + if [ $budspencer_pwdstyle[$i] = $pwd_style ] + set pwd_style $budspencer_pwdstyle[(expr $i \% (count $budspencer_pwdstyle) + 1)] + set pwd_hist_lock true + commandline -f repaint + break + end + end end ############################# # => Command duration segment ############################# function __budspencer_cmd_duration -d 'Displays the elapsed time of last command' - set -l seconds '' - set -l minutes '' - set -l hours '' - set -l days '' - set -l cmd_duration (expr $CMD_DURATION / 1000) - if [ $cmd_duration -gt 0 ] - set seconds (expr $cmd_duration \% 68400 \% 3600 \% 60)'s' - if [ $cmd_duration -ge 60 ] - set minutes (expr $cmd_duration \% 68400 \% 3600 / 60)'m' - if [ $cmd_duration -ge 3600 ] - set hours (expr $cmd_duration \% 68400 / 3600)'h' - if [ $cmd_duration -ge 68400 ] - set days (expr $cmd_duration / 68400)'d' - end - end - end - if [ $last_status -ne 0 ] - echo -n (set_color $budspencer_colors[2])''(set_color -b $budspencer_colors[2] $budspencer_colors[7])' '$days$hours$minutes$seconds - else - echo -n (set_color $budspencer_colors[2])''(set_color -b $budspencer_colors[2] $budspencer_colors[12])' '$days$hours$minutes$seconds - end - end + set -l seconds '' + set -l minutes '' + set -l hours '' + set -l days '' + set -l cmd_duration (expr $CMD_DURATION / 1000) + if [ $cmd_duration -gt 0 ] + set seconds (expr $cmd_duration \% 68400 \% 3600 \% 60)'s' + if [ $cmd_duration -ge 60 ] + set minutes (expr $cmd_duration \% 68400 \% 3600 / 60)'m' + if [ $cmd_duration -ge 3600 ] + set hours (expr $cmd_duration \% 68400 / 3600)'h' + if [ $cmd_duration -ge 68400 ] + set days (expr $cmd_duration / 68400)'d' + end + end + end + if [ $last_status -ne 0 ] + echo -n (set_color $budspencer_colors[2])''(set_color -b $budspencer_colors[2] $budspencer_colors[7])' '$days$hours$minutes$seconds + else + echo -n (set_color $budspencer_colors[2])''(set_color -b $budspencer_colors[2] $budspencer_colors[12])' '$days$hours$minutes$seconds + end + end end ################ # => Git segment ################ function __budspencer_is_git_ahead_or_behind -d 'Check if there are unpulled or unpushed commits' - command git rev-list --count --left-right 'HEAD...@{upstream}' ^ /dev/null | sed 's|\s\+|\n|g' + command git rev-list --count --left-right 'HEAD...@{upstream}' ^ /dev/null | sed 's|\s\+|\n|g' end function __budspencer_git_status -d 'Check git status' - set -l git_status (command git status --porcelain ^/dev/null | cut -c 1-2) - set -l added (echo -sn $git_status\n | egrep -c "[ACDMT][ MT]|[ACMT]D") - set -l deleted (echo -sn $git_status\n | egrep -c "[ ACMRT]D") - set -l modified (echo -sn $git_status\n | egrep -c ".[MT]") - set -l renamed (echo -sn $git_status\n | egrep -c "R.") - set -l unmerged (echo -sn $git_status\n | egrep -c "AA|DD|U.|.U") - set -l untracked (echo -sn $git_status\n | egrep -c "\?\?") - echo -n $added\n$deleted\n$modified\n$renamed\n$unmerged\n$untracked + set -l git_status (command git status --porcelain ^/dev/null | cut -c 1-2) + set -l added (echo -sn $git_status\n | egrep -c "[ACDMT][ MT]|[ACMT]D") + set -l deleted (echo -sn $git_status\n | egrep -c "[ ACMRT]D") + set -l modified (echo -sn $git_status\n | egrep -c ".[MT]") + set -l renamed (echo -sn $git_status\n | egrep -c "R.") + set -l unmerged (echo -sn $git_status\n | egrep -c "AA|DD|U.|.U") + set -l untracked (echo -sn $git_status\n | egrep -c "\?\?") + echo -n $added\n$deleted\n$modified\n$renamed\n$unmerged\n$untracked end function __budspencer_is_git_stashed -d 'Check if there are stashed commits' - command git stash list ^ /dev/null | wc -l + command git log --format="%gd" -g $argv 'refs/stash' -- ^ /dev/null | wc -l end function __budspencer_prompt_git_symbols -d 'Displays the git symbols' - set -l is_repo (command git rev-parse --is-inside-work-tree ^/dev/null) - set -l git_ahead_behind (__budspencer_is_git_ahead_or_behind) - set -l git_status (__budspencer_git_status) - set -l git_stashed (__budspencer_is_git_stashed) + set -l is_repo (command git rev-parse --is-inside-work-tree ^/dev/null) + if [ -z $is_repo ] + return + end - if begin - [ $is_repo=true ] - [ (expr $git_status[1] + $git_status[2] + $git_status[3] + $git_status[4] + $git_status[5] + $git_status[6]) -ne 0 ] - end - set_color $budspencer_colors[3] - echo -n '' - set_color -b $budspencer_colors[3] - if [ $symbols_style = 'symbols' ] - if [ (count $git_ahead_behind) -eq 2 ] - if [ $git_ahead_behind[1] -gt 0 ] - set_color -o $budspencer_colors[5] - echo -n ' ↑' - end - if [ $git_ahead_behind[2] -gt 0 ] - set_color -o $budspencer_colors[5] - echo -n ' ↓' - end - end - if [ $git_status[1] -gt 0 ] - set_color -o $budspencer_colors[12] - echo -n ' +' - end - if [ $git_status[2] -gt 0 ] - set_color -o $budspencer_colors[7] - echo -n ' –' - end - if [ $git_status[3] -gt 0 ] - set_color -o $budspencer_colors[10] - echo -n ' ✱' - end - if [ $git_status[4] -gt 0 ] - set_color -o $budspencer_colors[8] - echo -n ' →' - end - if [ $git_status[5] -gt 0 ] - set_color -o $budspencer_colors[9] - echo -n ' ═' - end - if [ $git_status[6] -gt 0 ] - set_color -o $budspencer_colors[4] - echo -n ' ●' - end - if [ $git_stashed -gt 0 ] - set_color -o $budspencer_colors[11] - echo -n ' ✭' - end - else - if [ (count $git_ahead_behind) -eq 2 ] - if [ $git_ahead_behind[1] -gt 0 ] - set_color $budspencer_colors[5] - echo -n ' '$git_ahead_behind[1] - end - if [ $git_ahead_behind[2] -gt 0 ] - set_color $budspencer_colors[5] - echo -n ' '$git_ahead_behind[2] - end - end - if [ $git_status[1] -gt 0 ] - set_color $budspencer_colors[12] - echo -n ' '$git_status[1] - end - if [ $git_status[2] -gt 0 ] - set_color $budspencer_colors[7] - echo -n ' '$git_status[2] - end - if [ $git_status[3] -gt 0 ] - set_color $budspencer_colors[10] - echo -n ' '$git_status[3] - end - if [ $git_status[4] -gt 0 ] - set_color $budspencer_colors[8] - echo -n ' '$git_status[4] - end - if [ $git_status[5] -gt 0 ] - set_color $budspencer_colors[9] - echo -n ' '$git_status[5] - end - if [ $git_status[6] -gt 0 ] - set_color $budspencer_colors[4] - echo -n ' '$git_status[6] - end - if [ $git_stashed -gt 0 ] - set_color $budspencer_colors[11] - echo -n ' '$git_stashed - end - end - set_color -b $budspencer_colors[3] normal - end + set -l git_ahead_behind (__budspencer_is_git_ahead_or_behind) + set -l git_status (__budspencer_git_status) + set -l git_stashed (__budspencer_is_git_stashed) + + if [ (expr $git_status[1] + $git_status[2] + $git_status[3] + $git_status[4] + $git_status[5] + $git_status[6] + $git_stashed) -ne 0 ] + set_color $budspencer_colors[3] + echo -n '' + set_color -b $budspencer_colors[3] + if [ $symbols_style = 'symbols' ] + if [ (count $git_ahead_behind) -eq 2 ] + if [ $git_ahead_behind[1] -gt 0 ] + set_color -o $budspencer_colors[5] + echo -n ' ↑' + end + if [ $git_ahead_behind[2] -gt 0 ] + set_color -o $budspencer_colors[5] + echo -n ' ↓' + end + end + if [ $git_status[1] -gt 0 ] + set_color -o $budspencer_colors[12] + echo -n ' +' + end + if [ $git_status[2] -gt 0 ] + set_color -o $budspencer_colors[7] + echo -n ' –' + end + if [ $git_status[3] -gt 0 ] + set_color -o $budspencer_colors[10] + echo -n ' ✱' + end + if [ $git_status[4] -gt 0 ] + set_color -o $budspencer_colors[8] + echo -n ' →' + end + if [ $git_status[5] -gt 0 ] + set_color -o $budspencer_colors[9] + echo -n ' ═' + end + if [ $git_status[6] -gt 0 ] + set_color -o $budspencer_colors[4] + echo -n ' ●' + end + if [ $git_stashed -gt 0 ] + set_color -o $budspencer_colors[11] + echo -n ' ✭' + end + else + if [ (count $git_ahead_behind) -eq 2 ] + if [ $git_ahead_behind[1] -gt 0 ] + set_color $budspencer_colors[5] + echo -n ' '$git_ahead_behind[1] + end + if [ $git_ahead_behind[2] -gt 0 ] + set_color $budspencer_colors[5] + echo -n ' '$git_ahead_behind[2] + end + end + if [ $git_status[1] -gt 0 ] + set_color $budspencer_colors[12] + echo -n ' '$git_status[1] + end + if [ $git_status[2] -gt 0 ] + set_color $budspencer_colors[7] + echo -n ' '$git_status[2] + end + if [ $git_status[3] -gt 0 ] + set_color $budspencer_colors[10] + echo -n ' '$git_status[3] + end + if [ $git_status[4] -gt 0 ] + set_color $budspencer_colors[8] + echo -n ' '$git_status[4] + end + if [ $git_status[5] -gt 0 ] + set_color $budspencer_colors[9] + echo -n ' '$git_status[5] + end + if [ $git_status[6] -gt 0 ] + set_color $budspencer_colors[4] + echo -n ' '$git_status[6] + end + if [ $git_stashed -gt 0 ] + set_color $budspencer_colors[11] + echo -n ' '$git_stashed + end + end + set_color -b $budspencer_colors[3] normal + end end ################ # => PWD segment ################ function __budspencer_prompt_pwd -d 'Displays the present working directory' - set -l user_host ' ' - if set -q SSH_CLIENT - if [ $symbols_style = 'symbols' ] - switch $pwd_style - case short - set user_host " $USER@"(hostname -s)':' - case long - set user_host " $USER@"(hostname -f)':' - end - else - set user_host " $USER@"(hostname -i)':' - end - end - set_color $budspencer_current_bindmode_color - echo -n '' - set_color normal - set_color -b $budspencer_current_bindmode_color $budspencer_colors[1] - if [ (count $budspencer_prompt_error) != 1 ] - switch $pwd_style - case short - echo -n $user_host(prompt_pwd)' ' - case long - echo -n $user_host$PWD' ' - end - else - echo -n " $budspencer_prompt_error " - set -e budspencer_prompt_error[1] - end - set_color normal + set -l user_host ' ' + if set -q SSH_CLIENT + if [ $symbols_style = 'symbols' ] + switch $pwd_style + case short + set user_host " $USER@"(hostname -s)':' + case long + set user_host " $USER@"(hostname -f)':' + end + else + set user_host " $USER@"(hostname -i)':' + end + end + set_color $budspencer_current_bindmode_color + echo -n '' + set_color normal + set_color -b $budspencer_current_bindmode_color $budspencer_colors[1] + if [ (count $budspencer_prompt_error) != 1 ] + switch $pwd_style + case short + echo -n $user_host(prompt_pwd)' ' + case long + echo -n $user_host(pwd)' ' + end + else + echo -n " $budspencer_prompt_error " + set -e budspencer_prompt_error[1] + end + set_color normal end ############################################################################### @@ -233,6 +234,6 @@ end ############################################################################### function fish_right_prompt -d 'Write out the right prompt of the budspencer theme' - echo -n (__budspencer_cmd_duration) (__budspencer_prompt_git_symbols) (__budspencer_prompt_pwd) - set_color normal + echo -n (__budspencer_cmd_duration) (__budspencer_prompt_git_symbols) (__budspencer_prompt_pwd) + set_color normal end