diff --git a/shells/fish/fish_prompt.fish b/shells/fish/fish_prompt.fish deleted file mode 100644 index 41a7b47..0000000 --- a/shells/fish/fish_prompt.fish +++ /dev/null @@ -1,91 +0,0 @@ -function fish_prompt --description 'Write out the prompt' - set -l last_status $status - - # Just calculate this once, to save a few cycles when displaying the prompt - if not set -q __fish_prompt_hostname - set -g __fish_prompt_hostname (hostname|cut -d . -f 1) - end - - set -l normal (set_color normal) - - # Hack; fish_config only copies the fish_prompt function (see #736) - if not set -q -g __fish_classic_git_functions_defined - set -g __fish_classic_git_functions_defined - - function __fish_repaint_user --on-variable fish_color_user --description "Event handler, repaint when fish_color_user changes" - if status --is-interactive - commandline -f repaint ^/dev/null - end - end - - function __fish_repaint_host --on-variable fish_color_host --description "Event handler, repaint when fish_color_host changes" - if status --is-interactive - commandline -f repaint ^/dev/null - end - end - - function __fish_repaint_status --on-variable fish_color_status --description "Event handler; repaint when fish_color_status changes" - if status --is-interactive - commandline -f repaint ^/dev/null - end - end - - function __fish_repaint_bind_mode --on-variable fish_key_bindings --description "Event handler; repaint when fish_key_bindings changes" - if status --is-interactive - commandline -f repaint ^/dev/null - end - end - - # initialize our new variables - if not set -q __fish_classic_git_prompt_initialized - set -qU fish_color_user; or set -U fish_color_user -o green - set -qU fish_color_host; or set -U fish_color_host -o cyan - set -qU fish_color_status; or set -U fish_color_status red - set -U __fish_classic_git_prompt_initialized - end - end - - set -l color_cwd - set -l prefix - switch $USER - case root toor - if set -q fish_color_cwd_root - set color_cwd $fish_color_cwd_root - else - set color_cwd $fish_color_cwd - end - set suffix '#' - case '*' - set color_cwd $fish_color_cwd - set suffix '>' - end - - set -l prompt_status - if test $last_status -ne 0 - set prompt_status ' ' (set_color $fish_color_status) "[$last_status]" "$normal" - end - - set -l mode_str - switch "$fish_key_bindings" - case '*_vi_*' '*_vi' - # possibly fish_vi_key_bindings, or custom key bindings - # that includes the name "vi" - set mode_str ( - echo -n " " - switch $fish_bind_mode - case default - set_color --bold --background red white - echo -n "[N]" - case insert - set_color --bold green - echo -n "[I]" - case visual - set_color --bold magenta - echo -n "[V]" - end - set_color normal - ) - end - - echo -n -s (set_color $fish_color_user) "$USER" $normal @ (set_color $fish_color_host) "$__fish_prompt_hostname" $normal ' ' (set_color $color_cwd) (prompt_pwd) $normal (__fish_git_prompt) $normal $prompt_status "$mode_str" "> " -end diff --git a/shells/fish/functions/fish_prompt.fish b/shells/fish/functions/fish_prompt.fish index 7f40dca..b16a145 100644 --- a/shells/fish/functions/fish_prompt.fish +++ b/shells/fish/functions/fish_prompt.fish @@ -1,16 +1,81 @@ -function fish_prompt --description 'Write out the prompt' - # Just calculate these once, to save a few cycles when displaying the prompt - if not set -q __fish_prompt_hostname - set -g __fish_prompt_hostname (hostname -s) - end +# name: taktoa +# by taktoa (Remy Goldschmidt) +# License: public domain - if not set -q __fish_prompt_normal - set -g __fish_prompt_normal (set_color normal) - end - - if not set -q __fish_prompt_cwd - set -g __fish_prompt_cwd (set_color $fish_color_cwd) - end - - echo -n -s "$USER" @ "$__fish_prompt_hostname" ' ' "$__fish_prompt_cwd" (prompt_pwd) (__fish_vcs_prompt) "$__fish_prompt_normal" '> ' +function _git_branch_name + echo (command git symbolic-ref HEAD ^/dev/null | sed -e 's|^refs/heads/||') end + +function _git_status_symbol + set -l git_status (git status --porcelain ^/dev/null) + if test -n "$git_status" + if git status --porcelain ^/dev/null | grep '^.[^ ]' >/dev/null + echo '*' # dirty + else + echo '#' # all staged + end + else + echo '' # clean + end +end + +function _remote_hostname + echo (whoami) + if test -n "$SSH_CONNECTION" + echo " (ssh)" + end +end + +function _get_tmux_window + tmux lsw | grep active | sed 's/\*.*$//g;s/: / /1' | awk '{ print $2 "-" $1 }' - +end + +function _get_screen_window + set initial (screen -Q windows; screen -Q echo "") + set middle (echo $initial | sed 's/ /\n/g' | grep '\*' | sed 's/\*\$ / /g') + echo $middle | awk '{ print $2 "-" $1 }' - +end + +function _is_multiplexed + set multiplexer "" + if test -z $TMUX + else + set multiplexer "tmux" + end + if test -z $WINDOW + else + set multiplexer "screen" + end + echo $multiplexer +end + +function fish_prompt + set -l cyan (set_color cyan) + set -l brown (set_color brown) + set -l normal (set_color normal) + + set -l arrow "λ" + set -l cwd (set_color $fish_color_cwd)(prompt_pwd) + set -l git_status (_git_status_symbol)(_git_branch_name) + + if test -n "$git_status" + set git_status " $git_status" + end + + set multiplexer (_is_multiplexed) + + switch $multiplexer + case screen + set pane (_get_screen_window) + case tmux + set pane (_get_tmux_window) + end + + if test -z $pane + set window "" + else + set window " ($pane)" + end + + echo -n -s (_remote_hostname) ' ' $cwd $brown $window $cyan $git_status $normal ' ' $arrow ' ' +end \ No newline at end of file