Jelajahi Sumber

Clean up and rewrite some part of zsh prompt

Emmanuel Bouthenot 11 tahun lalu
induk
melakukan
79dfc94911
1 mengubah file dengan 66 tambahan dan 30 penghapusan
  1. 66 30
      .zsh.d/config.d/prompt.zsh

+ 66 - 30
.zsh.d/config.d/prompt.zsh

@@ -6,67 +6,103 @@ setopt prompt_subst
 
 # enable colors
 autoload colors zsh/terminfo
-if [[ "$terminfo[colors]" -ge 8 ]]; then
+if [ "$terminfo[colors]" -ge 8 ]; then
     colors
 fi
-for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE; do
+for color in RED GREEN YELLOW BLUE MAGENTA CYAN ORANGE WHITE; do
     eval PR_$color='%{$terminfo[bold]$fg[${(L)color}]%}'
     eval PR_LIGHT_$color='%{$fg[${(L)color}]%}'
 done
 PR_NO_COLOR="%{$terminfo[sgr0]%}"
 
 export PR_OS_NAME=$(uname -s)
-export PR_OS_ARCH=$(uname -m)
 
 if [ -f /etc/debian_version ]; then
-    PR_OS_NAME="$(lsb_release -is)/$(lsb_release -cs)"
+    if which lsb_release >/dev/null 2>&1 ; then
+        PR_OS_NAME="${PR_LIGHT_GREEN}$(lsb_release -is)${PR_WHITE}/${PR_GREEN}$(lsb_release -cs)"
+    fi
     if [ -f /etc/debian_chroot ]; then
-        PR_OS_NAME="${PR_LIGHT_RED}chroot:${PR_WHITE}${PR_OS_NAME}"
+        PR_OS_NAME="${PR_RED}chroot${PR_WHITE}(${PR_OS_NAME}${PR_WHITE} ${PR_MAGENTA}$(uname -m)${PR_WHITE})"
     fi
 fi
-PR_OS_NAME="${PR_OS_NAME} ${PR_OS_ARCH}"
 
-if [ -n "$SSH_CLIENT" ]; then
-    export PR_OS_SSH="${PR_LIGHT_RED}ssh:"
+if [ -n "${SSH_CLIENT}" ]; then
+    export PR_OS_SSH=" via ${PR_LIGHT_RED}ssh"
 else
     export PR_OS_SSH=
 fi
 
-if [ "$UID" = 0 ]; then
-    export PR_ROOT_PREFIX='*'
-else
-    export PR_ROOT_PREFIX=
-fi
+pr_battery_level() {
+    if command -v acpi >/dev/null 2>&1 ; then
+        acpi --battery 2>/dev/null | sed -r 's/^Battery .*, ([0-9]*)%.*$/\1/'
+    fi
+}
 
-function mytitle {
-    # if running 'xterm like' terminal setting directory name in title bar
-    if [ "$TERM" = "xterm" ]; then
-        echo -ne "\033]0;${PR_ROOT_PREFIX}${1}\007"
+pr_battery() {
+    local battery_level=
+    local level=$(pr_battery_level)
+    if [ -n "$level" ] ; then
+        if [ "$level" -gt 60 ] ; then
+            local bat_color="${PR_GREEN}"
+        elif [ "$level" -gt 25 ] ; then
+            local bat_color="${PR_YELLOW}"
+        else
+            local bat_color="${PR_RED}"
+        fi
+        battery_level=" ${PR_WHITE}⌁${bat_color}${level}${PR_WHITE}%%"
     fi
+    echo -n "${battery_level}"
 }
 
-function preexec {
-    local -a buffer
-    buffer=(${=1})
-    mytitle "$buffer[1]"
+pr_git_branch() {
+    if command -v git >/dev/null 2>&1 ; then
+        git branch 2>/dev/null | sed -n 's/^\* //p'
+    fi
 }
 
-function precmd {
-    mytitle "$(print -P %~)"
+pr_git_prompt() {
+    local git_prompt=
+    local branch=$(pr_git_branch)
+    if [ -n "$branch" ] ; then
+        local modified=$(git diff --name-only | wc -l)
+        local cached=$(git diff --cached --name-only | wc -l)
+        git_prompt="${PR_YELLOW}${branch}${PR_NO_COLOR}"
+        if [ "$modified" -gt 0 ]; then
+            git_prompt="${git_prompt} ${PR_RED}${modified}${PR_NO_COLOR}⇆"
+        fi
+        if [ "$cached" -gt 0 ]; then
+            git_prompt="${git_prompt} ${PR_LIGHT_GREEN}${cached}${PR_NO_COLOR}⇆"
+        fi
+        local commits=$(git rev-list --no-merges --count origin/${branch}..${branch} 2>/dev/null)
+        if [ "$commits" -gt 0 ]; then
+            git_prompt="${git_prompt} ${PR_MAGENTA}${commits}${PR_NO_COLOR}↑"
+        fi
+
+    fi
+    echo -n "${git_prompt}"
 }
 
+function preexec {}
+
+function precmd {}
+
 myprompt() {
     if [ "$TERM" = "dumb" ]; then
         PROMPT="-(%n@%m)-(%(!.%d.%~))->"
     else
         PROMPT='\
-${PR_BLUE}\
-%1(j.-(${PR_YELLOW}jobs:${PR_WHITE}%j${PR_BLUE}).)\
-${PR_BLUE}-(\
-%(!.${PR_RED}%n.${PR_LIGHT_GREEN}%n)\
-${PR_WHITE}@${PR_OS_SSH}${PR_MAGENTA}%m${PR_WHITE} ${PR_OS_PTY}${PR_BLUE})-(\
-${PR_WHITE}${PR_OS_NAME}${PR_BLUE})-(${PR_WHITE}%(!.%d.%~)${PR_BLUE})
-%0(?..${PR_RED}ret:${PR_WHITE}%?${PR_BLUE})>${PR_NO_COLOR}'
+ %(!.${PR_RED}%n.${PR_LIGHT_GREEN}%n)\
+${PR_WHITE} at \
+${PR_MAGENTA}%m\
+${PR_WHITE}${PR_OS_SSH}\
+${PR_WHITE} in \
+${PR_GREEN}%(!.%d.%~)\
+${PR_WHITE} on \
+$(pr_git_prompt)\
+%1(j.${PR_WHITE} with ${PR_LIGHT_GREEN}%j${PR_WHITE} jobs.)
+%0(?..${PR_RED}%?)\
+%(!.${PR_LIGHT_RED}.${PR_LIGHT_CYAN})>${PR_NO_COLOR}'
+    RPROMPT='$(pr_battery) ${PR_OS_NAME}'
     fi
 }