From d00a7af8b4288b7cd4c10655a8391149b4bc12e5 Mon Sep 17 00:00:00 2001 From: Joseph Date: Sun, 8 Feb 2015 23:42:54 +0100 Subject: [PATCH] Updated budspencer theme Pull down menus in history functions Readme updated --- themes/budspencer/README.md | 58 ++- themes/budspencer/fish_prompt.fish | 760 ++++++++++++++++------------- 2 files changed, 453 insertions(+), 365 deletions(-) diff --git a/themes/budspencer/README.md b/themes/budspencer/README.md index 8d8938c..5a809e3 100644 --- a/themes/budspencer/README.md +++ b/themes/budspencer/README.md @@ -1,7 +1,20 @@ # Budspencer theme -A theme for the 70s, makes fish even more powerful. It's equipped with a few -nice functions and key bindings to speed up your workflow. +A theme for the 70s, makes fish even more powerful. It's equipped with a hell +of a lot of nice functions and key bindings to speed up your workflow. + +The philosophy behind budspencer theme: + +* Delimit the prompt lines clearly to the output. +* Produce output only if it contains relevant information. +* Show useful notifications within the prompt. +* Equip the prompt with toggle commands in order to change its style + interactively. +* Store sessions in order to make frequently used commands quickly accessible. +* Make navigation within the directory tree as easy as possible using + bookmarks and a directory history without duplicates. +* Make histories quickly accessible with menus. +* Don't stress your eyes. Use different colors in dark and bright environments. ## Demonstration video @@ -25,11 +38,12 @@ Non standard tools: ### General configuration The theme behaves similar to vim's airline/powerline plugins. Thus, it needs a -[powerline font][font]. Although it works with emacs mode, it's more powerful -with vi mode. In order to enable vi mode, execute: +[powerline font][font]. +It's also crucial to have vi mode enabled. Thus, execute ``` set -U fish_key_bindings fish_vi_key_bindings ``` +before enabling the theme. ### Colors @@ -88,8 +102,8 @@ set -e budspencer_nogreeting * ⚙: there are background jobs, can be toggled with `#` to show the amount of background jobs * : no write permissions in present working directory - * ⚔: there are tasks scheduled due today, can be toggled with `#` to - show the amount of tasks + * ⚔: there are tasks scheduled for this week, can be toggled with `#` to + show the amount of weekly tasks * ⚑: there are appointments for today, can be toggled with `#` to show the amount of appointments * ✔: last command succeeded, can be toggled with `#` to show the status value @@ -128,17 +142,24 @@ The following shortcuts need vi-mode: `short long none`); note that changes to `$budspencer_pwdstyle` keep persistant as it's a universal variable. +![pwd style][pwdstyle] + - Style of symbols can be toggled in NORMAL and in VISUAL mode with `#` * styles implemented: - `symbols` (shows status symbols) - `numbers` (shows numbers instead of symbols in left prompt as well as amount of changes in right git prompt) +Note, the format is _username@hostname:pathname_. Thus, you can cut +the whole string with your mouse and paste it into `ssh` commands. + ## Quickly navigate in history of working directories -The function `d` shows the history as enumerated list. Unlike fish's builtin -`dirh`, `d` does not show any duplicates. Enter a number to jump to a directory -within the list. +The function `d` drops down a menu showing the history as enumerated list. Unlike +fish's builtin `dirh`, `d` does not show any duplicates. Enter a number to jump +to a directory within the list. + +![dir menu][dirmenu] The following shortcuts need vi-mode: - Press `H` in NORMAL mode to change present working directory to previous @@ -148,8 +169,8 @@ The following shortcuts need vi-mode: ## Quickly navigate in command history -The function `c` shows the command history as enumerated list similarly to -the `d` function. Selections are also paste into the X clipboard. It's possible +The function `c` drops down a menu showing the command history as enumerated list similarly to +the `d` function. Selections are also pasted into the X clipboard. It's possible to load a command of a former prompt by giving the prompt line number as argument. @@ -158,7 +179,8 @@ argument. A bookmark can be created with `mark`. It can be removed with `unmark`. Bookmarks are universal and thus persistant. A new shell automatically changes working directory on startup to newest bookmark. -`m` is a function that shows the bookmarks as enumerated list equivalently to `d`. +`m` is a function that drops down a menu showing the bookmarks as enumerated list +equivalently to `d`. The following shortcuts need vi mode: - Create a bookmark for present working directory with `m` in NORMAL mode. @@ -171,8 +193,7 @@ 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 or `\cv` in NORMAL/INSERT mode to edit commandline in - editor. +- Type `.` in NORMAL mode to edit commandline in editor. ## Sessions @@ -195,6 +216,13 @@ Just type `wt `. - vi REPLACE mode, as soon as REPLACE mode is implemented within fish +## Feedback + +Give me feedback if you ... +* ... have ideas how I could improve budspencer. +* ... have problems with budspencer. +* ... have questions concerning budspencer. + [font]: https://github.com/Lokaltog/powerline-fonts [ranger]: http://ranger.nongnu.org/ [taskwarrior]: http://taskwarrior.org/ @@ -203,3 +231,5 @@ Just type `wt <title>`. [fish-nightly]: https://github.com/fish-shell/fish-shell/wiki/Nightly-builds [screenshot]: https://raw.githubusercontent.com/tannhuber/media/master/budspencer.jpg [colors]: https://raw.githubusercontent.com/tannhuber/media/master/budspencer_replace_colors.jpg +[dirmenu]: https://raw.githubusercontent.com/tannhuber/media/master/budspencer_dir_menu.jpg +[pwdstyle]: https://raw.githubusercontent.com/tannhuber/media/master/budspencer_pwd_style.jpg diff --git a/themes/budspencer/fish_prompt.fish b/themes/budspencer/fish_prompt.fish index 8847cb9..05fed2b 100644 --- a/themes/budspencer/fish_prompt.fish +++ b/themes/budspencer/fish_prompt.fish @@ -41,8 +41,6 @@ if [ $fish_key_bindings = 'fish_vi_key_bindings' ] 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 @@ -69,51 +67,51 @@ function __budspencer_preexec -d 'Execute after hitting <Enter> before doing any 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 + if [ -z $cmd[1] ] + 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 + 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 end -end -commandline -f execute + commandline -f execute end ##################### @@ -131,10 +129,10 @@ function __budspencer_create_dir_hist -v PWD -d 'Create directory history withou 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 - 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.' @@ -143,7 +141,7 @@ function __budspencer_cd_prev -d 'Change to previous directory, press H in NORMA set pwd_hist_lock true cd $$dir_hist[1][$dir_hist_val] commandline -f repaint -end + end end function __budspencer_cd_next -d 'Change to next directory, press L in NORMAL mode.' @@ -152,7 +150,7 @@ function __budspencer_cd_next -d 'Change to next directory, press L in NORMAL mo set pwd_hist_lock true cd $$dir_hist[1][$dir_hist_val] commandline -f repaint -end + end end function d -d 'List directory history, jump to directory in list with d <number>' @@ -161,34 +159,39 @@ function d -d 'List directory history, jump to directory in list with d <number> 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 + 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)] + 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) + tput cuu1 + end + for i in (seq (expr $num_items + 1)) + tput cuu1 + end + tput ed + tput cuu1 + set pcount (expr $pcount - 1) + set no_prompt_hist 'T' end #################### @@ -196,24 +199,31 @@ end #################### 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 + if begin + [ $pcount -gt 0 ] + and [ $no_prompt_hist = 'F' ] + end + set prompt_hist[$pcount] $cmd + else + set no_prompt_hist 'F' + end + set pcount (expr $pcount + 1) # Create command history if not begin - expr $cmd : '[cdms] ' > /dev/null - or contains $cmd $budspencer_nocmdhist + 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 -end -set fish_bind_mode insert -echo -n \a + set fish_bind_mode insert + echo -n \a end function c -d 'List command history, load command from prompt with c <prompt number>' @@ -222,36 +232,44 @@ function c -d 'List command history, load command from prompt with c <prompt num 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 + 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 + for i in (seq (count (echo $$cmd_hist\n))) + tput cuu1 + end + 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 + for i in (seq (count (echo $$cmd_hist\n))) + tput cuu1 + end + tput cuu1 + set -e $cmd_hist[1][(expr $num_items - $cmd_num)] ^ /dev/null + end + tput ed + tput cuu1 + set pcount (expr $pcount - 1) + set no_prompt_hist 'T' end ############## @@ -262,7 +280,7 @@ function mark -d 'Create bookmark for present working directory.' set -U bookmarks $PWD $bookmarks set pwd_hist_lock true commandline -f repaint -end + end end function unmark -d 'Remove bookmark for present working directory.' @@ -270,7 +288,7 @@ function unmark -d 'Remove bookmark for present working directory.' set -e bookmarks[(contains -i $PWD $bookmarks)] set pwd_hist_lock true commandline -f repaint -end + end end function m -d 'List bookmarks, jump to directory in list with m <number>' @@ -279,33 +297,36 @@ function m -d 'List bookmarks, jump to directory in list with m <number>' 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 + 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 - 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 + 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)] + end + for i in (seq (expr $num_items + 1)) + tput cuu1 + end + tput ed + tput cuu1 end ############# @@ -317,9 +338,9 @@ function __budspencer_delete_zombi_sessions -d 'Delete zombi sessions' 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 -end function __budspencer_create_new_session -d 'Create a new session' set -U budspencer_session_cmd_hist_$argv[1] $$cmd_hist @@ -332,20 +353,20 @@ function __budspencer_erase_session -d 'Erase current session' 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 + 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' @@ -353,35 +374,37 @@ function __budspencer_detach_session -d 'Detach current session' 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 + 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 no_prompt_hist 'T' 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] + 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 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 no_prompt_hist 'T' end function s -d 'Create, delete or attach session' @@ -401,70 +424,90 @@ function s -d 'Create, delete or attach session' 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] + 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 + else + set_color $budspencer_colors[4] + end end if contains $budspencer_sessions[$i] $budspencer_sessions_active set active_indicator '✻ ' else - set active_indicator ' ' + set active_indicator ' ' end - echo (expr $num_items - $i)\t$active_indicator$budspencer_sessions[$i] + 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 + set pcount (expr $pcount - 1) + switch $session_num + case (seq 0 (expr $num_items - 1)) + set argv[1] $budspencer_sessions[(expr $num_items - $session_num)] + for i in (seq (expr $num_items + 1)) + tput cuu1 + end + tput ed + tput cuu1 + 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 + if [ (expr $num_items - $session_num) -gt 0 ] + __budspencer_erase_session -e $budspencer_sessions[(expr $num_items - $session_num)] + end + for i in (seq (expr $num_items + 3)) + tput cuu1 + end + tput ed + return + case '*' + for i in (seq (expr $num_items + 1)) + tput cuu1 + end + tput ed + tput cuu1 + return + end end - if [ $num_items -eq 1 ] - set last_item '' - else - set last_item '-'(expr $num_items - 1) + 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 + tput cuu1 + tput ed + set pcount (expr $pcount - 1) + case '-*' + set_color $fish_color_error[1] + echo "Invalid argument: $argv[1]" + case '*' + __budspencer_attach_session $argv $item 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_commandline -d 'Open current commandline with your editor' - commandline | fish_indent > $budspencer_tmpfile + commandline > $budspencer_tmpfile eval $EDITOR $budspencer_tmpfile if [ -s $budspencer_tmpfile ] commandline (sed 's|^\s*||' $budspencer_tmpfile) -else - commandline '' -end -rm $budspencer_tmpfile + else + commandline '' + end + rm $budspencer_tmpfile end ################ @@ -475,14 +518,14 @@ function __budspencer_prompt_git_branch -d 'Return the current branch name' 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|') + 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[9])''(set_color $budspencer_colors[1])'  '$position' '(set_color $budspencer_colors[9]) + echo -n (set_color -b $budspencer_colors[3])''(set_color $budspencer_colors[1])'  '$branch' '(set_color $budspencer_colors[3]) end -else - echo -n (set_color -b $budspencer_colors[3])''(set_color $budspencer_colors[1])'  '$branch' '(set_color $budspencer_colors[3]) -end end ###################### @@ -490,26 +533,26 @@ end ###################### 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 + 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 -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 + 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 #################### @@ -518,113 +561,127 @@ end 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 todo (task due.before:sunday ^ /dev/null | tail -1 | cut -f1 -d' ') + set overdue (task due.before:today ^ /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 $overdue) -eq 0 ] + set overdue 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 ' ✔' + 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] + end + if [ $overdue -gt 0 ] + set_color -o $budspencer_colors[8] + end + if [ (expr $todo + $overdue) -gt 0 ] + 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 - set_color -o $budspencer_colors[7] - echo -n ' ✘' + 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] + end + if [ $overdue -gt 0 ] + set_color -b $budspencer_colors[2] $budspencer_colors[8] + end + if [ (expr $todo + $overdue) -gt 0 ] + 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 - 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] + echo -n ' ' + set_color -b normal $budspencer_colors[2] end ############################################################################### @@ -645,6 +702,7 @@ set -g dir_hist dir_hist_nosession set -g pwd_hist_lock false set -g pcount 1 set -g prompt_hist +set -g no_prompt_hist 'F' set -g symbols_style 'symbols' # Load user defined key bindings @@ -675,11 +733,11 @@ 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 -end ^ /dev/null -cd $bookmarks[1] + set -q -x LOGIN + or set -q -x RANGER_LEVEL + or set -q -x VIM + end ^ /dev/null + cd $bookmarks[1] end set -x LOGIN $USER