diff --git a/themes/budspencer/README.md b/themes/budspencer/README.md deleted file mode 100644 index 5a809e3..0000000 --- a/themes/budspencer/README.md +++ /dev/null @@ -1,235 +0,0 @@ -# Budspencer theme - -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 - -[![video][screenshot]](http://vimeo.com/105546618) - -## Requirements - -You need an up-to-date fish shell version from [github][fish-git] or a -[nightly build][fish-nightly]. - -Non standard tools: - -* xsel -* wmctrl -* git -* [taskwarrior][taskwarrior] (optional) -* [remind][remind] (optional) - -## Configuration - -### General configuration - -The theme behaves similar to vim's airline/powerline plugins. Thus, it needs a -[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 - -Redefine `$budspencer_colors` with the `set` command in order to change the -colors of the prompt. - -Example: -``` -set budspencer_colors 000000 333333 666666 ffffff ffff00 ff6600 ff0000 ff0033 3300ff 0000ff 00ffff -00ff00 -``` -will result in a prompt like this: -![color replace example][colors] - -Two color schemes for bright and dark environments are predefined. You can -enable them with `day` and `night`, respectively. - -### Command history -Commands that shouldn't appear in the command history are defined by a universal -list `$budspencer_nocmdhist`. Default: -``` -set -U budspencer_nocmdhist c d ll ls m s -``` - -### Disable/reenable greeting - -Disable: -``` -set -U budspencer_nogreeting -``` - -Reenable: -``` -set -e budspencer_nogreeting -``` - -## Outer prompt segments - -- Vi mode is indicated by color of outer segments, cursor color also changes - if terminal supports it: - * blue: NORMAL mode - * yellow: INSERT mode - * magenta: VISUAL mode - -## Left prompt segments - -- Prompt line number -- Git repository information -- Status symbols - * ✻: keep track of this shell session, can be toggled with `#` to show the number of - the session within the sessions list - * ⌘: present working directory is in bookmark list, can be toggled with `#` to - show the number of the bookmark - * V: vi is parent process - * R: [ranger][ranger] is parent process - * ⚙: 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 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 - * ✘: last command failed, can be toggled with `#` to show the status value - * ⚡: superuser indicator -- Present working directory - -## Right prompt segments - -- Last command's duration time -- Git status symbols: - * ↑: git repository is ahead origin - * ↓: git repository is behind origin - * +: changes have been added to git index - * –: files have been deleted in work tree - * ✱: files have been modified in work tree - * →: files have been renamed in git index - * ═: there are unmerged commits - * ●: there are untracked (new) files - * ✭: there are stashed commits - -## Toggle prompt segments - -The following shortcuts need vi-mode: -- Style of "present working directory"-segment can be toggled in NORMAL and in - VISUAL mode with space bar - * styles implemented: - - `short` (shows username, short hostname and truncated path; recommended in - most cases) - - `long` (shows username, full hostname and full path; useful for copy-paste - in ssh connections) - - `none` (shows nothing except small delimiter; useful for small terminals) - - If prompt is toggled with `#`, the IP address is shown instead of the - hostname. - * configurable by universal list `$budspencer_pwdstyle` (if not set, defaults to - `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` 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 - working directory in history. -- Press `L` in NORMAL mode to change present working directory to next working - directory in history. - -## Quickly navigate in command history - -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. - -## Bookmarks - -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 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. -- Remove a bookmark for present working directory with `M` in NORMAL mode. - -## Edit commandline with your favorite editor - -The function `edit-commandline` let you edit the commandline with your editor. -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. - -## Sessions - -Shell session can be stored with `s `. If a session with `session -name` already exists, the session with this name will be attached. If a session with -`session name` is already active within another terminal, this terminal will be -focussed. - -A list of available sessions can be shown with `s`. - -A session can be erased with `s -e `. - -Type `s -d` to detach current session. - -## Set window title - -Just type `wt `. - -## TODO - -- 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/ -[remind]: http://www.roaringpenguin.com/products/remind -[fish-git]: https://github.com/fish-shell/fish-shell.git -[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_greeting.fish b/themes/budspencer/fish_greeting.fish deleted file mode 100644 index 9c00353..0000000 --- a/themes/budspencer/fish_greeting.fish +++ /dev/null @@ -1,102 +0,0 @@ -############################################################################### -# -# prompt theme name: -# budspencer -# -# description: -# a sophisticated airline/powerline theme -# -# author: -# joseph tannhuber <sepp.tannhuber@yahoo.de> -# -# sections: -# -> Color definitions -# -> Functions -# -> Help -# -> Environment -# -> Window title -# -> Welcome message -# -############################################################################### - -############################################################################### -# => Color definitions -############################################################################### - -# Define colors -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 -end - -# Cursor color changes according to vi-mode -# Define values for: normal_mode insert_mode visual_mode -set -U 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" - -# Some terminals cannot change the cursor color -set -l unsupported_terminals 'fbterm' 'st' 'linux' 'screen' -if contains $TERM $unsupported_terminals - set budspencer_cursors '' '' '' '' -end - -############################################################################### -# => Functions -############################################################################### - -######### -# => 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 -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" -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" -end - -################# -# => Window title -################# -function wt -d 'Set window title' - 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 -end diff --git a/themes/budspencer/fish_prompt.fish b/themes/budspencer/fish_prompt.fish deleted file mode 100644 index 52b1af6..0000000 --- a/themes/budspencer/fish_prompt.fish +++ /dev/null @@ -1,752 +0,0 @@ -############################################################################### -# -# Prompt theme name: -# budspencer -# -# Description: -# a sophisticated airline/powerline theme -# -# Author: -# Joseph Tannhuber <sepp.tannhuber@yahoo.de> -# -# Sections: -# -> Key bindings -# -> Files -# -> Functions -# -> Pre execute -# -> Directory history -# -> Command history -# -> Bookmarks -# -> Sessions -# -> Commandline editing with $EDITOR -# -> Git segment -# -> Bind-mode segment -# -> Symbols segment -# -> Prompt initialization -# -> Left prompt -# -############################################################################### - -############################################################################### -# => Key bindings -############################################################################### - -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_commandline - bind -M insert \n __budspencer_preexec - bind \n __budspencer_preexec -end - -############################################################################### -# => Files -############################################################################### - -# Config file -set -g budspencer_config "$HOME/.config/fish/budspencer_config.fish" - -# Temporary files -set -g budspencer_tmpfile '/tmp/'(echo %self)'_budspencer_edit.fish' - -############################################################################### -# => Functions -############################################################################### - -################ -# => Pre execute -################ -function __budspencer_preexec -d 'Execute after hitting <Enter> 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 - 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 -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 -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 -end - -function d -d 'List directory history, jump to directory in list with d <number>' - 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)] - 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 - -#################### -# => Command history -#################### -function __budspencer_create_cmd_hist -e fish_prompt -d 'Create command history without duplicates' - if [ $_ = 'fish' ] - set -l IFS '' - set -l cmd (echo $history[1] | fish_indent | expand -t 4) - # Create prompt history - 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 - 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 <prompt number>' - 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 - 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 - -############## -# => 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 -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 -end - -function m -d 'List bookmarks, jump to directory in list with m <number>' - 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)] - end - for i in (seq (expr $num_items + 1)) - tput cuu1 - end - tput ed - tput cuu1 -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 -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 -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 -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 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] - 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' - __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 - 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 - 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 -end - -##################################### -# => Commandline editing with $EDITOR -##################################### -function __budspencer_edit_commandline -d 'Open current commandline with your editor' - commandline > $budspencer_tmpfile - eval $EDITOR $budspencer_tmpfile - set -l IFS '' - 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 -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 -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: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] - 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 - 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 - echo -n ' ' - set_color -b normal $budspencer_colors[2] -end - -############################################################################### -# => Prompt initialization -############################################################################### - -# Initialize some global variables -set -g budspencer_prompt_error -set -g budspencer_current_bindmode_color -set -U budspencer_sessions_active $budspencer_sessions_active -set -U budspencer_sessions_active_pid $budspencer_sessions_active_pid -set -g budspencer_session_current '' -set -g cmd_hist_nosession -set -g cmd_hist cmd_hist_nosession -set -g CMD_DURATION 0 -set -g dir_hist_nosession -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 -if functions --query fish_user_key_bindings - fish_user_key_bindings -end - -# Set favorite editor -if not set -q EDITOR - set -g EDITOR vi -end - -# Source config file -if [ -e $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' -end - -# Set PWD segment style -if not set -q budspencer_pwdstyle - 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 - end ^ /dev/null - cd $bookmarks[1] -end -set -x LOGIN $USER - -############################################################################### -# => Left prompt -############################################################################### - -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) '' ' ' -end diff --git a/themes/budspencer/fish_right_prompt.fish b/themes/budspencer/fish_right_prompt.fish deleted file mode 100644 index 600271c..0000000 --- a/themes/budspencer/fish_right_prompt.fish +++ /dev/null @@ -1,239 +0,0 @@ -############################################################################### -# -# Prompt theme name: -# budspencer -# -# Description: -# a sophisticated airline/powerline theme -# -# Author: -# Joseph Tannhuber <sepp.tannhuber@yahoo.de> -# -# Sections: -# -> Functions -# -> Toggle functions -# -> Command duration segment -# -> Git segment -# -> PWD segment -# -> Prompt -# -############################################################################### - -############################################################################### -# => Functions -############################################################################### - -##################### -# => 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 -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 -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 -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' -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 -end - -function __budspencer_is_git_stashed -d 'Check if there are stashed commits' - 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) - if [ -z $is_repo ] - return - 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 -end - -############################################################################### -# => Prompt -############################################################################### - -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 -end