merge latest upstream
This commit is contained in:
@@ -42,6 +42,12 @@ SCM_GIT_STAGED_CHAR="S:"
|
||||
SCM_GIT_STASH_CHAR_PREFIX="{"
|
||||
SCM_GIT_STASH_CHAR_SUFFIX="}"
|
||||
|
||||
SCM_P4='p4'
|
||||
SCM_P4_CHAR='⌛'
|
||||
SCM_P4_CHANGES_CHAR='C:'
|
||||
SCM_P4_DEFAULT_CHAR='D:'
|
||||
SCM_P4_OPENED_CHAR='O:'
|
||||
|
||||
SCM_HG='hg'
|
||||
SCM_HG_CHAR='☿'
|
||||
|
||||
@@ -69,20 +75,22 @@ RBFU_THEME_PROMPT_SUFFIX='|'
|
||||
|
||||
function scm {
|
||||
if [[ "$SCM_CHECK" = false ]]; then SCM=$SCM_NONE
|
||||
elif [[ -f .git/HEAD ]]; then SCM=$SCM_GIT
|
||||
elif [[ -f .git/HEAD ]] && which git &> /dev/null; then SCM=$SCM_GIT
|
||||
elif which git &> /dev/null && [[ -n "$(git rev-parse --is-inside-work-tree 2> /dev/null)" ]]; then SCM=$SCM_GIT
|
||||
elif [[ -d .hg ]]; then SCM=$SCM_HG
|
||||
elif which p4 &> /dev/null && [[ -n "$(p4 set P4CLIENT 2> /dev/null)" ]]; then SCM=$SCM_P4
|
||||
elif [[ -d .hg ]] && which hg &> /dev/null; then SCM=$SCM_HG
|
||||
elif which hg &> /dev/null && [[ -n "$(hg root 2> /dev/null)" ]]; then SCM=$SCM_HG
|
||||
elif [[ -d .svn ]]; then SCM=$SCM_SVN
|
||||
elif [[ -d .svn ]] && which svn &> /dev/null; then SCM=$SCM_SVN
|
||||
else SCM=$SCM_NONE
|
||||
fi
|
||||
}
|
||||
|
||||
function scm_prompt_char {
|
||||
if [[ -z ${SCM:-} ]]; then scm; fi
|
||||
if [[ ${SCM:-} == $SCM_GIT ]]; then SCM_CHAR=$SCM_GIT_CHAR
|
||||
elif [[ ${SCM:-} == $SCM_HG ]]; then SCM_CHAR=$SCM_HG_CHAR
|
||||
elif [[ ${SCM:-} == $SCM_SVN ]]; then SCM_CHAR=$SCM_SVN_CHAR
|
||||
if [[ -z $SCM ]]; then scm; fi
|
||||
if [[ $SCM == $SCM_GIT ]]; then SCM_CHAR=$SCM_GIT_CHAR
|
||||
elif [[ $SCM == $SCM_P4 ]]; then SCM_CHAR=$SCM_P4_CHAR
|
||||
elif [[ $SCM == $SCM_HG ]]; then SCM_CHAR=$SCM_HG_CHAR
|
||||
elif [[ $SCM == $SCM_SVN ]]; then SCM_CHAR=$SCM_SVN_CHAR
|
||||
else SCM_CHAR=$SCM_NONE_CHAR
|
||||
fi
|
||||
}
|
||||
@@ -92,9 +100,10 @@ function scm_prompt_vars {
|
||||
scm_prompt_char
|
||||
SCM_DIRTY=0
|
||||
SCM_STATE=''
|
||||
[[ ${SCM:-} == $SCM_GIT ]] && git_prompt_vars && return
|
||||
[[ ${SCM:-} == $SCM_HG ]] && hg_prompt_vars && return
|
||||
[[ ${SCM:-} == $SCM_SVN ]] && svn_prompt_vars && return
|
||||
[[ $SCM == $SCM_GIT ]] && git_prompt_vars && return
|
||||
[[ $SCM == $SCM_P4 ]] && p4_prompt_vars && return
|
||||
[[ $SCM == $SCM_HG ]] && hg_prompt_vars && return
|
||||
[[ $SCM == $SCM_SVN ]] && svn_prompt_vars && return
|
||||
}
|
||||
|
||||
function scm_prompt_info {
|
||||
@@ -125,8 +134,9 @@ function scm_prompt_info_common {
|
||||
fi
|
||||
|
||||
# TODO: consider adding minimal status information for hg and svn
|
||||
[[ ${SCM:-} == ${SCM_HG} ]] && hg_prompt_info && return
|
||||
[[ ${SCM:-} == ${SCM_SVN} ]] && svn_prompt_info && return
|
||||
[[ ${SCM} == ${SCM_P4} ]] && p4_prompt_info && return
|
||||
[[ ${SCM} == ${SCM_HG} ]] && hg_prompt_info && return
|
||||
[[ ${SCM} == ${SCM_SVN} ]] && svn_prompt_info && return
|
||||
}
|
||||
|
||||
function git_prompt_minimal_info {
|
||||
@@ -193,6 +203,26 @@ function git_prompt_vars {
|
||||
SCM_CHANGE=$(_git-short-sha 2>/dev/null || echo "")
|
||||
}
|
||||
|
||||
function p4_prompt_vars {
|
||||
IFS=$'\t' read -r \
|
||||
opened_count non_default_changes default_count \
|
||||
add_file_count edit_file_count delete_file_count \
|
||||
<<< "$(_p4-opened-counts)"
|
||||
if [[ "${opened_count}" -gt 0 ]]; then
|
||||
SCM_DIRTY=1
|
||||
SCM_STATE=${SCM_THEME_PROMPT_DIRTY}
|
||||
[[ "${opened_count}" -gt 0 ]] && SCM_BRANCH+=" ${SCM_P4_OPENED_CHAR}${opened_count}"
|
||||
[[ "${non_default_changes}" -gt 0 ]] && SCM_BRANCH+=" ${SCM_P4_CHANGES_CHAR}${non_default_changes}"
|
||||
[[ "${default_count}" -gt 0 ]] && SCM_BRANCH+=" ${SCM_P4_DEFAULT_CHAR}${default_count}"
|
||||
else
|
||||
SCM_DIRTY=0
|
||||
SCM_STATE=${SCM_THEME_PROMPT_DIRTY}
|
||||
fi
|
||||
|
||||
SCM_PREFIX=${P4_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
|
||||
SCM_SUFFIX=${P4_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
|
||||
}
|
||||
|
||||
function svn_prompt_vars {
|
||||
if [[ -n $(svn status 2> /dev/null) ]]; then
|
||||
SCM_DIRTY=1
|
||||
@@ -363,6 +393,11 @@ function git_prompt_info {
|
||||
echo -e "${SCM_PREFIX}${SCM_BRANCH}${SCM_STATE}${SCM_SUFFIX}"
|
||||
}
|
||||
|
||||
function p4_prompt_info() {
|
||||
p4_prompt_vars
|
||||
echo -e "${SCM_PREFIX}${SCM_BRANCH}:${SCM_CHANGE}${SCM_STATE}${SCM_SUFFIX}"
|
||||
}
|
||||
|
||||
function svn_prompt_info {
|
||||
svn_prompt_vars
|
||||
echo -e "${SCM_PREFIX}${SCM_BRANCH}${SCM_STATE}${SCM_SUFFIX}"
|
||||
|
||||
45
themes/p4helpers.theme.bash
Normal file
45
themes/p4helpers.theme.bash
Normal file
@@ -0,0 +1,45 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
function _p4-opened {
|
||||
timeout 2.0s p4 opened -s 2> /dev/null
|
||||
}
|
||||
|
||||
function _p4-opened-counts {
|
||||
# Return the following counts seperated by tabs:
|
||||
# - count of opened files
|
||||
# - count of pending changesets (other than defaults)
|
||||
# - count of files in the default changeset
|
||||
# - count of opened files in add mode
|
||||
# - count of opened files in edit mode
|
||||
# - count of opened files in delete mode
|
||||
_p4-opened | awk '
|
||||
BEGIN {
|
||||
opened=0;
|
||||
type_array["edit"]=0;
|
||||
type_array["add"]=0;
|
||||
type_array["delete"]=0;
|
||||
change_array["change"]=0;
|
||||
}
|
||||
{
|
||||
# p4 opened prints one file per line, and all lines begin with "//"
|
||||
# Here is an examples:
|
||||
#
|
||||
# $ p4 opened
|
||||
# //depot/some/file.py#4 - edit change 716431 (text)
|
||||
# //depot/another/file.py - edit default change (text)
|
||||
# //now/add/a/newfile.sh - add change 435645 (text+k)
|
||||
#
|
||||
#
|
||||
if ($1 ~ /^\/\//) {
|
||||
opened += 1
|
||||
change_array[$5] += 1
|
||||
type_array[$3] += 1
|
||||
}
|
||||
}
|
||||
END {
|
||||
default_changes=change_array["change"];
|
||||
non_default_changes=length(change_array) - 1;
|
||||
print opened "\t" non_default_changes "\t" default_changes "\t" type_array["add"] "\t" type_array["edit"] "\t" type_array["delete"]
|
||||
}
|
||||
'
|
||||
}
|
||||
@@ -46,14 +46,19 @@ The time/date is printed by the `date` command, so refer to its man page to chan
|
||||
|
||||
The contents of both prompt sides can be "reordered", all the "segments" (every piece of information) can take any place. The currently available segments are:
|
||||
|
||||
* battery
|
||||
* clock
|
||||
* cwd
|
||||
* in_vim
|
||||
* python_venv
|
||||
* ruby
|
||||
* scm
|
||||
* user_info
|
||||
* `battery` - Battery information (you'll need to enable the `battery` plugin)
|
||||
* `clock` - Current time in `HH:MM:SS` format
|
||||
* `cwd` - Current working directory including full folder hierarchy (c.f. `wd`)
|
||||
* `hostname` - Host name of machine
|
||||
* `in_vim` - Show identifier if running in `:terminal` from vim
|
||||
* `last_status` - Exit status of last run command
|
||||
* `python_venv` - Python virtual environment information (`virtualenv`, `venv`
|
||||
and `conda` supported)
|
||||
* `ruby` - Current ruby version if using `rvm`
|
||||
* `scm` - Version control information, `git`
|
||||
* `user_info` - Current user
|
||||
* `wd` - Working directory, like `cwd` but doesn't show the full folder
|
||||
hierarchy, only the directory you're currently in.
|
||||
|
||||
Two variables can be defined to set the order of the prompt segments:
|
||||
|
||||
|
||||
@@ -51,6 +51,8 @@ THEME_CLOCK_FORMAT=${THEME_CLOCK_FORMAT:="%H:%M:%S"}
|
||||
IN_VIM_THEME_PROMPT_COLOR=245
|
||||
IN_VIM_THEME_PROMPT_TEXT="vim"
|
||||
|
||||
HOST_THEME_PROMPT_COLOR=0
|
||||
|
||||
POWERLINE_LEFT_PROMPT=${POWERLINE_LEFT_PROMPT:="scm python_venv ruby cwd"}
|
||||
POWERLINE_RIGHT_PROMPT=${POWERLINE_RIGHT_PROMPT:="in_vim clock battery user_info"}
|
||||
|
||||
|
||||
@@ -42,16 +42,21 @@ The time/date is printed by the `date` command, so refer to its man page to chan
|
||||
|
||||
The contents of the prompt can be "reordered", all the "segments" (every piece of information) can take any place. The currently available segments are:
|
||||
|
||||
* battery
|
||||
* clock
|
||||
* cwd
|
||||
* in_vim
|
||||
* python_venv
|
||||
* ruby
|
||||
* scm
|
||||
* user_info
|
||||
* `battery` - Battery information (you'll need to enable the `battery` plugin)
|
||||
* `clock` - Current time in `HH:MM:SS` format
|
||||
* `cwd` - Current working directory including full folder hierarchy (c.f. `wd`)
|
||||
* `hostname` - Host name of machine
|
||||
* `in_vim` - Show identifier if running in `:terminal` from vim
|
||||
* `last_status` - Exit status of last run command
|
||||
* `python_venv` - Python virtual environment information (`virtualenv`, `venv`
|
||||
and `conda` supported)
|
||||
* `ruby` - Current ruby version if using `rvm`
|
||||
* `scm` - Version control information, `git`
|
||||
* `user_info` - Current user
|
||||
* `wd` - Working directory, like `cwd` but doesn't show the full folder
|
||||
hierarchy, only the directory you're currently in.
|
||||
|
||||
A variables can be defined to set the order of the prompt segments:
|
||||
A variable can be defined to set the order of the prompt segments:
|
||||
|
||||
POWERLINE_PROMPT="user_info scm python_venv ruby cwd"
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ function __powerline_left_segment {
|
||||
local OLD_IFS="${IFS}"; IFS="|"
|
||||
local params=( $1 )
|
||||
IFS="${OLD_IFS}"
|
||||
local separator_char=""
|
||||
local separator_char="${POWERLINE_LEFT_SEPARATOR}"
|
||||
local separator=""
|
||||
|
||||
if [[ "${SEGMENTS_AT_LEFT}" -gt 0 ]]; then
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
POWERLINE_LEFT_SEPARATOR=${POWERLINE_LEFT_SEPARATOR:=""}
|
||||
|
||||
. "$BASH_IT/themes/powerline-naked/powerline-naked.base.bash"
|
||||
|
||||
PROMPT_CHAR=${POWERLINE_PROMPT_CHAR:=""}
|
||||
POWERLINE_LEFT_SEPARATOR=${POWERLINE_LEFT_SEPARATOR:=""}
|
||||
|
||||
USER_INFO_SSH_CHAR=${POWERLINE_USER_INFO_SSH_CHAR:=" "}
|
||||
USER_INFO_THEME_PROMPT_COLOR=240
|
||||
@@ -47,6 +48,8 @@ THEME_CLOCK_FORMAT=${THEME_CLOCK_FORMAT:="%H:%M:%S"}
|
||||
IN_VIM_THEME_PROMPT_COLOR=245
|
||||
IN_VIM_THEME_PROMPT_TEXT="vim"
|
||||
|
||||
HOST_THEME_PROMPT_COLOR=254
|
||||
|
||||
POWERLINE_PROMPT=${POWERLINE_PROMPT:="user_info scm python_venv ruby cwd"}
|
||||
|
||||
safe_append_prompt_command __powerline_prompt_command
|
||||
|
||||
@@ -40,16 +40,21 @@ The time/date is printed by the `date` command, so refer to its man page to chan
|
||||
|
||||
The contents of the prompt can be "reordered", all the "segments" (every piece of information) can take any place. The currently available segments are:
|
||||
|
||||
* battery
|
||||
* clock
|
||||
* cwd
|
||||
* in_vim
|
||||
* python_venv
|
||||
* ruby
|
||||
* scm
|
||||
* user_info
|
||||
* `battery` - Battery information (you'll need to enable the `battery` plugin)
|
||||
* `clock` - Current time in `HH:MM:SS` format
|
||||
* `cwd` - Current working directory including full folder hierarchy (c.f. `wd`)
|
||||
* `hostname` - Host name of machine
|
||||
* `in_vim` - Show identifier if running in `:terminal` from vim
|
||||
* `last_status` - Exit status of last run command
|
||||
* `python_venv` - Python virtual environment information (`virtualenv`, `venv`
|
||||
and `conda` supported)
|
||||
* `ruby` - Current ruby version if using `rvm`
|
||||
* `scm` - Version control information, `git`
|
||||
* `user_info` - Current user
|
||||
* `wd` - Working directory, like `cwd` but doesn't show the full folder
|
||||
hierarchy, only the directory you're currently in.
|
||||
|
||||
A variables can be defined to set the order of the prompt segments:
|
||||
A variable can be defined to set the order of the prompt segments:
|
||||
|
||||
POWERLINE_PROMPT="user_info scm python_venv ruby cwd"
|
||||
|
||||
|
||||
@@ -43,6 +43,8 @@ THEME_CLOCK_FORMAT=${THEME_CLOCK_FORMAT:="%H:%M:%S"}
|
||||
IN_VIM_THEME_PROMPT_COLOR=245
|
||||
IN_VIM_THEME_PROMPT_TEXT="vim"
|
||||
|
||||
HOST_THEME_PROMPT_COLOR=0
|
||||
|
||||
POWERLINE_PROMPT=${POWERLINE_PROMPT:="user_info scm python_venv ruby cwd"}
|
||||
|
||||
safe_append_prompt_command __powerline_prompt_command
|
||||
|
||||
@@ -44,16 +44,21 @@ The time/date is printed by the `date` command, so refer to its man page to chan
|
||||
|
||||
The contents of the prompt can be "reordered", all the "segments" (every piece of information) can take any place. The currently available segments are:
|
||||
|
||||
* battery
|
||||
* clock
|
||||
* cwd
|
||||
* in_vim
|
||||
* python_venv
|
||||
* ruby
|
||||
* scm
|
||||
* user_info
|
||||
* `battery` - Battery information (you'll need to enable the `battery` plugin)
|
||||
* `clock` - Current time in `HH:MM:SS` format
|
||||
* `cwd` - Current working directory including full folder hierarchy (c.f. `wd`)
|
||||
* `hostname` - Host name of machine
|
||||
* `in_vim` - Show identifier if running in `:terminal` from vim
|
||||
* `last_status` - Exit status of last run command
|
||||
* `python_venv` - Python virtual environment information (`virtualenv`, `venv`
|
||||
and `conda` supported)
|
||||
* `ruby` - Current ruby version if using `rvm`
|
||||
* `scm` - Version control information, `git`
|
||||
* `user_info` - Current user
|
||||
* `wd` - Working directory, like `cwd` but doesn't show the full folder
|
||||
hierarchy, only the directory you're currently in.
|
||||
|
||||
A variables can be defined to set the order of the prompt segments:
|
||||
A variable can be defined to set the order of the prompt segments:
|
||||
|
||||
POWERLINE_PROMPT="user_info scm python_venv ruby cwd"
|
||||
|
||||
|
||||
@@ -84,6 +84,8 @@ function __powerline_scm_prompt {
|
||||
fi
|
||||
if [[ "${SCM_GIT_CHAR}" == "${SCM_CHAR}" ]]; then
|
||||
scm_prompt+="${SCM_CHAR}${SCM_BRANCH}${SCM_STATE}"
|
||||
elif [[ "${SCM_P4_CHAR}" == "${SCM_CHAR}" ]]; then
|
||||
scm_prompt+="${SCM_CHAR}${SCM_BRANCH}${SCM_STATE}"
|
||||
fi
|
||||
echo "${scm_prompt}${scm}|${color}"
|
||||
fi
|
||||
|
||||
@@ -46,6 +46,8 @@ THEME_CLOCK_FORMAT=${THEME_CLOCK_FORMAT:="%H:%M:%S"}
|
||||
IN_VIM_THEME_PROMPT_COLOR=245
|
||||
IN_VIM_THEME_PROMPT_TEXT="vim"
|
||||
|
||||
HOST_THEME_PROMPT_COLOR=0
|
||||
|
||||
POWERLINE_PROMPT=${POWERLINE_PROMPT:="user_info scm python_venv ruby cwd"}
|
||||
|
||||
safe_append_prompt_command __powerline_prompt_command
|
||||
|
||||
Reference in New Issue
Block a user