Budspencer theme improvements

- prompt line enumeration implemented
- new function to set the window title
- new session history
- README file updated
- replaced all `math` commands by `expr` for better performance
This commit is contained in:
Joseph Tannhuber 2014-09-06 22:08:09 +02:00 committed by Bruno Pinto
parent b0977db783
commit 3649ca3b38
4 changed files with 937 additions and 625 deletions

View File

@ -1,89 +1,144 @@
# budspencer theme # Budspencer theme
Translation of zsh's prezto [budspencer theme][budspencer]. This theme is A theme for the 70s, makes fish even more powerful. It's equipped with a few
optimized for visibility and a fast workflow. nice functions and key bindings to speed up your workflow.
## Demonstration video
[![video][screenshot]](http://vimeo.com/105546618)
## Requirements ## Requirements
You need an up-to-date fish shell version from [github][fish-git] or a
[nightly build][fish-nightly].
Non standard tools: Non standard tools:
* xsel * xsel
* wmctrl
* git * git
* [taskwarrior][taskwarrior] (optional)
* [remind][remind] (optional)
## Configuration ## Configuration
### General configuration
The theme behaves similar to vim's airline/powerline plugins. Thus, it needs a 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 [powerline font][font]. Although it works with emacs mode, it's more powerful
with vi mode. In order to enable vi mode, put the following lines into with vi mode. In order to enable vi mode, execute:
`$HOME/.config/fish/config.fish` before `set fish_path $HOME/.oh-my-fish`:
``` ```
set -U fish_key_bindings fish_vi_key_bindings set -U fish_key_bindings fish_vi_key_bindings
``` ```
### 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 ## Left prompt segments
- Vi mode indicator similar to vim airline/powerline, cursor color also changes - Prompt line number
if terminal supports it
- Git repository information - Git repository information
- Status symbols - Status symbols
* ⌘: present working directory is in bookmark list, can be toggled with `#` to * ✻: keep track of this shell session, can be toggled with `#` to show the number of
show the number of the bookmark the session within the sessions list
* V: vi is parent process * ⌘: present working directory is in bookmark list, can be toggled with `#` to
* R: [ranger][ranger] is parent process show the number of the bookmark
* ⚙: there are background jobs, can be toggled with `#` to show the amount of * V: vi is parent process
background jobs * R: [ranger][ranger] is parent process
* : no write permissions in present working directory * ⚙: there are background jobs, can be toggled with `#` to show the amount of
* ✔: last command succeeded, can be toggled with `#` to show the status value background jobs
* ✘: last command failed, can be toggled with `#` to show the status value * : no write permissions in present working directory
* ⚡: superuser indicator * ⚔: there are tasks scheduled due today, can be toggled with `#` to
show the amount of 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 - Present working directory
## Right prompt segments ## Right prompt segments
- Last command's duration time - Last command's duration time
- Git status - Git status symbols:
* symbols: * ↑: git repository is ahead origin
- ↑: git repository is ahead origin * ↓: git repository is behind origin
- ↓: git repository is behind origin * +: changes have been added to git index
- +: changes have been added to git index * : files have been deleted in work tree
- : files have been deleted in work tree * ✱: files have been modified in work tree
- ✱: files have been modified in work tree * →: files have been renamed in git index
- →: files have been renamed in git index * ═: there are unmerged commits
- ═: there are unmerged commits * ●: there are untracked (new) files
- ●: there are untracked (new) files * ✭: there are stashed commits
- ✭: there are stashed commits
## Toggle prompt segments ## Toggle prompt segments
The following shortcuts need vi-mode: The following shortcuts need vi-mode:
- Style of "present working directory"-segment can be toggled in NORMAL and in - Style of "present working directory"-segment can be toggled in NORMAL and in
VISUAL mode with space bar VISUAL mode with space bar
* styles implemented: * styles implemented:
- `short` (shows username, short hostname and truncated path; recommended in - `short` (shows username, short hostname and truncated path; recommended in
most cases) most cases)
- `long` (shows username, full hostname and full path; useful for copy-paste - `long` (shows username, full hostname and full path; useful for copy-paste
in ssh connections) in ssh connections)
- `none` (shows nothing except small delimiter; useful for small terminals) - `none` (shows nothing except small delimiter; useful for small terminals)
- If prompt is toggled with `#`, the IP address is shown instead of the - If prompt is toggled with `#`, the IP address is shown instead of the
hostname. hostname.
* configurable by global list `$PWDSTYLE` (if not set, defaults to * configurable by universal list `$budspencer_pwdstyle` (if not set, defaults to
`short long none`); put `set -g PWDSTYLE none long` into `short long none`); note that changes to `$budspencer_pwdstyle` keep persistant as it's
`$HOME/.config/fish/budspencer_config.fish` if you want to toggle only between a universal variable.
`none` and `long`.
- Style of symbols can be toggled in NORMAL and in VISUAL mode with `#` - Style of symbols can be toggled in NORMAL and in VISUAL mode with `#`
* styles implemented: * styles implemented:
- `symbols` (shows status symbols) - `symbols` (shows status symbols)
- `numbers` (shows numbers instead of symbols in left prompt as well as amount of changes in - `numbers` (shows numbers instead of symbols in left prompt as well as amount of changes in
right git prompt) right git prompt)
## Quickly navigate in history of working directories ## Quickly navigate in history of working directories
There is a function `d` that shows the history as enumerated list. Unlike The function `d` shows the history as enumerated list. Unlike fish's builtin
fish's builtin `dirh`, `d` does not show any duplicates. Enter a number to jump `dirh`, `d` does not show any duplicates. Enter a number to jump to a directory
to a directory within the list. It's also possible to give that number directly as within the list.
argument to the `d` function.
The following shortcuts need vi-mode: The following shortcuts need vi-mode:
- Press `H` in NORMAL mode to change present working directory to previous - Press `H` in NORMAL mode to change present working directory to previous
@ -93,14 +148,15 @@ The following shortcuts need vi-mode:
## Quickly navigate in command history ## Quickly navigate in command history
The function `c` shows the command history as enumerated list equivalently to The function `c` shows the command history as enumerated list similarly to
the `d` function. Selections are also paste into the X clipboard. the `d` function. Selections are also paste into the X clipboard. It's possible
to load a command of a former prompt by giving the prompt line number as
argument.
## Bookmarks ## Bookmarks
A bookmark can be created with `mark`. It can be removed with `unmark`. A bookmark can be created with `mark`. It can be removed with `unmark`.
Bookmarks are persistent and universal. Bookmarks are universal and thus persistant.
They are stored in `$HOME/.config/fish/budspencer_config.fish`.
A new shell automatically changes working directory on startup to newest bookmark. 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 shows the bookmarks as enumerated list equivalently to `d`.
@ -111,21 +167,38 @@ The following shortcuts need vi mode:
## Edit commandline with your favorite editor ## Edit commandline with your favorite editor
The function `edit-commandline` let you edit the commandline with your editor. The function `edit-commandline` let you edit the commandline with your editor.
It makes your commandline as powerful as your editor. If `$EDITOR` is not set, It makes the commandline as powerful as your editor. If `$EDITOR` is not set,
use vi. vi is used.
The following shortcut needs vi mode: The following shortcut needs vi mode:
- Type `.` in NORMAL mode to edit commandline in editor. - Type `.` in NORMAL mode to edit commandline in editor.
## Screenshot ## Sessions
![budspencer theme][screenshot] Shell session can be stored with `s <session name>`. 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 <session name>`.
Type `s -d` to detach current session.
## Set window title
Just type `wt <title>`.
## TODO ## TODO
- vi REPLACE mode, as soon as REPLACE mode is implemented within fish - vi REPLACE mode, as soon as REPLACE mode is implemented within fish
[budspencer]: https://github.com/tannhuber/prezto
[font]: https://github.com/Lokaltog/powerline-fonts [font]: https://github.com/Lokaltog/powerline-fonts
[ranger]: http://ranger.nongnu.org/ [ranger]: http://ranger.nongnu.org/
[screenshot]: https://raw.githubusercontent.com/tannhuber/prezto/master/screenshots/budspencer.png [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

View File

@ -1,21 +1,46 @@
############################################################################### ###############################################################################
# #
# Prompt theme name: # prompt theme name:
# budspencer # budspencer
# #
# Description: # description:
# a sophisticated airline/powerline theme # a sophisticated airline/powerline theme
# #
# Author: # author:
# Joseph Tannhuber <sepp.tannhuber@yahoo.de> # joseph tannhuber <sepp.tannhuber@yahoo.de>
# #
# Sections: # sections:
# -> Color definitions
# -> Functions # -> Functions
# -> Help # -> Help
# -> Environment
# -> Window title
# -> Welcome message # -> 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 # => Functions
############################################################################### ###############################################################################
@ -23,32 +48,55 @@
######### #########
# => Help # => Help
######### #########
function budspencer_help -d "Shows helpfile" function budspencer_help -d 'Show helpfile'
set -l readme_file $fish_path"/themes/budspencer/README.md" set -l readme_file "$fish_path/themes/budspencer/README.md"
if set -q PAGER if set -q PAGER
if test -e $readme_file if [ -e $readme_file ]
eval $PAGER $readme_file eval $PAGER $readme_file
else else
set_color $fish_color_error set_color $fish_color_error[1]
echo $readme_file" wasn't found." echo "$readme_file wasn't found."
end end
else else
open $readme_file open $readme_file
end 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 end
#################### ####################
# => Welcome message # => Welcome message
#################### ####################
function fish_greeting -d "Show greeting in login shell." function fish_greeting -d 'Show greeting in login shell.'
if begin if not set -q budspencer_nogreeting
test (count $bookmarks) -gt 0 if begin
and not set -q -x LOGIN not set -q -x LOGIN
and not set -q -x RANGER_LEVEL and not set -q -x RANGER_LEVEL
and not set -q -x VIM and not set -q -x VIM
end end
echo This is oh-my-fish\'s (set_color -b 083746 268bd2)budspencer(set_color normal) theme. 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 083746 cb4b16)»budspencer_help«(set_color normal) in order to see how you can speed up your workflow. 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.
set_color normal end
end end
end end

File diff suppressed because it is too large Load Diff

View File

@ -16,7 +16,6 @@
# -> Git segment # -> Git segment
# -> PWD segment # -> PWD segment
# -> Prompt # -> Prompt
# -> Segments
# #
############################################################################### ###############################################################################
@ -27,231 +26,213 @@
##################### #####################
# => Toggle functions # => Toggle functions
##################### #####################
set symbols_style "symbols" function __budspencer_toggle_symbols -d 'Toggles style of symbols, press # in NORMAL or VISUAL mode'
function fish_symbols_toggle_cm -d "Toggles style of symbols, press # in NORMAL or VISUAL mode" if [ $symbols_style = 'symbols' ]
if test $symbols_style = "symbols" set symbols_style 'numbers'
set symbols_style "numbers" else
else set symbols_style 'symbols'
set symbols_style "symbols" end
end set pwd_hist_lock true
set hist_lock "true" commandline -f repaint
commandline -f repaint
end end
function fish_pwd_toggle_cm -d "Toggles style of pwd segment, press space bar in NORMAL or VISUAL mode" function __budspencer_toggle_pwd -d 'Toggles style of pwd segment, press space bar in NORMAL or VISUAL mode'
for i in (seq (count $PWDSTYLE)) for i in (seq (count $budspencer_pwdstyle))
if test $PWDSTYLE[$i] = $pwd_style if [ $budspencer_pwdstyle[$i] = $pwd_style ]
set pwd_style $PWDSTYLE[(math $i%(count $PWDSTYLE)+1)] set pwd_style $budspencer_pwdstyle[(expr $i \% (count $budspencer_pwdstyle) + 1)]
set hist_lock "true" set pwd_hist_lock true
commandline -f repaint commandline -f repaint
break break
end end
end end
end end
############################# #############################
# => Command duration segment # => Command duration segment
############################# #############################
function fish_cmd_duration_cm -d "Displays the elapsed time of last command" function __budspencer_cmd_duration -d 'Displays the elapsed time of last command'
set -l seconds "" set -l seconds ''
set -l minutes "" set -l minutes ''
set -l hours "" set -l hours ''
set -l days "" set -l days ''
set -l cmd_duration (math $CMD_DURATION/1000) set -l cmd_duration (expr $CMD_DURATION / 1000)
if test $cmd_duration -gt 0 if [ $cmd_duration -gt 0 ]
set seconds (math $cmd_duration%68400%3600%60)"s" set seconds (expr $cmd_duration \% 68400 \% 3600 \% 60)'s'
if test $cmd_duration -ge 60 if [ $cmd_duration -ge 60 ]
set minutes (math $cmd_duration%68400%3600/60)"m" set minutes (expr $cmd_duration \% 68400 \% 3600 / 60)'m'
if test $cmd_duration -ge 3600 if [ $cmd_duration -ge 3600 ]
set hours (math $cmd_duration%68400/3600)"h" set hours (expr $cmd_duration \% 68400 / 3600)'h'
if test $cmd_duration -ge 68400 if [ $cmd_duration -ge 68400 ]
set days (math $cmd_duration/68400)"d" set days (expr $cmd_duration / 68400)'d'
end end
end end
end end
if test $last_status -ne 0 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 echo -n (set_color $budspencer_colors[2])''(set_color -b $budspencer_colors[2] $budspencer_colors[7])' '$days$hours$minutes$seconds
else else
echo -n (set_color $budspencer_colors[2])""(set_color -b $budspencer_colors[2] $budspencer_colors[12])" "$days$hours$minutes$seconds echo -n (set_color $budspencer_colors[2])''(set_color -b $budspencer_colors[2] $budspencer_colors[12])' '$days$hours$minutes$seconds
end end
end end
end end
################ ################
# => Git segment # => Git segment
################ ################
function __budspencer_is_git_ahead_or_behind -d "Check if there are unpulled or unpushed commits" 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 end
function __budspencer_git_status -d "Check git status" function __budspencer_git_status -d 'Check git status'
set -l git_status (command git status --porcelain ^/dev/null | cut -c 1-2) 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 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 deleted (echo -sn $git_status\n | egrep -c "[ ACMRT]D")
set -l modified (echo -sn $git_status\n | egrep -c ".[MT]") set -l modified (echo -sn $git_status\n | egrep -c ".[MT]")
set -l renamed (echo -sn $git_status\n | egrep -c "R.") 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 unmerged (echo -sn $git_status\n | egrep -c "AA|DD|U.|.U")
set -l untracked (echo -sn $git_status\n | egrep -c "\?\?") set -l untracked (echo -sn $git_status\n | egrep -c "\?\?")
echo -n $added\n$deleted\n$modified\n$renamed\n$unmerged\n$untracked echo -n $added\n$deleted\n$modified\n$renamed\n$unmerged\n$untracked
end end
function __budspencer_is_git_stashed -d "Check if there are stashed commits" function __budspencer_is_git_stashed -d 'Check if there are stashed commits'
command git stash list ^ /dev/null | wc -l command git stash list ^ /dev/null | wc -l
end end
function __budspencer_prompt_git_symbols -d "Displays the git symbols" function __budspencer_prompt_git_symbols -d 'Displays the git symbols'
set -l git_prompt "" set -l is_repo (command git rev-parse --is-inside-work-tree ^/dev/null)
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)
if test $is_repo="true" set -l git_status (__budspencer_git_status)
set -l git_stashed (__budspencer_is_git_stashed)
set -l git_ahead_behind (__budspencer_is_git_ahead_or_behind) if begin
if test (count $git_ahead_behind) -eq 2 [ $is_repo=true ]
if test $git_ahead_behind[1] -gt 0 [ (expr $git_status[1] + $git_status[2] + $git_status[3] + $git_status[4] + $git_status[5] + $git_status[6]) -ne 0 ]
if test $symbols_style = "symbols" end
set git_prompt (set_color -o $budspencer_colors[5])" ↑" set_color $budspencer_colors[3]
else echo -n ''
set git_prompt (set_color $budspencer_colors[5])" "$git_ahead_behind[1] set_color -b $budspencer_colors[3]
end if [ $symbols_style = 'symbols' ]
end if [ (count $git_ahead_behind) -eq 2 ]
if [ $git_ahead_behind[1] -gt 0 ]
if test $git_ahead_behind[2] -gt 0 set_color -o $budspencer_colors[5]
if test $symbols_style = "symbols" echo -n ' ↑'
set git_prompt $git_prompt(set_color -o $budspencer_colors[5])" ↓" end
else if [ $git_ahead_behind[2] -gt 0 ]
set git_prompt $git_prompt(set_color $budspencer_colors[5])" "$git_ahead_behind[2] set_color -o $budspencer_colors[5]
end echo -n ' ↓'
end end
end end
if [ $git_status[1] -gt 0 ]
set -l git_status (__budspencer_git_status) set_color -o $budspencer_colors[12]
if test $git_status[1] -gt 0 echo -n ' +'
if test $symbols_style = "symbols" end
set git_prompt $git_prompt(set_color -o $budspencer_colors[12])" +" if [ $git_status[2] -gt 0 ]
else set_color -o $budspencer_colors[7]
set git_prompt $git_prompt(set_color $budspencer_colors[12])" "$git_status[1] echo -n ' '
end end
end if [ $git_status[3] -gt 0 ]
set_color -o $budspencer_colors[10]
if test $git_status[2] -gt 0 echo -n ' ✱'
if test $symbols_style = "symbols" end
set git_prompt $git_prompt(set_color -o $budspencer_colors[7])" " if [ $git_status[4] -gt 0 ]
else set_color -o $budspencer_colors[8]
set git_prompt $git_prompt(set_color $budspencer_colors[7])" "$git_status[2] echo -n ' →'
end end
end if [ $git_status[5] -gt 0 ]
set_color -o $budspencer_colors[9]
if test $git_status[3] -gt 0 echo -n ' ═'
if test $symbols_style = "symbols" end
set git_prompt $git_prompt(set_color -o $budspencer_colors[10])" ✱" if [ $git_status[6] -gt 0 ]
else set_color -o $budspencer_colors[4]
set git_prompt $git_prompt(set_color $budspencer_colors[10])" "$git_status[3] echo -n ' ●'
end end
end if [ $git_stashed -gt 0 ]
set_color -o $budspencer_colors[11]
if test $git_status[4] -gt 0 echo -n ' ✭'
if test $symbols_style = "symbols" end
set git_prompt $git_prompt(set_color -o $budspencer_colors[8])" →" else
else if [ (count $git_ahead_behind) -eq 2 ]
set git_prompt $git_prompt(set_color $budspencer_colors[8])" "$git_status[4] if [ $git_ahead_behind[1] -gt 0 ]
end set_color $budspencer_colors[5]
end echo -n ' '$git_ahead_behind[1]
end
if test $git_status[5] -gt 0 if [ $git_ahead_behind[2] -gt 0 ]
if test $symbols_style = "symbols" set_color $budspencer_colors[5]
set git_prompt $git_prompt(set_color -o $budspencer_colors[9])" ═" echo -n ' '$git_ahead_behind[2]
else end
set git_prompt $git_prompt(set_color $budspencer_colors[9])" "$git_status[5] end
end if [ $git_status[1] -gt 0 ]
end set_color $budspencer_colors[12]
echo -n ' '$git_status[1]
if test $git_status[6] -gt 0 end
if test $symbols_style = "symbols" if [ $git_status[2] -gt 0 ]
set git_prompt $git_prompt(set_color -o $budspencer_colors[4])" ●" set_color $budspencer_colors[7]
else echo -n ' '$git_status[2]
set git_prompt $git_prompt(set_color $budspencer_colors[4])" "$git_status[6] end
end if [ $git_status[3] -gt 0 ]
end set_color $budspencer_colors[10]
echo -n ' '$git_status[3]
set -l git_stashed (__budspencer_is_git_stashed) end
if test $git_stashed -gt 0 if [ $git_status[4] -gt 0 ]
if test $symbols_style = "symbols" set_color $budspencer_colors[8]
set git_prompt $git_prompt(set_color -o $budspencer_colors[11])" ✭" echo -n ' '$git_status[4]
else end
set git_prompt $git_prompt(set_color $budspencer_colors[11])" "$git_stashed if [ $git_status[5] -gt 0 ]
end set_color $budspencer_colors[9]
end echo -n ' '$git_status[5]
echo -n $git_prompt end
if [ $git_status[6] -gt 0 ]
end 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 end
################ ################
# => PWD segment # => PWD segment
################ ################
function __budspencer_prompt_pwd -d "Displays the present working directory" function __budspencer_prompt_pwd -d 'Displays the present working directory'
set -l user_host " " set -l user_host ' '
if test (count $SSH_CLIENT) -gt 0 if set -q SSH_CLIENT
if test $symbols_style = "symbols" if [ $symbols_style = 'symbols' ]
switch $pwd_style switch $pwd_style
case short case short
set user_host " "$USER"@"(hostname -s)":" set user_host " $USER@"(hostname -s)':'
case long case long
set user_host " "$USER"@"(hostname -f)":" set user_host " $USER@"(hostname -f)':'
end end
else else
set user_host " "$USER"@"(hostname -i)":" set user_host " $USER@"(hostname -i)':'
end end
end end
switch $fish_bind_mode set_color $budspencer_current_bindmode_color
case default echo -n ''
set_color $budspencer_colors[10] set_color normal
echo -n "" set_color -b $budspencer_current_bindmode_color $budspencer_colors[1]
set_color normal if [ (count $budspencer_prompt_error) != 1 ]
set_color -b $budspencer_colors[10] $budspencer_colors[1] switch $pwd_style
case insert case short
set_color $budspencer_colors[5] echo -n $user_host(prompt_pwd)' '
echo -n "" case long
set_color normal echo -n $user_host$PWD' '
set_color -b $budspencer_colors[5] $budspencer_colors[1] end
case visual else
set_color $budspencer_colors[8] echo -n " $budspencer_prompt_error "
echo -n "" set -e budspencer_prompt_error[1]
set_color normal end
set_color -b $budspencer_colors[8] $budspencer_colors[1] set_color normal
end
switch $pwd_style
case short
echo -n $user_host(prompt_pwd)' '
case long
echo -n $user_host$PWD' '
end
set_color normal
end end
############################################################################### ###############################################################################
# => Prompt # => Prompt
############################################################################### ###############################################################################
function fish_right_prompt -d "Write out the right prompt of the budspencer theme" 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
# => Segments
#############
# Command duration
set ps_duration (fish_cmd_duration_cm)
# Git
set ps_git (__budspencer_prompt_git_symbols)
if test -n "$ps_git"
set ps_git (set_color $budspencer_colors[3])""(set_color -b $budspencer_colors[3])""$ps_git(set_color -b $budspencer_colors[3] normal)
end
# Pwd
set -l ps_pwd ""
set ps_pwd (__budspencer_prompt_pwd)
# Right prompt
echo -n $ps_duration $ps_git $ps_pwd
set_color normal
end end