From 68e4ac9dd02ed2b65c0890a00c9485f6938bd7fb Mon Sep 17 00:00:00 2001 From: "S.P" Date: Fri, 4 Apr 2014 08:30:58 +0300 Subject: [PATCH] Added agnoster-mercurial theme with support for mercurial --- themes/agnoster-mercurial/README.md | 26 +++ themes/agnoster-mercurial/fish_prompt.fish | 174 +++++++++++++++++++++ 2 files changed, 200 insertions(+) create mode 100644 themes/agnoster-mercurial/README.md create mode 100644 themes/agnoster-mercurial/fish_prompt.fish diff --git a/themes/agnoster-mercurial/README.md b/themes/agnoster-mercurial/README.md new file mode 100644 index 0000000..ab68e88 --- /dev/null +++ b/themes/agnoster-mercurial/README.md @@ -0,0 +1,26 @@ +## agnoster + +A ZSH theme optimized for people who use: + +* Solarized +* Git +* Unicode-compatible fonts and terminals (I use iTerm2 + Menlo) + +For Mac users, I highly recommend iTerm 2 + Solarized Dark + +![agnoster theme](https://f.cloud.github.com/assets/1765209/255379/452c668e-8c0b-11e2-8a8e-d1d13e57d15f.png) + + +#### Characteristics + +* If the previous command failed (✘) +* User @ Hostname (if user is not DEFAULT_USER, which can then be set in your profile) +* Git status +* Branch (⭠) or detached head (➦) +* Current branch / SHA1 in detached head state +* Dirty working directory (±, color change) +* Working directory +* Elevated (root) privileges (⚡) + + +Ported from https://gist.github.com/agnoster/3712874. diff --git a/themes/agnoster-mercurial/fish_prompt.fish b/themes/agnoster-mercurial/fish_prompt.fish new file mode 100644 index 0000000..9952c51 --- /dev/null +++ b/themes/agnoster-mercurial/fish_prompt.fish @@ -0,0 +1,174 @@ +# name: Agnoster +# agnoster's Theme - https://gist.github.com/3712874 +# A Powerline-inspired theme for FISH +# +# # README +# +# In order for this theme to render correctly, you will need a +# [Powerline-patched font](https://gist.github.com/1595572). + +## Set this options in your config.fish (if you want to :]) +# set -g theme_display_user yes +# set -g default_user your_normal_user + + + +set -g current_bg NONE +set segment_separator \uE0B0 +set right_segment_separator \uE0B0 +# =========================== +# Helper methods +# =========================== + +set -g __fish_git_prompt_showdirtystate 'yes' +set -g __fish_git_prompt_char_dirtystate '±' +set -g __fish_git_prompt_char_cleanstate '' + +function parse_git_dirty + set -l submodule_syntax + set submodule_syntax "--ignore-submodules=dirty" + set git_dirty (command git status -s $submodule_syntax 2> /dev/null) + if [ -n "$git_dirty" ] + if [ $__fish_git_prompt_showdirtystate = "yes" ] + echo -n "$__fish_git_prompt_char_dirtystate" + end + else + if [ $__fish_git_prompt_showdirtystate = "yes" ] + echo -n "$__fish_git_prompt_char_cleanstate" + end + end +end + + +# =========================== +# Segments functions +# =========================== + +function prompt_segment -d "Function to draw a segment" + set -l bg + set -l fg + if [ -n "$argv[1]" ] + set bg $argv[1] + else + set bg normal + end + if [ -n "$argv[2]" ] + set fg $argv[2] + else + set fg normal + end + if [ "$current_bg" != 'NONE' -a "$argv[1]" != "$current_bg" ] + set_color -b $bg + set_color $current_bg + echo -n "$segment_separator " + set_color -b $bg + set_color $fg + else + set_color -b $bg + set_color $fg + echo -n " " + end + set current_bg $argv[1] + if [ -n "$argv[3]" ] + echo -n -s $argv[3] " " + end +end + +function prompt_finish -d "Close open segments" + if [ -n $current_bg ] + set_color -b normal + set_color $current_bg + echo -n "$segment_separator " + end + set -g current_bg NONE +end + + +# =========================== +# Theme components +# =========================== + +function prompt_user -d "Display actual user if different from $default_user" + if [ "$theme_display_user" = "yes" ] + if [ "$USER" != "$default_user" -o -n "$SSH_CLIENT" ] + set USER_PROMPT (whoami)@(hostname) + prompt_segment black yellow $USER_PROMPT + end + end +end + +function prompt_dir -d "Display the actual directory" + prompt_segment blue black (prompt_pwd) +end + +function prompt_hg -d "Display mercurial state" + set -l branch + set -l state + if command hg id >/dev/null 2>&1 + if command hg prompt >/dev/null 2>&1 + set branch (command hg prompt "{branch}") + set state (command hg prompt "{status}") + set branch_symbol \uE0A0 + if [ "$state" = "!" ] + prompt_segment red white "$branch_symbol $branch ±" + else if [ "$state" = "?" ] + prompt_segment yellow black "$branch_symbol $branch ±" + else + prompt_segment green black "$branch_symbol $branch" + end + end + end +end + + +function prompt_git -d "Display the actual git state" + set -l ref + set -l dirty + if command git rev-parse --is-inside-work-tree >/dev/null 2>&1 + set dirty (parse_git_dirty) + set ref (command git symbolic-ref HEAD 2> /dev/null) + set ref (command git symbolic-ref HEAD 2> /dev/null) + if [ $status -gt 0 ] + set -l branch (command git show-ref --head -s --abbrev |head -n1 2> /dev/null) + set ref "➦ $branch " + end + set branch_symbol \uE0A0 + set -l branch (echo $ref | sed "s-refs/heads/-$branch_symbol -") + if [ "$dirty" != "" ] + prompt_segment yellow black "$branch $dirty" + else + prompt_segment green black "$branch $dirty" + end + end +end + +function prompt_status -d "the symbols for a non zero exit status, root and background jobs" + if [ $RETVAL -ne 0 ] + prompt_segment black red "✘" + end + + # if superuser (uid == 0) + set -l uid (id -u $USER) + if [ $uid -eq 0 ] + prompt_segment black yellow "⚡" + end + + # Jobs display + if [ (jobs -l | wc -l) -gt 0 ] + prompt_segment black cyan "⚙" + end +end + +# =========================== +# Apply theme +# =========================== + +function fish_prompt + set -g RETVAL $status + prompt_status + prompt_user + prompt_dir + prompt_hg + prompt_git + prompt_finish +end