2012-08-04 06:05:03 -04:00
|
|
|
################################################################################
|
|
|
|
# LIQUID PROMPT
|
2012-08-11 18:46:05 -04:00
|
|
|
# An intelligent and non intrusive prompt for bash and zsh
|
2012-08-04 06:05:03 -04:00
|
|
|
################################################################################
|
|
|
|
|
2012-07-07 05:35:58 -04:00
|
|
|
|
|
|
|
# Licensed under the AGPL version 3
|
|
|
|
#
|
|
|
|
# This program is free software: you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU Affero General Public License as
|
|
|
|
# published by the Free Software Foundation, either version 3 of the
|
|
|
|
# License, or (at your option) any later version.
|
|
|
|
#
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
# GNU Affero General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
2012-08-04 06:05:03 -04:00
|
|
|
###########
|
|
|
|
# AUTHORS #
|
|
|
|
###########
|
|
|
|
|
2013-09-24 16:44:25 -04:00
|
|
|
# Alex Prengère <alexprengere@gmail.com> # Untracked git files
|
|
|
|
# Anthony Gelibert <anthony.gelibert@me.com> # Several fix
|
2013-03-13 07:14:48 -04:00
|
|
|
# Aurelien Requiem <aurelien@requiem.fr> # Major clean refactoring, variable path length, error codes, several bugfixes.
|
2013-09-24 16:44:25 -04:00
|
|
|
# Brendan Fahy <bmfahy@gmail.com> # Postfix variable
|
2013-03-13 07:14:48 -04:00
|
|
|
# Clément Mathieu <clement@unportant.info> # Bazaar support
|
2013-09-24 16:44:25 -04:00
|
|
|
# David Loureiro <david.loureiro@sysfera.com> # Small portability fix
|
2013-05-20 10:47:31 -04:00
|
|
|
# Étienne Deparis <etienne@depar.is> # Fossil support
|
2013-03-13 07:14:48 -04:00
|
|
|
# Florian Le Frioux <florian@lefrioux.fr> # Use ± mark when root in VCS dir.
|
2013-12-16 16:30:54 -05:00
|
|
|
# François Schmidts <francois.schmidts@gmail.com> # Initial PROMPT_DIRTRIM support
|
2013-03-13 07:14:48 -04:00
|
|
|
# Frédéric Lepied <flepied@gmail.com> # Python virtual env
|
|
|
|
# Jonas Bengtsson <jonas.b@gmail.com> # Git remotes fix
|
|
|
|
# Joris Dedieu <joris@pontiac3.nfrance.com> # Portability framework, FreeBSD support, bugfixes.
|
2013-09-24 16:44:25 -04:00
|
|
|
# Joris Vaillant <joris.vaillant@gmail.com> # Small git fix
|
|
|
|
# Luc Didry <luc@fiat-tux.fr> # ZSH port, several fix
|
2013-03-13 07:14:48 -04:00
|
|
|
# Ludovic Rousseau <ludovic.rousseau@gmail.com> # Lot of bugfixes.
|
2013-06-11 13:32:02 -04:00
|
|
|
# Markus Dreseler <github@dreseler.de> # Runtime of last command
|
2013-09-24 16:44:25 -04:00
|
|
|
# Nicolas Lacourte <nicolas@dotinfra.fr> # Screen title
|
2013-11-30 10:06:41 -05:00
|
|
|
# nojhan <nojhan@gmail.com> # Original author.
|
|
|
|
# Olivier Mengué <dolmen@cpan.org> # Major optimizations, refactorings everywhere; current maintainer
|
2013-09-24 16:44:25 -04:00
|
|
|
# Poil <poil@quake.fr> # Speed improvements
|
2014-01-06 13:51:01 -05:00
|
|
|
# Rolf Morel <rolfmorel@gmail.com> # "Shorten path" refactoring and fixes
|
2013-03-13 07:14:48 -04:00
|
|
|
# Thomas Debesse <thomas.debesse@gmail.com> # Fix columns use.
|
|
|
|
# Yann 'Ze' Richard <ze@nbox.org> # Do not fail on missing commands.
|
2012-08-04 06:05:03 -04:00
|
|
|
|
|
|
|
# See the README.md file for a summary of features.
|
|
|
|
|
2014-01-07 16:22:09 -05:00
|
|
|
# Issue #161: do not load if not an interactive shell
|
|
|
|
test -z "$TERM" -o "x$TERM" = dumb && return
|
|
|
|
|
2012-08-14 06:08:43 -04:00
|
|
|
# Check for recent enough version of bash.
|
2014-01-07 16:22:09 -05:00
|
|
|
if test -n "$BASH_VERSION" -a -n "$PS1" ; then
|
2012-08-11 18:46:05 -04:00
|
|
|
bash=${BASH_VERSION%.*}; bmajor=${bash%.*}; bminor=${bash#*.}
|
|
|
|
if [[ $bmajor -lt 3 ]] || [[ $bmajor -eq 3 && $bminor -lt 2 ]]; then
|
|
|
|
unset bash bmajor bminor
|
|
|
|
return
|
|
|
|
fi
|
2012-07-17 03:23:44 -04:00
|
|
|
unset bash bmajor bminor
|
2012-08-11 18:46:05 -04:00
|
|
|
|
2013-05-04 18:11:18 -04:00
|
|
|
_LP_SHELL_bash=true
|
|
|
|
_LP_SHELL_zsh=false
|
2012-08-13 17:15:24 -04:00
|
|
|
_LP_OPEN_ESC="\["
|
2012-08-13 18:37:36 -04:00
|
|
|
_LP_CLOSE_ESC="\]"
|
2012-08-13 17:15:24 -04:00
|
|
|
_LP_USER_SYMBOL="\u"
|
|
|
|
_LP_HOST_SYMBOL="\h"
|
2013-05-04 16:58:12 -04:00
|
|
|
_LP_TIME_SYMBOL="\t"
|
2013-06-12 20:13:17 -04:00
|
|
|
_LP_MARK_SYMBOL='\$'
|
2013-06-02 05:02:34 -04:00
|
|
|
_LP_FIRST_INDEX=0
|
2013-12-17 15:39:48 -05:00
|
|
|
_LP_PWD_SYMBOL="\\w"
|
2012-08-14 06:08:43 -04:00
|
|
|
elif test -n "$ZSH_VERSION" ; then
|
2013-05-04 18:11:18 -04:00
|
|
|
_LP_SHELL_bash=false
|
|
|
|
_LP_SHELL_zsh=true
|
2012-08-13 17:15:24 -04:00
|
|
|
_LP_OPEN_ESC="%{"
|
2012-08-13 18:37:36 -04:00
|
|
|
_LP_CLOSE_ESC="%}"
|
2012-08-13 17:15:24 -04:00
|
|
|
_LP_USER_SYMBOL="%n"
|
|
|
|
_LP_HOST_SYMBOL="%m"
|
2013-01-25 07:17:05 -05:00
|
|
|
_LP_TIME_SYMBOL="%*"
|
2013-06-12 20:13:17 -04:00
|
|
|
_LP_MARK_SYMBOL='%(!.#.%%)'
|
2013-06-02 05:02:34 -04:00
|
|
|
_LP_FIRST_INDEX=1
|
2013-12-17 15:39:48 -05:00
|
|
|
_LP_PWD_SYMBOL="%~"
|
2012-08-14 06:08:43 -04:00
|
|
|
else
|
2012-08-14 08:12:33 -04:00
|
|
|
echo "liquidprompt: shell not supported" >&2
|
|
|
|
return
|
2012-07-07 03:32:29 -04:00
|
|
|
fi
|
|
|
|
|
2012-07-22 16:28:50 -04:00
|
|
|
|
|
|
|
###############
|
2012-08-14 05:10:12 -04:00
|
|
|
# OS specific #
|
2012-07-22 16:28:50 -04:00
|
|
|
###############
|
|
|
|
|
2012-08-13 17:15:24 -04:00
|
|
|
# LP_OS detection, default to Linux
|
2012-07-22 16:11:09 -04:00
|
|
|
case $(uname) in
|
2012-08-14 16:56:44 -04:00
|
|
|
FreeBSD) LP_OS=FreeBSD ;;
|
|
|
|
DragonFly) LP_OS=FreeBSD ;;
|
2013-07-01 07:42:48 -04:00
|
|
|
OpenBSD) LP_OS=OpenBSD ;;
|
2012-08-21 17:35:14 -04:00
|
|
|
Darwin) LP_OS=Darwin ;;
|
2012-08-14 16:56:44 -04:00
|
|
|
SunOS) LP_OS=SunOS ;;
|
|
|
|
*) LP_OS=Linux ;;
|
2012-07-22 16:11:09 -04:00
|
|
|
esac
|
2012-07-07 03:32:29 -04:00
|
|
|
|
2012-08-14 17:24:55 -04:00
|
|
|
# Get cpu count
|
|
|
|
case "$LP_OS" in
|
2012-08-15 18:22:49 -04:00
|
|
|
Linux) _lp_CPUNUM=$( nproc 2>/dev/null || grep -c '^[Pp]rocessor' /proc/cpuinfo ) ;;
|
2013-07-01 07:42:48 -04:00
|
|
|
FreeBSD|Darwin|OpenBSD) _lp_CPUNUM=$( sysctl -n hw.ncpu ) ;;
|
2012-08-14 17:24:55 -04:00
|
|
|
SunOS) _lp_CPUNUM=$( kstat -m cpu_info | grep -c "module: cpu_info" ) ;;
|
|
|
|
esac
|
2012-07-20 06:50:05 -04:00
|
|
|
|
2013-12-27 13:14:48 -05:00
|
|
|
# Extended regexp patterns for sed
|
|
|
|
# GNU/BSD sed
|
|
|
|
_LP_SED_EXTENDED=r
|
|
|
|
[[ "$LP_OS" = Darwin ]] && _LP_SED_EXTENDED=E
|
|
|
|
|
2012-07-20 06:50:05 -04:00
|
|
|
|
|
|
|
# get current load
|
2012-08-14 18:11:34 -04:00
|
|
|
case "$LP_OS" in
|
|
|
|
Linux)
|
|
|
|
_lp_cpu_load () {
|
|
|
|
local load eol
|
|
|
|
read load eol < /proc/loadavg
|
|
|
|
echo "$load"
|
|
|
|
}
|
|
|
|
;;
|
2013-06-17 15:47:51 -04:00
|
|
|
FreeBSD|Darwin|OpenBSD)
|
2012-08-14 18:11:34 -04:00
|
|
|
_lp_cpu_load () {
|
|
|
|
local bol load eol
|
2013-06-17 15:09:43 -04:00
|
|
|
# If you have problems with syntax coloring due to the following
|
|
|
|
# line, do this: ln -s liquidprompt liquidprompt.bash
|
|
|
|
# and edit liquidprompt.bash
|
|
|
|
read bol load eol <<<$( LANG=C sysctl -n vm.loadavg )
|
2012-08-14 18:11:34 -04:00
|
|
|
echo "$load"
|
|
|
|
}
|
|
|
|
;;
|
|
|
|
SunOS)
|
|
|
|
_lp_cpu_load () {
|
|
|
|
LANG=C uptime | awk '{print substr($10,0,length($10))}'
|
|
|
|
}
|
|
|
|
esac
|
2012-07-23 10:05:49 -04:00
|
|
|
|
2013-12-16 16:23:11 -05:00
|
|
|
# Reset so all PWD dependent variables are computed after loading
|
|
|
|
unset LP_OLD_PWD
|
2012-07-17 03:50:30 -04:00
|
|
|
|
2012-08-14 05:10:12 -04:00
|
|
|
#################
|
|
|
|
# CONFIGURATION #
|
|
|
|
#################
|
|
|
|
|
2012-08-21 06:13:06 -04:00
|
|
|
# The following code is run just once. But it is encapsulated in a function
|
|
|
|
# to benefit of 'local' variables.
|
|
|
|
#
|
|
|
|
# What we do here:
|
2012-08-21 01:51:40 -04:00
|
|
|
# 1. Setup variables that can be used by the user: the "API" of liquidprompt
|
|
|
|
# for config/theme. Those variables are local to the function.
|
|
|
|
# In practice, this is only color variables.
|
|
|
|
# 2. Setup default values
|
|
|
|
# 3. Load the configuration
|
2012-08-14 05:10:12 -04:00
|
|
|
_lp_source_config()
|
|
|
|
{
|
2012-08-21 01:14:00 -04:00
|
|
|
|
2012-08-21 01:21:25 -04:00
|
|
|
# TermInfo feature detection
|
2012-08-21 01:52:25 -04:00
|
|
|
local ti_sgr0="$( { tput sgr0 || tput me ; } 2>/dev/null )"
|
|
|
|
local ti_bold="$( { tput bold || tput md ; } 2>/dev/null )"
|
|
|
|
local ti_setaf
|
2012-08-21 01:21:25 -04:00
|
|
|
if tput setaf >/dev/null 2>&1 ; then
|
2012-08-21 01:52:25 -04:00
|
|
|
ti_setaf () { tput setaf "$1" ; }
|
2012-08-21 01:21:25 -04:00
|
|
|
elif tput AF >/dev/null 2>&1 ; then
|
|
|
|
# *BSD
|
2012-08-21 01:52:25 -04:00
|
|
|
ti_setaf () { tput AF "$1" ; }
|
2013-07-01 07:42:48 -04:00
|
|
|
elif tput AF 1 >/dev/null 2>&1 ; then
|
|
|
|
# OpenBSD
|
|
|
|
ti_setaf () { tput AF "$1" ; }
|
2012-08-21 01:21:25 -04:00
|
|
|
else
|
|
|
|
echo "liquidprompt: terminal $TERM not supported" >&2
|
2012-08-21 01:52:25 -04:00
|
|
|
ti_setaf () { : ; }
|
2012-08-21 01:21:25 -04:00
|
|
|
fi
|
2012-07-22 16:11:09 -04:00
|
|
|
|
2012-08-21 01:31:17 -04:00
|
|
|
# Colors: variables are local so they will have a value only
|
|
|
|
# during config loading and will not conflict with other values
|
|
|
|
# with the same names defined by the user outside the config.
|
2012-08-21 01:52:25 -04:00
|
|
|
local BOLD="${_LP_OPEN_ESC}${ti_bold}${_LP_CLOSE_ESC}"
|
2012-07-22 16:11:09 -04:00
|
|
|
|
2012-08-21 01:52:25 -04:00
|
|
|
local BLACK="${_LP_OPEN_ESC}$(ti_setaf 0)${_LP_CLOSE_ESC}"
|
|
|
|
local BOLD_GRAY="${_LP_OPEN_ESC}${ti_bold}$(ti_setaf 0)${_LP_CLOSE_ESC}"
|
|
|
|
local WHITE="${_LP_OPEN_ESC}$(ti_setaf 7)${_LP_CLOSE_ESC}"
|
|
|
|
local BOLD_WHITE="${_LP_OPEN_ESC}${ti_bold}$(ti_setaf 7)${_LP_CLOSE_ESC}"
|
2012-07-22 16:11:09 -04:00
|
|
|
|
2012-08-21 01:52:25 -04:00
|
|
|
local RED="${_LP_OPEN_ESC}$(ti_setaf 1)${_LP_CLOSE_ESC}"
|
|
|
|
local BOLD_RED="${_LP_OPEN_ESC}${ti_bold}$(ti_setaf 1)${_LP_CLOSE_ESC}"
|
|
|
|
local WARN_RED="${_LP_OPEN_ESC}$(ti_setaf 0 ; tput setab 1)${_LP_CLOSE_ESC}"
|
|
|
|
local CRIT_RED="${_LP_OPEN_ESC}${ti_bold}$(ti_setaf 7 ; tput setab 1)${_LP_CLOSE_ESC}"
|
|
|
|
local DANGER_RED="${_LP_OPEN_ESC}${ti_bold}$(ti_setaf 3 ; tput setab 1)${_LP_CLOSE_ESC}"
|
2012-08-14 04:56:34 -04:00
|
|
|
|
2012-08-21 01:52:25 -04:00
|
|
|
local GREEN="${_LP_OPEN_ESC}$(ti_setaf 2)${_LP_CLOSE_ESC}"
|
|
|
|
local BOLD_GREEN="${_LP_OPEN_ESC}${ti_bold}$(ti_setaf 2)${_LP_CLOSE_ESC}"
|
2012-07-22 16:11:09 -04:00
|
|
|
|
2012-08-21 01:52:25 -04:00
|
|
|
local YELLOW="${_LP_OPEN_ESC}$(ti_setaf 3)${_LP_CLOSE_ESC}"
|
|
|
|
local BOLD_YELLOW="${_LP_OPEN_ESC}${ti_bold}$(ti_setaf 3)${_LP_CLOSE_ESC}"
|
2012-07-22 16:11:09 -04:00
|
|
|
|
2012-08-21 01:52:25 -04:00
|
|
|
local BLUE="${_LP_OPEN_ESC}$(ti_setaf 4)${_LP_CLOSE_ESC}"
|
|
|
|
local BOLD_BLUE="${_LP_OPEN_ESC}${ti_bold}$(ti_setaf 4)${_LP_CLOSE_ESC}"
|
2012-07-22 16:11:09 -04:00
|
|
|
|
2012-08-21 01:52:25 -04:00
|
|
|
local PURPLE="${_LP_OPEN_ESC}$(ti_setaf 5)${_LP_CLOSE_ESC}"
|
|
|
|
local PINK="${_LP_OPEN_ESC}${ti_bold}$(ti_setaf 5)${_LP_CLOSE_ESC}"
|
2012-07-22 16:11:09 -04:00
|
|
|
|
2012-08-21 01:52:25 -04:00
|
|
|
local CYAN="${_LP_OPEN_ESC}$(ti_setaf 6)${_LP_CLOSE_ESC}"
|
|
|
|
local BOLD_CYAN="${_LP_OPEN_ESC}${ti_bold}$(ti_setaf 6)${_LP_CLOSE_ESC}"
|
2012-07-22 16:11:09 -04:00
|
|
|
|
2012-08-21 01:14:00 -04:00
|
|
|
# NO_COL is special: it will be used at runtime, not just during config loading
|
2012-08-21 01:52:25 -04:00
|
|
|
NO_COL="${_LP_OPEN_ESC}${ti_sgr0}${_LP_CLOSE_ESC}"
|
2012-07-22 16:11:09 -04:00
|
|
|
|
2012-08-21 01:52:25 -04:00
|
|
|
unset ti_sgr0 ti_bold ti_setaf
|
2012-08-21 01:05:15 -04:00
|
|
|
|
2012-08-21 01:07:34 -04:00
|
|
|
|
2012-08-21 01:51:40 -04:00
|
|
|
# Default values (globals)
|
2012-08-21 01:07:34 -04:00
|
|
|
LP_BATTERY_THRESHOLD=${LP_BATTERY_THRESHOLD:-75}
|
|
|
|
LP_LOAD_THRESHOLD=${LP_LOAD_THRESHOLD:-60}
|
2013-04-21 10:16:06 -04:00
|
|
|
LP_TEMP_THRESHOLD=${LP_TEMP_THRESHOLD:-60}
|
2013-06-11 13:32:02 -04:00
|
|
|
LP_RUNTIME_THRESHOLD=${LP_RUNTIME_THRESHOLD:-2}
|
2012-08-21 01:07:34 -04:00
|
|
|
LP_PATH_LENGTH=${LP_PATH_LENGTH:-35}
|
|
|
|
LP_PATH_KEEP=${LP_PATH_KEEP:-2}
|
2013-12-17 15:39:48 -05:00
|
|
|
LP_PATH_DEFAULT="${LP_PATH_DEFAULT:-$_LP_PWD_SYMBOL}"
|
2012-08-21 01:07:34 -04:00
|
|
|
LP_HOSTNAME_ALWAYS=${LP_HOSTNAME_ALWAYS:-0}
|
2013-01-11 04:15:12 -05:00
|
|
|
LP_USER_ALWAYS=${LP_USER_ALWAYS:-1}
|
2013-03-13 07:30:41 -04:00
|
|
|
LP_PERCENTS_ALWAYS=${LP_PERCENTS_ALWAYS:-1}
|
2012-08-21 01:07:34 -04:00
|
|
|
LP_PS1=${LP_PS1:-""}
|
2013-01-10 11:18:45 -05:00
|
|
|
LP_PS1_PREFIX=${LP_PS1_PREFIX:-""}
|
2013-04-22 15:16:56 -04:00
|
|
|
LP_PS1_POSTFIX=${LP_PS1_POSTFIX:-""}
|
2013-01-10 11:18:45 -05:00
|
|
|
LP_TITLE_OPEN=${LP_TITLE_OPEN:-"\e]0;"}
|
|
|
|
LP_TITLE_CLOSE=${LP_TITLE_CLOSE:-"\a"}
|
2013-03-07 19:59:06 -05:00
|
|
|
LP_SCREEN_TITLE_OPEN=${LP_SCREEN_TITLE_OPEN:-"\033k"}
|
|
|
|
LP_SCREEN_TITLE_CLOSE=${LP_SCREEN_TITLE_CLOSE:-"\033\134"}
|
2012-08-21 01:07:34 -04:00
|
|
|
|
|
|
|
LP_ENABLE_PERM=${LP_ENABLE_PERM:-1}
|
|
|
|
LP_ENABLE_SHORTEN_PATH=${LP_ENABLE_SHORTEN_PATH:-1}
|
|
|
|
LP_ENABLE_PROXY=${LP_ENABLE_PROXY:-1}
|
2013-04-21 10:16:06 -04:00
|
|
|
LP_ENABLE_TEMP=${LP_ENABLE_TEMP:-1}
|
2012-08-21 01:07:34 -04:00
|
|
|
LP_ENABLE_JOBS=${LP_ENABLE_JOBS:-1}
|
|
|
|
LP_ENABLE_LOAD=${LP_ENABLE_LOAD:-1}
|
|
|
|
LP_ENABLE_BATT=${LP_ENABLE_BATT:-1}
|
|
|
|
LP_ENABLE_GIT=${LP_ENABLE_GIT:-1}
|
|
|
|
LP_ENABLE_SVN=${LP_ENABLE_SVN:-1}
|
2012-12-28 20:42:29 -05:00
|
|
|
LP_ENABLE_FOSSIL=${LP_ENABLE_FOSSIL:-1}
|
2012-08-21 01:07:34 -04:00
|
|
|
LP_ENABLE_HG=${LP_ENABLE_HG:-1}
|
2013-01-17 11:20:15 -05:00
|
|
|
LP_ENABLE_BZR=${LP_ENABLE_BZR:-1}
|
2012-08-21 01:07:34 -04:00
|
|
|
LP_ENABLE_TIME=${LP_ENABLE_TIME:-0}
|
2013-12-27 19:41:25 -05:00
|
|
|
if $_LP_SHELL_bash; then
|
2013-06-11 13:32:02 -04:00
|
|
|
LP_ENABLE_RUNTIME=${LP_ENABLE_RUNTIME:-1}
|
|
|
|
else
|
2013-12-27 19:41:25 -05:00
|
|
|
LP_ENABLE_RUNTIME=${LP_ENABLE_RUNTIME:-0}
|
2013-06-11 13:32:02 -04:00
|
|
|
fi
|
2012-11-03 17:09:50 -04:00
|
|
|
LP_ENABLE_VIRTUALENV=${LP_ENABLE_VIRTUALENV:-1}
|
2013-01-04 06:13:00 -05:00
|
|
|
LP_ENABLE_VCS_ROOT=${LP_ENABLE_VCS_ROOT:-0}
|
2013-01-10 11:18:45 -05:00
|
|
|
LP_ENABLE_TITLE=${LP_ENABLE_TITLE:-0}
|
2013-03-08 05:48:21 -05:00
|
|
|
LP_ENABLE_SCREEN_TITLE=${LP_ENABLE_SCREEN_TITLE:-0}
|
2013-03-11 19:02:04 -04:00
|
|
|
LP_ENABLE_SSH_COLORS=${LP_ENABLE_SSH_COLORS:-0}
|
2013-12-17 18:18:22 -05:00
|
|
|
# LP_DISABLED_VCS_PATH="${LP_DISABLED_VCS_PATH}"
|
|
|
|
|
|
|
|
# LP_MARK_DEFAULT="$LP_MARK_DEFAULT"
|
|
|
|
LP_MARK_BATTERY="${LP_MARK_BATTERY:-"⌁"}"
|
|
|
|
LP_MARK_ADAPTER="${LP_MARK_ADAPTER:-"⏚"}"
|
|
|
|
LP_MARK_LOAD="${LP_MARK_LOAD:-"⌂"}"
|
|
|
|
LP_MARK_TEMP="${LP_MARK_TEMP:-"θ"}"
|
|
|
|
LP_MARK_PROXY="${LP_MARK_PROXY:-"↥"}"
|
|
|
|
LP_MARK_HG="${LP_MARK_HG:-"☿"}"
|
|
|
|
LP_MARK_SVN="${LP_MARK_SVN:-"‡"}"
|
|
|
|
LP_MARK_GIT="${LP_MARK_GIT:-"±"}"
|
|
|
|
LP_MARK_FOSSIL="${LP_MARK_FOSSIL:-"⌘"}"
|
|
|
|
LP_MARK_BZR="${LP_MARK_BZR:-"⚯"}"
|
|
|
|
LP_MARK_DISABLED="${LP_MARK_DISABLED:-"⌀"}"
|
|
|
|
LP_MARK_UNTRACKED="${LP_MARK_UNTRACKED:-"*"}"
|
|
|
|
LP_MARK_STASH="${LP_MARK_STASH:-"+"}"
|
|
|
|
LP_MARK_BRACKET_OPEN="${LP_MARK_BRACKET_OPEN:-"["}"
|
|
|
|
LP_MARK_BRACKET_CLOSE="${LP_MARK_BRACKET_CLOSE:-"]"}"
|
|
|
|
LP_MARK_SHORTEN_PATH="${LP_MARK_SHORTEN_PATH:-" … "}"
|
|
|
|
# LP_MARK_PREFIX="$LP_MARK_PREFIX"
|
2012-08-21 01:07:34 -04:00
|
|
|
|
2013-04-30 08:03:37 -04:00
|
|
|
LP_COLOR_PATH=${LP_COLOR_PATH:-$BOLD}
|
2012-08-21 01:07:34 -04:00
|
|
|
LP_COLOR_PATH_ROOT=${LP_COLOR_PATH_ROOT:-$BOLD_YELLOW}
|
|
|
|
LP_COLOR_PROXY=${LP_COLOR_PROXY:-$BOLD_BLUE}
|
|
|
|
LP_COLOR_JOB_D=${LP_COLOR_JOB_D:-$YELLOW}
|
|
|
|
LP_COLOR_JOB_R=${LP_COLOR_JOB_R:-$BOLD_YELLOW}
|
|
|
|
LP_COLOR_JOB_Z=${LP_COLOR_JOB_Z:-$BOLD_YELLOW}
|
|
|
|
LP_COLOR_ERR=${LP_COLOR_ERR:-$PURPLE}
|
2013-04-30 08:03:37 -04:00
|
|
|
LP_COLOR_MARK=${LP_COLOR_MARK:-$BOLD}
|
2012-08-21 01:07:34 -04:00
|
|
|
LP_COLOR_MARK_ROOT=${LP_COLOR_MARK_ROOT:-$BOLD_RED}
|
|
|
|
LP_COLOR_USER_LOGGED=${LP_COLOR_USER_LOGGED:-""}
|
|
|
|
LP_COLOR_USER_ALT=${LP_COLOR_USER_ALT:-$BOLD}
|
|
|
|
LP_COLOR_USER_ROOT=${_ROOT:-$BOLD_YELLOW}
|
|
|
|
LP_COLOR_HOST=${LP_COLOR_HOST:-""}
|
2012-09-25 15:09:51 -04:00
|
|
|
LP_COLOR_SSH=${LP_COLOR_SSH:-$BLUE}
|
2013-03-14 13:15:55 -04:00
|
|
|
LP_COLOR_SU=${LP_COLOR_SU:-$BOLD_YELLOW}
|
2012-08-21 01:07:34 -04:00
|
|
|
LP_COLOR_TELNET=${LP_COLOR_TELNET:-$WARN_RED}
|
2012-09-25 15:09:51 -04:00
|
|
|
LP_COLOR_X11_ON=${LP_COLOR_X11:-$GREEN}
|
|
|
|
LP_COLOR_X11_OFF=${LP_COLOR_X11:-$YELLOW}
|
2012-08-21 01:07:34 -04:00
|
|
|
LP_COLOR_WRITE=${LP_COLOR_WRITE:-$GREEN}
|
|
|
|
LP_COLOR_NOWRITE=${LP_COLOR_NOWRITE:-$RED}
|
|
|
|
LP_COLOR_UP=${LP_COLOR_UP:-$GREEN}
|
|
|
|
LP_COLOR_COMMITS=${LP_COLOR_COMMITS:-$YELLOW}
|
|
|
|
LP_COLOR_CHANGES=${LP_COLOR_CHANGES:-$RED}
|
|
|
|
LP_COLOR_DIFF=${LP_COLOR_DIFF:-$PURPLE}
|
|
|
|
LP_COLOR_CHARGING_ABOVE=${LP_COLOR_CHARGING_ABOVE:-$GREEN}
|
|
|
|
LP_COLOR_CHARGING_UNDER=${LP_COLOR_CHARGING_UNDER:-$YELLOW}
|
|
|
|
LP_COLOR_DISCHARGING_ABOVE=${LP_COLOR_DISCHARGING_ABOVE:-$YELLOW}
|
|
|
|
LP_COLOR_DISCHARGING_UNDER=${LP_COLOR_DISCHARGING_UNDER:-$RED}
|
|
|
|
LP_COLOR_TIME=${LP_COLOR_TIME:-$BLUE}
|
2013-02-26 08:18:58 -05:00
|
|
|
LP_COLOR_IN_MULTIPLEXER=${LP_COLOR_IN_MULTIPLEXER:-$BOLD_BLUE}
|
2013-06-11 13:32:02 -04:00
|
|
|
LP_COLOR_RUNTIME=${LP_COLOR_RUNTIME:-$YELLOW}
|
2012-08-21 01:07:34 -04:00
|
|
|
|
|
|
|
LP_COLORMAP_0=${LP_COLORMAP_0:-""}
|
|
|
|
LP_COLORMAP_1=${LP_COLORMAP_1:-$GREEN}
|
|
|
|
LP_COLORMAP_2=${LP_COLORMAP_2:-$BOLD_GREEN}
|
|
|
|
LP_COLORMAP_3=${LP_COLORMAP_3:-$YELLOW}
|
|
|
|
LP_COLORMAP_4=${LP_COLORMAP_4:-$BOLD_YELLOW}
|
|
|
|
LP_COLORMAP_5=${LP_COLORMAP_5:-$RED}
|
|
|
|
LP_COLORMAP_6=${LP_COLORMAP_6:-$BOLD_RED}
|
|
|
|
LP_COLORMAP_7=${LP_COLORMAP_7:-$WARN_RED}
|
|
|
|
LP_COLORMAP_8=${LP_COLORMAP_8:-$CRIT_RED}
|
|
|
|
LP_COLORMAP_9=${LP_COLORMAP_9:-$DANGER_RED}
|
2012-08-14 09:06:58 -04:00
|
|
|
|
2013-06-12 09:11:13 -04:00
|
|
|
# Debugging flags
|
|
|
|
LP_DEBUG_TIME=${LP_DEBUG_TIME:-0}
|
2012-08-14 09:06:58 -04:00
|
|
|
|
2012-08-21 01:03:52 -04:00
|
|
|
# Default config file may be the XDG standard ~/.config/liquidpromptrc,
|
|
|
|
# but heirloom dotfile has priority.
|
|
|
|
|
2012-08-14 05:10:12 -04:00
|
|
|
local configfile
|
|
|
|
if [[ -f "/etc/liquidpromptrc" ]]
|
|
|
|
then
|
|
|
|
source "/etc/liquidpromptrc"
|
|
|
|
fi
|
|
|
|
if [[ -f "$HOME/.liquidpromptrc" ]]
|
|
|
|
then
|
|
|
|
configfile="$HOME/.liquidpromptrc"
|
|
|
|
elif [[ -z "$XDG_HOME_DIR" ]]
|
|
|
|
then
|
|
|
|
configfile="$HOME/.config/liquidpromptrc"
|
|
|
|
else
|
|
|
|
configfile="$XDG_HOME_DIR/liquidpromptrc"
|
|
|
|
fi
|
|
|
|
if [[ -f "$configfile" ]]
|
|
|
|
then
|
|
|
|
source "$configfile"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
# do source config files
|
|
|
|
_lp_source_config
|
2012-08-21 02:21:41 -04:00
|
|
|
unset _lp_source_config
|
2012-08-14 05:10:12 -04:00
|
|
|
|
2012-08-16 10:39:20 -04:00
|
|
|
# Disable features if the tool is not installed
|
2012-08-16 11:10:58 -04:00
|
|
|
[[ "$LP_ENABLE_GIT" = 1 ]] && { command -v git >/dev/null || LP_ENABLE_GIT=0 ; }
|
|
|
|
[[ "$LP_ENABLE_SVN" = 1 ]] && { command -v svn >/dev/null || LP_ENABLE_SVN=0 ; }
|
2012-12-28 20:42:29 -05:00
|
|
|
[[ "$LP_ENABLE_FOSSIL" = 1 ]] && { command -v fossil >/dev/null || LP_ENABLE_FOSSIL=0 ; }
|
2012-08-16 11:10:58 -04:00
|
|
|
[[ "$LP_ENABLE_HG" = 1 ]] && { command -v hg >/dev/null || LP_ENABLE_HG=0 ; }
|
2013-01-17 11:20:15 -05:00
|
|
|
[[ "$LP_ENABLE_BZR" = 1 ]] && { command -v bzr > /dev/null || LP_ENABLE_BZR=0 ; }
|
2013-05-14 19:04:26 -04:00
|
|
|
case "$LP_OS" in
|
2013-06-11 22:02:41 -04:00
|
|
|
Darwin) [[ "$LP_ENABLE_BATT" = 1 ]] && { command -v pmset >/dev/null || LP_ENABLE_BATT=0 ; };;
|
2013-05-14 19:04:26 -04:00
|
|
|
*) [[ "$LP_ENABLE_BATT" = 1 ]] && { command -v acpi >/dev/null || LP_ENABLE_BATT=0 ; };;
|
|
|
|
esac
|
2012-08-16 10:39:20 -04:00
|
|
|
|
2013-12-27 19:41:25 -05:00
|
|
|
if [[ "$LP_ENABLE_RUNTIME" == 1 ]] && ! $_LP_SHELL_bash; then
|
|
|
|
echo Unfortunately, runtime printing for zsh is not yet supported. Turn LP_ENABLE_RUNTIME off in your config to hide this message.
|
|
|
|
LP_ENABLE_RUNTIME=0
|
|
|
|
fi
|
|
|
|
|
2013-05-04 09:15:26 -04:00
|
|
|
# If we are running in a terminal multiplexer, brackets are colored
|
|
|
|
if [[ "$TERM" == screen* ]]; then
|
2013-05-04 11:06:11 -04:00
|
|
|
LP_BRACKET_OPEN="${LP_COLOR_IN_MULTIPLEXER}${LP_MARK_BRACKET_OPEN}${NO_COL}"
|
|
|
|
LP_BRACKET_CLOSE="${LP_COLOR_IN_MULTIPLEXER}${LP_MARK_BRACKET_CLOSE}${NO_COL}"
|
2013-12-27 16:41:08 -05:00
|
|
|
(( LP_ENABLE_TITLE = LP_ENABLE_TITLE && LP_ENABLE_SCREEN_TITLE ))
|
2013-12-27 17:56:51 -05:00
|
|
|
LP_TITLE_OPEN="$LP_SCREEN_TITLE_OPEN"
|
|
|
|
LP_TITLE_CLOSE="$LP_SCREEN_TITLE_CLOSE"
|
2013-05-04 11:06:11 -04:00
|
|
|
else
|
|
|
|
LP_BRACKET_OPEN="${LP_MARK_BRACKET_OPEN}"
|
|
|
|
LP_BRACKET_CLOSE="${LP_MARK_BRACKET_CLOSE}"
|
2013-05-04 09:15:26 -04:00
|
|
|
fi
|
|
|
|
|
2013-12-27 16:41:08 -05:00
|
|
|
[[ "_$TERM" == _linux* ]] && LP_ENABLE_TITLE=0
|
|
|
|
|
2013-06-17 15:40:56 -04:00
|
|
|
# update_terminal_cwd is a shell function available on MacOS X Lion that
|
|
|
|
# will update an icon of the directory displayed in the title of the terminal
|
|
|
|
# window.
|
|
|
|
# See http://hints.macworld.com/article.php?story=20110722211753852
|
|
|
|
if [[ "$TERM_PROGRAM" == Apple_Terminal ]] && command -v update_terminal_cwd >/dev/null; then
|
|
|
|
_LP_TERM_UPDATE_DIR=update_terminal_cwd
|
2013-06-23 17:56:00 -04:00
|
|
|
# Remove "update_terminal_cwd; " that has been add by Apple in /et/bashrc.
|
|
|
|
# See issue #196
|
|
|
|
PROMPT_COMMAND="${PROMPT_COMMAND//update_terminal_cwd; /}"
|
2013-06-17 15:40:56 -04:00
|
|
|
else
|
|
|
|
_LP_TERM_UPDATE_DIR=:
|
|
|
|
fi
|
|
|
|
|
2014-01-06 15:38:15 -05:00
|
|
|
# Default value for LP_PERM when LP_ENABLE_PERM is 0
|
|
|
|
LP_PERM=: # without color
|
|
|
|
|
2013-06-17 15:40:56 -04:00
|
|
|
|
2013-03-13 10:58:56 -04:00
|
|
|
# Escape the given strings
|
2013-03-25 15:57:46 -04:00
|
|
|
# Must be used for all strings that may comes from remote sources,
|
2013-03-13 10:58:56 -04:00
|
|
|
# like VCS branch names
|
|
|
|
_lp_escape()
|
|
|
|
{
|
|
|
|
printf "%q" "$*"
|
|
|
|
}
|
2012-08-16 10:39:20 -04:00
|
|
|
|
2012-08-14 05:10:12 -04:00
|
|
|
|
2012-07-19 09:08:18 -04:00
|
|
|
###############
|
|
|
|
# Who are we? #
|
|
|
|
###############
|
|
|
|
|
2012-08-14 06:01:14 -04:00
|
|
|
# Yellow for root, bold if the user is not the login one, else no color.
|
2013-01-25 06:20:19 -05:00
|
|
|
if [[ "$EUID" -ne "0" ]] ; then # if user is not root
|
|
|
|
# if user is not login user
|
2013-04-21 13:00:17 -04:00
|
|
|
if [[ ${USER} != "$(logname 2>/dev/null || echo $LOGNAME)" ]]; then
|
2013-01-25 06:20:19 -05:00
|
|
|
LP_USER="${LP_COLOR_USER_ALT}${_LP_USER_SYMBOL}${NO_COL}"
|
|
|
|
else
|
|
|
|
if [[ "${LP_USER_ALWAYS}" -ne "0" ]] ; then
|
|
|
|
LP_USER="${LP_COLOR_USER_LOGGED}${_LP_USER_SYMBOL}${NO_COL}"
|
2012-07-19 09:08:18 -04:00
|
|
|
else
|
2013-01-25 06:20:19 -05:00
|
|
|
LP_USER=""
|
2012-07-19 09:08:18 -04:00
|
|
|
fi
|
|
|
|
fi
|
2013-06-11 16:23:26 -04:00
|
|
|
else # root!
|
2013-01-25 06:20:19 -05:00
|
|
|
LP_USER="${LP_COLOR_USER_ROOT}${_LP_USER_SYMBOL}${NO_COL}"
|
2013-06-11 16:23:26 -04:00
|
|
|
LP_COLOR_MARK="${LP_COLOR_MARK_ROOT}"
|
|
|
|
LP_COLOR_PATH="${LP_COLOR_PATH_ROOT}"
|
2013-06-11 16:54:44 -04:00
|
|
|
# Disable VCS info for all paths
|
2013-06-12 20:32:20 -04:00
|
|
|
if [[ "$LP_ENABLE_VCS_ROOT" != 1 ]]; then
|
|
|
|
LP_DISABLED_VCS_PATH=/
|
|
|
|
LP_MARK_DISABLED="$_LP_MARK_SYMBOL"
|
|
|
|
fi
|
2013-01-25 06:20:19 -05:00
|
|
|
fi
|
2012-07-19 09:08:18 -04:00
|
|
|
|
|
|
|
|
2012-07-17 03:50:30 -04:00
|
|
|
#################
|
|
|
|
# Where are we? #
|
|
|
|
#################
|
|
|
|
|
2012-08-13 17:15:24 -04:00
|
|
|
_lp_connection()
|
2012-07-17 03:50:30 -04:00
|
|
|
{
|
2013-03-14 13:15:55 -04:00
|
|
|
if [[ -n "$SSH_CLIENT$SSH2_CLIENT$SSH_TTY" ]] ; then
|
2012-08-14 09:11:48 -04:00
|
|
|
echo ssh
|
2012-07-17 03:50:30 -04:00
|
|
|
else
|
2012-08-14 09:11:48 -04:00
|
|
|
# TODO check on *BSD
|
2013-06-02 06:14:58 -04:00
|
|
|
local sess_src="$(who am i | sed -n 's/.*(\(.*\))/\1/p')"
|
|
|
|
local sess_parent="$(ps -o comm= -p $PPID 2> /dev/null)"
|
2012-09-05 13:44:53 -04:00
|
|
|
if [[ -z "$sess_src" || "$sess_src" = ":"* ]] ; then
|
2012-08-14 09:11:48 -04:00
|
|
|
echo lcl # Local
|
2013-03-14 13:15:55 -04:00
|
|
|
elif [[ "$sess_parent" = "su" || "$sess_parent" = "sudo" ]] ; then
|
|
|
|
echo su # Remote su/sudo
|
2012-08-14 09:11:48 -04:00
|
|
|
else
|
|
|
|
echo tel # Telnet
|
|
|
|
fi
|
2012-07-17 03:50:30 -04:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
# Put the hostname if not locally connected
|
|
|
|
# color it in cyan within SSH, and a warning red if within telnet
|
|
|
|
# else diplay the host without color
|
2012-08-14 05:43:58 -04:00
|
|
|
# The connection is not expected to change from inside the shell, so we
|
|
|
|
# build this just once
|
2012-09-23 17:07:51 -04:00
|
|
|
LP_HOST=""
|
2013-01-12 09:42:22 -05:00
|
|
|
_chroot()
|
|
|
|
{
|
|
|
|
if [[ -r /etc/debian_chroot ]] ; then
|
|
|
|
local debchroot
|
2014-01-18 10:11:29 -05:00
|
|
|
debchroot="$(< /etc/debian_chroot)"
|
2013-01-12 09:42:22 -05:00
|
|
|
echo "(${debchroot})"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
LP_HOST="$(_chroot)"
|
|
|
|
unset _chroot
|
2012-09-09 16:43:10 -04:00
|
|
|
|
2012-09-23 17:07:51 -04:00
|
|
|
# If we are connected with a X11 support
|
|
|
|
if [[ -n "$DISPLAY" ]] ; then
|
2012-09-25 15:09:51 -04:00
|
|
|
LP_HOST="${LP_COLOR_X11_ON}${LP_HOST}@${NO_COL}"
|
2012-09-23 17:07:51 -04:00
|
|
|
else
|
2012-09-25 15:09:51 -04:00
|
|
|
LP_HOST="${LP_COLOR_X11_OFF}${LP_HOST}@${NO_COL}"
|
2012-09-23 17:07:51 -04:00
|
|
|
fi
|
|
|
|
|
2012-08-14 05:43:58 -04:00
|
|
|
case "$(_lp_connection)" in
|
|
|
|
lcl)
|
2013-02-20 04:20:42 -05:00
|
|
|
if [[ "${LP_HOSTNAME_ALWAYS}" -eq "0" ]] ; then
|
2012-09-09 16:43:10 -04:00
|
|
|
# FIXME do we want to display the chroot if local?
|
2013-01-25 05:48:03 -05:00
|
|
|
LP_HOST="" # no hostname if local
|
2012-07-17 03:50:30 -04:00
|
|
|
else
|
2012-09-09 16:43:10 -04:00
|
|
|
LP_HOST="${LP_HOST}${LP_COLOR_HOST}${_LP_HOST_SYMBOL}${NO_COL}"
|
2012-07-17 03:50:30 -04:00
|
|
|
fi
|
2012-08-14 09:11:48 -04:00
|
|
|
;;
|
2012-08-14 05:43:58 -04:00
|
|
|
ssh)
|
2013-03-11 19:02:04 -04:00
|
|
|
# If we want a different color for each host
|
2013-03-12 15:33:25 -04:00
|
|
|
if [[ "$LP_ENABLE_SSH_COLORS" -eq "1" ]]; then
|
2013-03-11 19:02:04 -04:00
|
|
|
# compute the hash of the hostname
|
|
|
|
# and get the corresponding number in [1-6] (red,green,yellow,blue,purple or cyan)
|
|
|
|
# FIXME check portability of cksum and add more formats (bold? 256 colors?)
|
|
|
|
hash=$(( 1 + $(hostname | cksum | cut -d " " -f 1) % 6 ))
|
|
|
|
color=${_LP_OPEN_ESC}$(ti_setaf $hash)${_LP_CLOSE_ESC}
|
|
|
|
LP_HOST="${LP_HOST}${color}${_LP_HOST_SYMBOL}${NO_COL}"
|
|
|
|
unset hash
|
|
|
|
unset color
|
|
|
|
else
|
|
|
|
# the same color for all hosts
|
|
|
|
LP_HOST="${LP_HOST}${LP_COLOR_SSH}${_LP_HOST_SYMBOL}${NO_COL}"
|
|
|
|
fi
|
2012-08-14 09:11:48 -04:00
|
|
|
;;
|
2013-03-14 13:15:55 -04:00
|
|
|
su)
|
|
|
|
LP_HOST="${LP_HOST}${LP_COLOR_SU}${_LP_HOST_SYMBOL}${NO_COL}"
|
2012-08-14 09:11:48 -04:00
|
|
|
;;
|
2012-08-14 05:43:58 -04:00
|
|
|
tel)
|
2012-09-09 16:43:10 -04:00
|
|
|
LP_HOST="${LP_HOST}${LP_COLOR_TELNET}${_LP_HOST_SYMBOL}${NO_COL}"
|
2012-08-14 05:43:58 -04:00
|
|
|
;;
|
|
|
|
*)
|
2012-09-09 16:43:10 -04:00
|
|
|
LP_HOST="${LP_HOST}${_LP_HOST_SYMBOL}" # defaults to no color
|
2012-08-14 05:43:58 -04:00
|
|
|
;;
|
|
|
|
esac
|
2012-07-17 03:50:30 -04:00
|
|
|
|
2012-08-14 05:43:58 -04:00
|
|
|
# Useless now, so undefine
|
2013-06-12 18:31:56 -04:00
|
|
|
unset _lp_connection
|
2012-07-17 03:50:30 -04:00
|
|
|
|
|
|
|
|
2013-11-30 17:54:01 -05:00
|
|
|
# Shorten the path of the current working directory
|
|
|
|
# * Show only the current directory
|
|
|
|
# * Show as much of the cwd path as possible, if shortened display a
|
|
|
|
# leading mark, such as ellipses, to indicate that part is missing
|
|
|
|
# * show at least LP_PATH_KEEP leading dirs and current directory
|
2012-08-13 17:15:24 -04:00
|
|
|
_lp_shorten_path()
|
2012-07-29 16:19:06 -04:00
|
|
|
{
|
2013-12-16 18:58:17 -05:00
|
|
|
|
2013-12-16 18:12:14 -05:00
|
|
|
if [[ "$LP_ENABLE_SHORTEN_PATH" != 1 ]] ; then
|
2013-12-16 18:58:17 -05:00
|
|
|
LP_PWD="$LP_PATH_DEFAULT"
|
2013-05-04 18:11:18 -04:00
|
|
|
if $_LP_SHELL_bash; then
|
2013-12-16 18:12:14 -05:00
|
|
|
[[ -n "$PROMPT_DIRTRIM" ]] && _lp_set_dirtrim
|
2013-01-09 07:16:45 -05:00
|
|
|
fi
|
2012-08-16 09:16:48 -04:00
|
|
|
return
|
|
|
|
fi
|
2012-07-29 16:19:06 -04:00
|
|
|
|
2013-11-30 17:54:01 -05:00
|
|
|
local ret=""
|
|
|
|
|
|
|
|
local p="${PWD/#$HOME/~}"
|
|
|
|
local mask="${LP_MARK_SHORTEN_PATH}"
|
|
|
|
local -i max_len=$(( ${COLUMNS:-80} * $LP_PATH_LENGTH / 100 ))
|
|
|
|
|
|
|
|
if [[ ${LP_PATH_KEEP} == -1 ]]; then
|
|
|
|
# only show the current directory, excluding any parent dirs
|
|
|
|
ret="${p##*/}" # discard everything upto and including the last slash
|
|
|
|
[[ "${ret}" == "" ]] && ret="/" # if in root directory
|
|
|
|
elif (( ${#p} <= ${max_len} )); then
|
|
|
|
ret="${p}"
|
|
|
|
elif [[ ${LP_PATH_KEEP} == 0 ]]; then
|
|
|
|
# len is over max len, show as much of the tail as is allowed
|
2013-12-01 09:02:52 -05:00
|
|
|
ret="${p##*/}" # show at least complete current directory
|
2013-12-01 06:52:34 -05:00
|
|
|
p="${p:0:${#p} - ${#ret}}"
|
|
|
|
ret="${mask}${p:${#p} - (${max_len} - ${#ret} - ${#mask})}${ret}"
|
2013-11-30 17:54:01 -05:00
|
|
|
else
|
|
|
|
# len is over max len, show at least LP_PATH_KEEP leading dirs and
|
|
|
|
# current directory
|
|
|
|
local tmp=${p//\//}
|
|
|
|
local -i delims=$(( ${#p} - ${#tmp} ))
|
|
|
|
|
|
|
|
for (( dir=0; dir < ${LP_PATH_KEEP}; dir++ )); do
|
|
|
|
(( ${dir} == ${delims} )) && break
|
|
|
|
|
|
|
|
local left="${p#*/}"
|
|
|
|
local name="${p:0:${#p} - ${#left}}"
|
|
|
|
p="${left}"
|
|
|
|
ret="${ret}${name%/}/"
|
|
|
|
done
|
2012-07-29 16:19:06 -04:00
|
|
|
|
2013-11-30 17:54:01 -05:00
|
|
|
if (( ${delims} <= ${LP_PATH_KEEP} )); then
|
|
|
|
# no dirs between LP_PATH_KEEP leading dirs and current dir
|
|
|
|
ret="${ret}${p##*/}"
|
2012-08-12 04:08:59 -04:00
|
|
|
else
|
2013-11-30 17:54:01 -05:00
|
|
|
local base="${p##*/}"
|
|
|
|
|
|
|
|
p="${p:0:${#p} - ${#base}}"
|
|
|
|
|
2013-12-01 07:02:59 -05:00
|
|
|
[[ ${ret} != "/" ]] && ret="${ret%/}" # strip trailing slash
|
2013-11-30 17:54:01 -05:00
|
|
|
|
|
|
|
local -i len_left=$(( ${max_len} - ${#ret} - ${#base} - ${#mask} ))
|
|
|
|
|
|
|
|
ret="${ret}${mask}${p:${#p} - ${len_left}}${base}"
|
2012-08-12 04:51:29 -04:00
|
|
|
fi
|
2012-07-29 16:19:06 -04:00
|
|
|
fi
|
2014-01-03 03:32:08 -05:00
|
|
|
# Escape special chars
|
|
|
|
if $_LP_SHELL_bash; then
|
2014-01-08 03:06:03 -05:00
|
|
|
LP_PWD="${ret//\\/\\\\}"
|
2014-01-03 03:32:08 -05:00
|
|
|
else # zsh
|
2014-01-12 15:59:49 -05:00
|
|
|
LP_PWD="${ret//\%/%%}"
|
2014-01-03 03:32:08 -05:00
|
|
|
fi
|
2012-07-29 16:19:06 -04:00
|
|
|
}
|
|
|
|
|
2013-01-10 04:22:58 -05:00
|
|
|
# In bash shell, PROMPT_DIRTRIM is the number of directory to keep at the end
|
|
|
|
# of the displayed path (if "\w" is present in the PS1 var).
|
|
|
|
# liquidprompt can calculate this number under two condition, path shortening
|
2014-01-06 03:24:28 -05:00
|
|
|
# must be disabled and PROMPT_DIRTRIM must be already set.
|
2013-12-16 16:30:54 -05:00
|
|
|
_lp_set_dirtrim() {
|
2013-01-10 04:56:13 -05:00
|
|
|
local p="${PWD/$HOME/~}"
|
2013-12-16 16:30:54 -05:00
|
|
|
local -i max_len=${COLUMNS:-80}*$LP_PATH_LENGTH/100
|
|
|
|
local -i dt=0
|
|
|
|
|
|
|
|
if (( ${#p} > max_len )); then
|
|
|
|
local q="/${p##*/}"
|
|
|
|
local show="$q"
|
|
|
|
# +3 because of the ellipsis: "..."
|
2014-01-18 10:37:52 -05:00
|
|
|
while (( ${#show}+3 < max_len )); do
|
2013-12-16 16:30:54 -05:00
|
|
|
(( dt++ ))
|
|
|
|
p="${p%$q}"
|
|
|
|
q="/${p##*/}"
|
|
|
|
show="$q$show"
|
2013-01-09 07:50:06 -05:00
|
|
|
done
|
2013-12-16 16:30:54 -05:00
|
|
|
(( dt == 0 )) && dt=1
|
2013-01-09 07:50:06 -05:00
|
|
|
fi
|
2013-12-16 16:30:54 -05:00
|
|
|
PROMPT_DIRTRIM=$dt
|
|
|
|
# For debugging
|
2013-12-16 18:12:14 -05:00
|
|
|
# echo PROMPT_DIRTRIM=$PROMPT_DIRTRIM >&2
|
2013-01-09 07:50:06 -05:00
|
|
|
}
|
|
|
|
|
2013-01-03 10:44:15 -05:00
|
|
|
|
2012-07-22 16:28:50 -04:00
|
|
|
|
2012-07-19 05:21:18 -04:00
|
|
|
################
|
|
|
|
# Related jobs #
|
|
|
|
################
|
2012-07-07 03:32:29 -04:00
|
|
|
|
2013-03-14 17:41:09 -04:00
|
|
|
# Display the count of each if non-zero:
|
|
|
|
# - detached screens sessions and/or tmux sessions running on the host
|
|
|
|
# - attached running jobs (started with $ myjob &)
|
|
|
|
# - attached stopped jobs (suspended with Ctrl-Z)
|
2012-08-13 17:15:24 -04:00
|
|
|
_lp_jobcount_color()
|
2012-07-07 03:32:29 -04:00
|
|
|
{
|
2012-08-16 12:35:07 -04:00
|
|
|
[[ "$LP_ENABLE_JOBS" != 1 ]] && return
|
|
|
|
|
2012-08-13 14:40:36 -04:00
|
|
|
local running=$(( $(jobs -r | wc -l) ))
|
|
|
|
local stopped=$(( $(jobs -s | wc -l) ))
|
Support for counting screen sessions running with extra parameters
In some cases (multi user enabled in screen for example), the count of
detached screen sessions was incorrect. The command to locate these has
been improved using a more tolerant regex, which does not require
'detached' to be the first word inside the parenthesis.
To test, open a new screen session, add multiuser (type Ctrl+A, then
':', then multiuser on), then detach (Ctrl+A, Ctrl+D), and see that
liquidprompt detects the screen, as would "screen -list".
2014-01-16 10:07:19 -05:00
|
|
|
local n_screen=$(screen -ls 2> /dev/null | grep -c '[Dd]etach[^)]*)$')
|
2013-03-14 17:58:27 -04:00
|
|
|
local n_tmux=$(tmux list-sessions 2> /dev/null | grep -cv attached)
|
2013-03-14 17:41:09 -04:00
|
|
|
local detached=$(( $n_screen + $n_tmux ))
|
2012-08-10 08:28:18 -04:00
|
|
|
local m_detached="d"
|
|
|
|
local m_stop="z"
|
|
|
|
local m_run="&"
|
2013-03-14 17:41:09 -04:00
|
|
|
local ret=""
|
2012-07-29 16:05:19 -04:00
|
|
|
|
2013-03-14 17:41:09 -04:00
|
|
|
if [[ $detached != "0" ]] ; then
|
|
|
|
ret="${ret}${LP_COLOR_JOB_D}${detached}${m_detached}${NO_COL}"
|
|
|
|
fi
|
2012-07-29 16:05:19 -04:00
|
|
|
|
2013-03-14 17:41:09 -04:00
|
|
|
if [[ $running != "0" ]] ; then
|
|
|
|
if [[ $ret != "" ]] ; then ret="${ret}/"; fi
|
|
|
|
ret="${ret}${LP_COLOR_JOB_R}${running}${m_run}${NO_COL}"
|
|
|
|
fi
|
2012-08-10 09:08:08 -04:00
|
|
|
|
2013-03-14 17:41:09 -04:00
|
|
|
if [[ $stopped != "0" ]] ; then
|
|
|
|
if [[ $ret != "" ]] ; then ret="${ret}/"; fi
|
|
|
|
ret="${ret}${LP_COLOR_JOB_Z}${stopped}${m_stop}${NO_COL}"
|
2012-07-17 03:23:44 -04:00
|
|
|
fi
|
2013-03-14 17:41:09 -04:00
|
|
|
|
|
|
|
echo -ne "$ret"
|
2012-07-07 03:32:29 -04:00
|
|
|
}
|
|
|
|
|
2013-02-26 08:18:58 -05:00
|
|
|
|
2012-07-19 03:59:09 -04:00
|
|
|
|
2012-07-07 03:32:29 -04:00
|
|
|
######################
|
2012-07-19 03:59:09 -04:00
|
|
|
# VCS branch display #
|
2012-07-07 03:32:29 -04:00
|
|
|
######################
|
|
|
|
|
2013-05-16 16:31:34 -04:00
|
|
|
_lp_are_vcs_enabled()
|
2013-01-23 07:36:29 -05:00
|
|
|
{
|
2013-05-16 16:31:34 -04:00
|
|
|
[[ -z "$LP_DISABLED_VCS_PATH" ]] && return 0
|
2013-01-23 07:36:29 -05:00
|
|
|
local path
|
|
|
|
local IFS=:
|
|
|
|
for path in $LP_DISABLED_VCS_PATH; do
|
2013-05-16 16:31:34 -04:00
|
|
|
[[ "$PWD" == *"$path"* ]] && return 1
|
2013-01-23 07:36:29 -05:00
|
|
|
done
|
2013-05-16 16:31:34 -04:00
|
|
|
return 0
|
2013-01-23 07:36:29 -05:00
|
|
|
}
|
|
|
|
|
2012-07-19 03:59:09 -04:00
|
|
|
# GIT #
|
|
|
|
|
2012-07-07 03:32:29 -04:00
|
|
|
# Get the branch name of the current directory
|
2012-08-13 17:15:24 -04:00
|
|
|
_lp_git_branch()
|
2012-07-07 03:32:29 -04:00
|
|
|
{
|
2012-08-16 12:35:07 -04:00
|
|
|
[[ "$LP_ENABLE_GIT" != 1 ]] && return
|
2013-03-12 15:00:36 -04:00
|
|
|
local gitdir
|
2013-07-26 04:30:50 -04:00
|
|
|
gitdir="$([ $(\git ls-files . 2>/dev/null | wc -l) -gt 0 ] && \git rev-parse --git-dir 2>/dev/null)"
|
2013-03-25 14:40:04 -04:00
|
|
|
[[ $? -ne 0 || ! $gitdir =~ (.*\/)?\.git.* ]] && return
|
2013-08-20 14:09:26 -04:00
|
|
|
local branch
|
|
|
|
# Recent versions of Git support the --short option for symbolic-ref, but
|
|
|
|
# not 1.7.9 (Ubuntu 12.04)
|
|
|
|
if branch="$(\git symbolic-ref -q HEAD)"; then
|
|
|
|
_lp_escape "${branch#refs/heads/}"
|
|
|
|
else
|
2013-03-12 15:47:52 -04:00
|
|
|
# In detached head state, use commit instead
|
2013-05-16 13:12:42 -04:00
|
|
|
# No escape needed
|
2013-08-20 14:09:26 -04:00
|
|
|
\git rev-parse --short -q HEAD
|
2013-03-12 15:47:52 -04:00
|
|
|
fi
|
2012-07-07 03:32:29 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
# Set a color depending on the branch state:
|
|
|
|
# - green if the repository is up to date
|
|
|
|
# - yellow if there is some commits not pushed
|
|
|
|
# - red if there is changes to commit
|
2012-08-04 13:52:24 -04:00
|
|
|
#
|
|
|
|
# Add the number of pending commits and the impacted lines.
|
2012-08-13 17:15:24 -04:00
|
|
|
_lp_git_branch_color()
|
2012-07-07 03:32:29 -04:00
|
|
|
{
|
2012-08-16 12:35:07 -04:00
|
|
|
[[ "$LP_ENABLE_GIT" != 1 ]] && return
|
|
|
|
|
2012-08-13 17:15:24 -04:00
|
|
|
local branch
|
2013-06-02 06:14:58 -04:00
|
|
|
branch="$(_lp_git_branch)"
|
2013-05-04 18:35:38 -04:00
|
|
|
if [[ -n "$branch" ]] ; then
|
2012-07-17 03:23:44 -04:00
|
|
|
|
2013-09-18 04:56:36 -04:00
|
|
|
local end
|
|
|
|
end="$NO_COL"
|
2014-01-20 15:02:41 -05:00
|
|
|
if LC_ALL=C \git status -s 2>/dev/null | grep -q '^\?\?'; then
|
2013-04-24 09:21:58 -04:00
|
|
|
end="$LP_COLOR_CHANGES$LP_MARK_UNTRACKED$end"
|
2012-08-16 08:08:07 -04:00
|
|
|
fi
|
|
|
|
|
2014-01-20 15:02:41 -05:00
|
|
|
if [[ -n "$(\git stash list -n 1 2>/dev/null)" ]]; then
|
2013-04-24 09:21:58 -04:00
|
|
|
end="$LP_COLOR_COMMITS$LP_MARK_STASH$end"
|
2013-01-17 17:02:17 -05:00
|
|
|
fi
|
|
|
|
|
2013-03-12 15:51:22 -04:00
|
|
|
local remote
|
2013-07-26 04:30:50 -04:00
|
|
|
remote="$(\git config --get branch.${branch}.remote 2>/dev/null)"
|
2013-03-12 15:51:22 -04:00
|
|
|
|
2012-08-13 17:15:24 -04:00
|
|
|
local has_commit
|
2013-03-12 15:51:22 -04:00
|
|
|
has_commit=0
|
2013-04-24 09:21:58 -04:00
|
|
|
if [[ -n "$remote" ]] ; then
|
|
|
|
local remote_branch
|
2013-07-26 04:30:50 -04:00
|
|
|
remote_branch="$(\git config --get branch.${branch}.merge)"
|
2013-04-24 09:21:58 -04:00
|
|
|
if [[ -n "$remote_branch" ]] ; then
|
2013-07-26 04:30:50 -04:00
|
|
|
has_commit="$(\git rev-list --no-merges --count ${remote_branch/refs\/heads/refs\/remotes\/$remote}..HEAD 2>/dev/null)"
|
2013-04-24 09:21:58 -04:00
|
|
|
if [[ -z "$has_commit" ]] ; then
|
|
|
|
has_commit=0
|
|
|
|
fi
|
2013-03-12 15:51:22 -04:00
|
|
|
fi
|
2012-07-19 04:49:07 -04:00
|
|
|
fi
|
2013-05-14 18:33:28 -04:00
|
|
|
|
2013-11-27 18:21:20 -05:00
|
|
|
local ret
|
2013-12-11 11:20:52 -05:00
|
|
|
local shortstat # only to check for uncommitted changes
|
2013-09-24 16:40:19 -04:00
|
|
|
shortstat="$(LC_ALL=C \git diff --shortstat HEAD 2>/dev/null)"
|
2013-12-11 11:20:52 -05:00
|
|
|
|
2013-05-14 18:33:28 -04:00
|
|
|
if [[ -n "$shortstat" ]] ; then
|
2013-12-11 11:20:52 -05:00
|
|
|
local u_stat # shorstat of *unstaged* changes
|
|
|
|
u_stat="$(LC_ALL=C \git diff --shortstat 2>/dev/null)"
|
|
|
|
u_stat=${u_stat/*changed, /} # removing "n file(s) changed"
|
|
|
|
|
|
|
|
local i_lines # inserted lines
|
|
|
|
if [[ "$u_stat" = *insertion* ]] ; then
|
|
|
|
i_lines=${u_stat/ inser*}
|
|
|
|
else
|
|
|
|
i_lines=0
|
|
|
|
fi
|
|
|
|
|
|
|
|
local d_lines # deleted lines
|
|
|
|
if [[ "$u_stat" = *deletion* ]] ; then
|
|
|
|
d_lines=${u_stat/*\(+\), }
|
|
|
|
d_lines=${d_lines/ del*/}
|
|
|
|
else
|
|
|
|
d_lines=0
|
|
|
|
fi
|
|
|
|
|
2013-09-18 04:56:36 -04:00
|
|
|
local has_lines
|
2013-12-11 11:20:52 -05:00
|
|
|
has_lines="+$i_lines/-$d_lines"
|
2013-05-14 18:33:28 -04:00
|
|
|
|
2012-07-30 15:46:29 -04:00
|
|
|
if [[ "$has_commit" -gt "0" ]] ; then
|
2012-08-04 13:52:24 -04:00
|
|
|
# Changes to commit and commits to push
|
2013-05-14 18:28:32 -04:00
|
|
|
ret="${LP_COLOR_CHANGES}${branch}${NO_COL}(${LP_COLOR_DIFF}$has_lines${NO_COL},${LP_COLOR_COMMITS}$has_commit${NO_COL})"
|
2012-07-17 03:23:44 -04:00
|
|
|
else
|
2013-05-14 18:28:32 -04:00
|
|
|
ret="${LP_COLOR_CHANGES}${branch}${NO_COL}(${LP_COLOR_DIFF}$has_lines${NO_COL})" # changes to commit
|
2012-07-17 03:23:44 -04:00
|
|
|
fi
|
|
|
|
else
|
2012-07-30 15:46:29 -04:00
|
|
|
if [[ "$has_commit" -gt "0" ]] ; then
|
2012-07-17 03:23:44 -04:00
|
|
|
# some commit(s) to push
|
2013-05-14 18:28:32 -04:00
|
|
|
ret="${LP_COLOR_COMMITS}${branch}${NO_COL}(${LP_COLOR_COMMITS}$has_commit${NO_COL})"
|
2012-07-17 03:23:44 -04:00
|
|
|
else
|
2013-05-14 18:28:32 -04:00
|
|
|
ret="${LP_COLOR_UP}${branch}" # nothing to commit or push
|
2012-07-17 03:23:44 -04:00
|
|
|
fi
|
|
|
|
fi
|
2013-05-14 18:28:32 -04:00
|
|
|
echo -ne "$ret$end"
|
2012-07-17 03:23:44 -04:00
|
|
|
fi
|
2012-07-07 03:32:29 -04:00
|
|
|
}
|
|
|
|
|
2013-10-18 22:19:43 -04:00
|
|
|
# Search upwards through a directory structure looking for a file/folder with
|
|
|
|
# the given name. Used to avoid invoking 'hg' and 'bzr'.
|
2013-10-18 22:03:42 -04:00
|
|
|
_lp_upwards_find()
|
|
|
|
{
|
2013-12-30 13:37:32 -05:00
|
|
|
local dir
|
|
|
|
dir="$PWD"
|
2014-01-18 10:37:52 -05:00
|
|
|
while [[ -n "$dir" ]]; do
|
2013-12-30 13:37:32 -05:00
|
|
|
[[ -d "$dir/$1" ]] && return 0
|
|
|
|
dir="${dir%/*}"
|
2013-10-18 22:03:42 -04:00
|
|
|
done
|
2013-12-30 13:37:32 -05:00
|
|
|
return 1
|
2013-10-18 22:03:42 -04:00
|
|
|
}
|
|
|
|
|
2012-07-19 03:59:09 -04:00
|
|
|
# MERCURIAL #
|
|
|
|
|
|
|
|
# Get the branch name of the current directory
|
2012-08-13 17:15:24 -04:00
|
|
|
_lp_hg_branch()
|
2012-07-19 03:59:09 -04:00
|
|
|
{
|
2012-08-16 12:35:07 -04:00
|
|
|
[[ "$LP_ENABLE_HG" != 1 ]] && return
|
2013-12-04 16:51:48 -05:00
|
|
|
|
2013-10-18 22:03:42 -04:00
|
|
|
# First do a simple search to avoid having to invoke hg -- at least on my
|
|
|
|
# machine, the python startup causes a noticeable hitch when changing
|
|
|
|
# directories.
|
2013-12-30 13:37:32 -05:00
|
|
|
_lp_upwards_find .hg || return
|
2013-10-18 22:03:42 -04:00
|
|
|
|
|
|
|
# We found an .hg folder, so we need to invoke hg and see if we're actually
|
|
|
|
# in a repository.
|
2013-12-04 16:51:48 -05:00
|
|
|
|
2012-08-13 17:15:24 -04:00
|
|
|
local branch
|
2012-07-19 03:59:09 -04:00
|
|
|
branch="$(hg branch 2>/dev/null)"
|
2013-03-13 10:58:56 -04:00
|
|
|
|
2013-10-18 22:03:42 -04:00
|
|
|
[[ $? -eq 0 ]] && _lp_escape "$branch"
|
2012-07-19 03:59:09 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
# Set a color depending on the branch state:
|
|
|
|
# - green if the repository is up to date
|
|
|
|
# - red if there is changes to commit
|
|
|
|
# - TODO: yellow if there is some commits not pushed
|
2012-08-13 17:15:24 -04:00
|
|
|
_lp_hg_branch_color()
|
2012-07-19 03:59:09 -04:00
|
|
|
{
|
2012-08-16 12:35:07 -04:00
|
|
|
[[ "$LP_ENABLE_HG" != 1 ]] && return
|
|
|
|
|
2012-08-13 17:15:24 -04:00
|
|
|
local branch
|
|
|
|
local ret
|
2013-06-02 06:14:58 -04:00
|
|
|
branch="$(_lp_hg_branch)"
|
2013-05-04 18:35:38 -04:00
|
|
|
if [[ -n "$branch" ]] ; then
|
2013-03-13 13:31:26 -04:00
|
|
|
|
|
|
|
local has_untracked
|
2014-01-19 09:05:30 -05:00
|
|
|
has_untracked=
|
|
|
|
if hg status -u 2>/dev/null | grep -q '^\?' >/dev/null ; then
|
2013-03-13 13:31:26 -04:00
|
|
|
has_untracked="$LP_COLOR_CHANGES$LP_MARK_UNTRACKED"
|
|
|
|
fi
|
|
|
|
|
2014-01-19 09:15:52 -05:00
|
|
|
# Count local commits waiting for a push
|
|
|
|
local -i commits
|
|
|
|
commits=$(hg outgoing --no-merges ${branch} 2>/dev/null | grep -c '\(^changeset\:\)')
|
2013-03-13 13:31:26 -04:00
|
|
|
|
2014-01-19 10:02:26 -05:00
|
|
|
# Check if there is some uncommitted stuff
|
|
|
|
if [[ -z "$(hg status --quiet -n)" ]] ; then
|
2014-01-19 09:15:52 -05:00
|
|
|
if (( commits > 0 )) ; then
|
2013-03-13 13:31:26 -04:00
|
|
|
# some commit(s) to push
|
2014-01-19 09:15:52 -05:00
|
|
|
ret="${LP_COLOR_COMMITS}${branch}${NO_COL}(${LP_COLOR_COMMITS}$commits${NO_COL})${has_untracked}${NO_COL}"
|
2013-03-13 13:31:26 -04:00
|
|
|
else
|
2014-01-19 10:03:28 -05:00
|
|
|
# nothing to commit or push
|
|
|
|
ret="${LP_COLOR_UP}${branch}${has_untracked}${NO_COL}"
|
2013-03-13 13:31:26 -04:00
|
|
|
fi
|
2012-07-19 03:59:09 -04:00
|
|
|
else
|
2013-11-25 16:37:09 -05:00
|
|
|
local has_lines
|
2014-01-19 13:56:00 -05:00
|
|
|
# Parse the last line of the diffstat-style output
|
|
|
|
has_lines="$(hg diff --stat 2>/dev/null | sed -n '$ s!^.*, \([0-9]*\) .*, \([0-9]*\).*$!+\1/-\2!p')"
|
2014-01-19 09:15:52 -05:00
|
|
|
if (( commits > 0 )) ; then
|
2013-03-13 13:31:26 -04:00
|
|
|
# Changes to commit and commits to push
|
2014-01-19 09:15:52 -05:00
|
|
|
ret="${LP_COLOR_CHANGES}${branch}${NO_COL}(${LP_COLOR_DIFF}$has_lines${NO_COL},${LP_COLOR_COMMITS}$commits${NO_COL})${has_untracked}${NO_COL}"
|
2013-03-13 13:31:26 -04:00
|
|
|
else
|
2013-03-25 15:57:46 -04:00
|
|
|
ret="${LP_COLOR_CHANGES}${branch}${NO_COL}(${LP_COLOR_DIFF}$has_lines${NO_COL})${has_untracked}${NO_COL}" # changes to commit
|
2013-03-13 13:31:26 -04:00
|
|
|
fi
|
2012-07-19 03:59:09 -04:00
|
|
|
fi
|
2012-08-10 08:40:50 -04:00
|
|
|
echo -ne "$ret"
|
2012-07-19 03:59:09 -04:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2012-07-19 04:49:07 -04:00
|
|
|
# SUBVERSION #
|
|
|
|
|
2012-07-19 05:00:18 -04:00
|
|
|
# Get the branch name of the current directory
|
|
|
|
# For the first level of the repository, gives the repository name
|
2012-08-13 17:15:24 -04:00
|
|
|
_lp_svn_branch()
|
2012-07-19 04:49:07 -04:00
|
|
|
{
|
2012-08-21 16:03:42 -04:00
|
|
|
[[ "$LP_ENABLE_SVN" != 1 ]] && return
|
2012-08-17 02:32:00 -04:00
|
|
|
local root
|
|
|
|
local url
|
|
|
|
eval $(LANG=C LC_ALL=C svn info 2>/dev/null | sed -n 's/^URL: \(.*\)/url="\1"/p;s/^Repository Root: \(.*\)/root="\1"/p' )
|
2013-05-22 17:42:55 -04:00
|
|
|
[[ -z "$root" ]] && return
|
|
|
|
|
2012-08-17 02:32:00 -04:00
|
|
|
# Make url relative to root
|
|
|
|
url="${url:${#root}}"
|
|
|
|
if [[ "$url" == */trunk* ]] ; then
|
2013-03-13 17:49:23 -04:00
|
|
|
echo -n trunk
|
2012-08-17 02:32:00 -04:00
|
|
|
else
|
2013-05-22 17:42:55 -04:00
|
|
|
_lp_escape "$(expr "$url" : '.*/branches/\([^/]*\)' || expr "$url" : '/\([^/]*\)' || basename "$root")"
|
2012-07-19 04:49:07 -04:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2012-07-19 05:00:18 -04:00
|
|
|
# Set a color depending on the branch state:
|
2012-08-17 03:52:28 -04:00
|
|
|
# - green if the repository is clean
|
|
|
|
# (use $LP_SVN_STATUS_OPTS to define what that means with
|
|
|
|
# the --depth option of 'svn status')
|
2012-07-19 05:00:18 -04:00
|
|
|
# - red if there is changes to commit
|
|
|
|
# Note that, due to subversion way of managing changes,
|
|
|
|
# informations are only displayed for the CURRENT directory.
|
2012-08-13 17:15:24 -04:00
|
|
|
_lp_svn_branch_color()
|
2012-07-19 04:49:07 -04:00
|
|
|
{
|
2012-08-21 16:03:42 -04:00
|
|
|
[[ "$LP_ENABLE_SVN" != 1 ]] && return
|
2012-08-16 12:35:07 -04:00
|
|
|
|
2012-08-13 17:15:24 -04:00
|
|
|
local branch
|
2012-08-17 03:52:28 -04:00
|
|
|
branch="$(_lp_svn_branch)"
|
|
|
|
if [[ -n "$branch" ]] ; then
|
2014-01-20 14:44:43 -05:00
|
|
|
local changes
|
2013-01-31 04:14:13 -05:00
|
|
|
changes=$(( $(svn status $LP_SVN_STATUS_OPTIONS | grep -c -v "?") ))
|
|
|
|
if [[ $changes -eq 0 ]] ; then
|
2012-08-17 03:52:28 -04:00
|
|
|
echo "${LP_COLOR_UP}${branch}${NO_COL}"
|
2012-07-19 04:49:07 -04:00
|
|
|
else
|
2013-01-31 04:14:13 -05:00
|
|
|
echo "${LP_COLOR_CHANGES}${branch}${NO_COL}(${LP_COLOR_DIFF}$changes${NO_COL})" # changes to commit
|
2012-07-19 04:49:07 -04:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2012-12-28 20:42:29 -05:00
|
|
|
# FOSSIL #
|
|
|
|
|
|
|
|
# Get the tag name of the current directory
|
|
|
|
_lp_fossil_branch()
|
|
|
|
{
|
|
|
|
[[ "$LP_ENABLE_FOSSIL" != 1 ]] && return
|
2013-01-12 10:29:55 -05:00
|
|
|
local branch
|
2013-06-02 06:14:58 -04:00
|
|
|
branch="$(fossil status 2>/dev/null | grep tags: | cut -c17-)"
|
2013-01-12 10:29:55 -05:00
|
|
|
if [[ -n "$branch" ]] ; then
|
2013-05-16 13:41:25 -04:00
|
|
|
_lp_escape "$branch"
|
2013-01-12 10:29:55 -05:00
|
|
|
else
|
2013-03-13 10:58:56 -04:00
|
|
|
if fossil info &>/dev/null ; then
|
|
|
|
echo "no-tag"
|
|
|
|
fi
|
2012-12-29 08:40:54 -05:00
|
|
|
fi
|
2012-12-28 20:42:29 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
# Set a color depending on the branch state:
|
|
|
|
# - green if the repository is clean
|
|
|
|
# - red if there is changes to commit
|
2013-01-05 17:03:26 -05:00
|
|
|
# - yellow if the branch has no tag name
|
2012-12-29 08:40:54 -05:00
|
|
|
#
|
|
|
|
# Add the number of impacted files with a
|
|
|
|
# + when files are ADDED or EDITED
|
|
|
|
# - when files are DELETED
|
2012-12-28 20:42:29 -05:00
|
|
|
_lp_fossil_branch_color()
|
|
|
|
{
|
|
|
|
[[ "$LP_ENABLE_FOSSIL" != 1 ]] && return
|
|
|
|
|
|
|
|
local branch
|
2013-06-02 06:14:58 -04:00
|
|
|
branch="$(_lp_fossil_branch)"
|
2012-12-29 08:40:54 -05:00
|
|
|
|
2013-05-04 18:35:38 -04:00
|
|
|
if [[ -n "$branch" ]] ; then
|
2013-03-13 10:58:56 -04:00
|
|
|
local C2E # Modified files (added or edited)
|
|
|
|
local C2D # Deleted files
|
|
|
|
local C2A # Extras files
|
2013-12-04 16:54:03 -05:00
|
|
|
local C2AA # Added files
|
|
|
|
local PLUSLINE # Added lines
|
|
|
|
local MINUSLINE # Deleted lines
|
2013-03-13 10:58:56 -04:00
|
|
|
local ret
|
|
|
|
C2E=$(fossil changes | wc -l)
|
|
|
|
C2A=$(fossil extras | wc -l)
|
2014-01-18 10:21:31 -05:00
|
|
|
PLUSLINE=$(fossil diff | egrep -c '^\+[^+].+$')
|
|
|
|
MINUSLINE=$(fossil diff | egrep -c '^-[^-].+$')
|
2013-03-13 10:58:56 -04:00
|
|
|
ret=""
|
|
|
|
|
2014-01-18 10:33:05 -05:00
|
|
|
C2AA=$(fossil changes | grep -c "ADDED")
|
2013-12-04 16:54:03 -05:00
|
|
|
if [[ $C2AA -gt 0 ]] ; then
|
|
|
|
# We count the line "à la" git
|
|
|
|
local ADDFILE
|
|
|
|
local FILE
|
2014-01-18 10:33:05 -05:00
|
|
|
ADDFILE=$(fossil changes | grep ADDED | sed -e 's/\s\{2,\}/ /g' | cut -d" " -f2)
|
2013-12-04 16:54:03 -05:00
|
|
|
for FILE in $ADDFILE ; do
|
2014-01-18 10:23:06 -05:00
|
|
|
PLULI=$(wc -l < $FILE)
|
2013-12-04 16:54:03 -05:00
|
|
|
let PLUSLINE=$PLUSLINE+$PLULI
|
|
|
|
done
|
|
|
|
fi
|
2013-05-20 10:29:13 -04:00
|
|
|
|
|
|
|
if [[ $PLUSLINE -gt 0 ]] ; then
|
2013-12-04 16:54:03 -05:00
|
|
|
ret+="+$PLUSLINE"
|
|
|
|
fi
|
|
|
|
|
2014-01-18 10:33:05 -05:00
|
|
|
C2D=$(fossil changes | grep -c "DELETED")
|
2013-12-04 16:54:03 -05:00
|
|
|
if [[ $C2D -gt 0 ]] ; then
|
|
|
|
# We count the line "à la" git
|
|
|
|
local DELFILE
|
|
|
|
local FILE
|
2014-01-18 10:33:05 -05:00
|
|
|
DELFILE=$(fossil changes | grep DELETED | sed -e 's/\s\{2,\}/ /g' | cut -d" " -f2)
|
2013-12-04 16:54:03 -05:00
|
|
|
for FILE in $DELFILE ; do
|
2014-01-18 10:28:34 -05:00
|
|
|
MINLI=$(wc -l < $FILE)
|
2013-12-04 16:54:03 -05:00
|
|
|
let MINUSLINE=$MINUSLINE+$MINLI
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ $MINUSLINE -gt 0 ]] ; then
|
2013-03-13 10:58:56 -04:00
|
|
|
if [[ "$ret" = "" ]] ; then
|
2013-05-20 10:29:13 -04:00
|
|
|
ret+="-$MINUSLINE"
|
2013-03-13 10:58:56 -04:00
|
|
|
else
|
2013-05-20 10:29:13 -04:00
|
|
|
ret+="/-$MINUSLINE"
|
2013-03-13 10:58:56 -04:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2013-05-20 10:29:13 -04:00
|
|
|
if [[ "$C2E" -gt 0 ]] ; then
|
|
|
|
ret+=" in $C2E"
|
|
|
|
fi
|
|
|
|
|
2013-03-13 10:58:56 -04:00
|
|
|
if [[ "$C2A" -gt 0 ]] ; then
|
|
|
|
C2A="$LP_MARK_UNTRACKED"
|
|
|
|
else
|
|
|
|
C2A=""
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ "$ret" != "" ]] ; then
|
|
|
|
ret="(${LP_COLOR_DIFF}$ret${NO_COL})"
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
if [[ "$branch" = "no-tag" ]] ; then
|
2013-01-05 17:03:26 -05:00
|
|
|
# Warning, your branch has no tag name !
|
2013-03-13 10:58:56 -04:00
|
|
|
branch="${LP_COLOR_COMMITS}$branch${NO_COL}$ret${LP_COLOR_COMMITS}$C2A${NO_COL}"
|
|
|
|
else
|
2013-01-02 16:54:23 -05:00
|
|
|
if [[ "$C2E" -eq 0 && "$C2D" -eq 0 ]] ; then
|
2013-01-05 17:03:26 -05:00
|
|
|
# All is up-to-date
|
2013-03-13 10:58:56 -04:00
|
|
|
branch="${LP_COLOR_UP}$branch$C2A${NO_COL}"
|
2013-01-02 16:54:23 -05:00
|
|
|
else
|
2013-01-05 17:03:26 -05:00
|
|
|
# There're some changes to commit
|
2013-03-13 10:58:56 -04:00
|
|
|
branch="${LP_COLOR_CHANGES}$branch${NO_COL}$ret${LP_COLOR_CHANGES}$C2A${NO_COL}"
|
2013-01-02 16:54:23 -05:00
|
|
|
fi
|
2013-03-13 10:58:56 -04:00
|
|
|
fi
|
2013-05-16 13:41:25 -04:00
|
|
|
_lp_escape "$branch"
|
2012-12-28 20:42:29 -05:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2013-01-17 11:20:15 -05:00
|
|
|
# Bazaar #
|
|
|
|
|
|
|
|
# Get the branch name of the current directory
|
|
|
|
_lp_bzr_branch()
|
|
|
|
{
|
|
|
|
[[ "$LP_ENABLE_BZR" != 1 ]] && return
|
2013-10-18 22:03:42 -04:00
|
|
|
|
|
|
|
# First do a simple search to avoid having to invoke bzr -- at least on my
|
|
|
|
# machine, the python startup causes a noticeable hitch when changing
|
|
|
|
# directories.
|
2013-12-30 13:37:32 -05:00
|
|
|
_lp_upwards_find .bzr || return
|
2013-10-18 22:03:42 -04:00
|
|
|
|
|
|
|
# We found an .bzr folder, so we need to invoke bzr and see if we're
|
|
|
|
# actually in a repository.
|
|
|
|
|
2013-03-13 10:58:56 -04:00
|
|
|
local branch
|
2013-06-02 06:14:58 -04:00
|
|
|
branch="$(bzr nick 2> /dev/null)"
|
2013-01-17 11:20:15 -05:00
|
|
|
[[ $? -ne 0 ]] && return
|
2013-05-16 13:41:25 -04:00
|
|
|
_lp_escape "$branch"
|
2013-01-17 11:20:15 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# Set a color depending on the branch state:
|
|
|
|
# - green if the repository is up to date
|
|
|
|
# - red if there is changes to commit
|
|
|
|
# - TODO: yellow if there is some commits not pushed
|
|
|
|
#
|
|
|
|
# Add the number of pending commits and the impacted lines.
|
|
|
|
_lp_bzr_branch_color()
|
|
|
|
{
|
|
|
|
[[ "$LP_ENABLE_BZR" != 1 ]] && return
|
2013-10-18 22:03:42 -04:00
|
|
|
|
|
|
|
# First do a simple search to avoid having to invoke bzr -- at least on my
|
|
|
|
# machine, the python startup causes a noticeable hitch when changing
|
|
|
|
# directories.
|
2013-12-30 13:37:32 -05:00
|
|
|
_lp_upwards_find .bzr || return
|
2013-10-18 22:03:42 -04:00
|
|
|
|
|
|
|
# We found an .bzr folder, so we need to invoke bzr and see if we're
|
|
|
|
# actually in a repository.
|
|
|
|
|
2013-03-12 15:00:36 -04:00
|
|
|
local output
|
2013-06-02 06:14:58 -04:00
|
|
|
output="$(bzr version-info --check-clean --custom --template='{branch_nick} {revno} {clean}' 2> /dev/null)"
|
2013-05-10 19:15:11 -04:00
|
|
|
[[ $? -ne 0 ]] && return
|
2013-01-17 11:20:15 -05:00
|
|
|
local tuple=($output)
|
2013-06-02 05:02:34 -04:00
|
|
|
local branch=${tuple[_LP_FIRST_INDEX+0]}
|
|
|
|
local revno=${tuple[_LP_FIRST_INDEX+1]}
|
|
|
|
local clean=${tuple[_LP_FIRST_INDEX+2]}
|
2013-01-17 11:20:15 -05:00
|
|
|
|
2013-05-04 18:35:38 -04:00
|
|
|
if [[ -n "$branch" ]] ; then
|
2013-01-17 11:20:15 -05:00
|
|
|
if [[ "$clean" -eq 0 ]] ; then
|
|
|
|
ret="${LP_COLOR_CHANGES}${branch}${NO_COL}(${LP_COLOR_COMMITS}$revno${NO_COL})"
|
|
|
|
else
|
2013-03-13 10:58:56 -04:00
|
|
|
ret="${LP_COLOR_UP}${branch}${NO_COL}(${LP_COLOR_COMMITS}$revno${NO_COL})"
|
2013-01-17 11:20:15 -05:00
|
|
|
fi
|
|
|
|
|
|
|
|
fi
|
|
|
|
echo -ne "$ret"
|
|
|
|
}
|
|
|
|
|
2012-12-28 20:42:29 -05:00
|
|
|
|
2013-12-05 18:38:51 -05:00
|
|
|
####################
|
|
|
|
# Wifi link status #
|
|
|
|
####################
|
|
|
|
_lp_wifi()
|
|
|
|
{
|
|
|
|
# Linux
|
|
|
|
sed -n '3s/^ *[^ ]* *[^ ]* *\([0-9]*\).*/\1/p' /proc/net/wireless
|
|
|
|
}
|
|
|
|
|
2012-07-07 03:32:29 -04:00
|
|
|
##################
|
|
|
|
# Battery status #
|
|
|
|
##################
|
|
|
|
|
|
|
|
# Get the battery status in percent
|
2012-08-12 06:13:47 -04:00
|
|
|
# returns 0 (and battery level) if battery is discharging and under threshold
|
|
|
|
# returns 1 (and battery level) if battery is discharging and above threshold
|
|
|
|
# returns 2 (and battery level) if battery is charging but under threshold
|
|
|
|
# returns 3 (and battery level) if battery is charging and above threshold
|
|
|
|
# returns 4 if no battery support
|
2013-05-14 19:04:26 -04:00
|
|
|
case "$LP_OS" in
|
|
|
|
Linux)
|
|
|
|
_lp_battery()
|
|
|
|
{
|
2014-01-20 14:54:22 -05:00
|
|
|
[[ "$LP_ENABLE_BATT" != 1 ]] && return 4
|
2013-05-14 19:04:26 -04:00
|
|
|
local acpi
|
|
|
|
acpi="$(acpi --battery 2>/dev/null)"
|
|
|
|
# Extract the battery load value in percent
|
|
|
|
# First, remove the beginning of the line...
|
|
|
|
local bat="${acpi#Battery *, }"
|
|
|
|
bat="${bat%%%*}" # remove everything starting at '%'
|
|
|
|
|
|
|
|
if [[ -z "${bat}" ]] ; then
|
|
|
|
# not battery level found
|
|
|
|
return 4
|
|
|
|
|
|
|
|
# discharging
|
|
|
|
elif [[ "$acpi" == *"Discharging"* ]] ; then
|
|
|
|
if [[ ${bat} -le $LP_BATTERY_THRESHOLD ]] ; then
|
|
|
|
# under threshold
|
|
|
|
echo -n "${bat}"
|
|
|
|
return 0
|
|
|
|
else
|
|
|
|
# above threshold
|
|
|
|
echo -n "${bat}"
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# charging
|
2012-08-12 06:13:47 -04:00
|
|
|
else
|
2013-05-14 19:04:26 -04:00
|
|
|
if [[ ${bat} -le $LP_BATTERY_THRESHOLD ]] ; then
|
|
|
|
# under threshold
|
|
|
|
echo -n "${bat}"
|
|
|
|
return 2
|
|
|
|
else
|
|
|
|
# above threshold
|
|
|
|
echo -n "${bat}"
|
|
|
|
return 3
|
|
|
|
fi
|
2012-08-12 06:13:47 -04:00
|
|
|
fi
|
2013-05-14 19:04:26 -04:00
|
|
|
}
|
|
|
|
;;
|
|
|
|
Darwin)
|
|
|
|
_lp_battery()
|
|
|
|
{
|
2014-01-20 14:54:22 -05:00
|
|
|
[[ "$LP_ENABLE_BATT" != 1 ]] && return 4
|
2014-01-20 14:54:43 -05:00
|
|
|
local pmset="$(pmset -g batt | sed -n -e '/InternalBattery/p')"
|
2013-12-07 05:14:26 -05:00
|
|
|
local bat="$(cut -f2 <<<"$pmset")"
|
2013-06-11 22:02:41 -04:00
|
|
|
bat="${bat%%%*}"
|
|
|
|
case "$pmset" in
|
|
|
|
*charged*)
|
|
|
|
return 4
|
|
|
|
;;
|
|
|
|
*discharging*)
|
|
|
|
if [[ ${bat} -le $LP_BATTERY_THRESHOLD ]] ; then
|
|
|
|
# under threshold
|
2013-05-14 19:04:26 -04:00
|
|
|
echo -n "${bat}"
|
2013-06-11 22:02:41 -04:00
|
|
|
return 0
|
2013-05-14 19:04:26 -04:00
|
|
|
else
|
2013-06-11 22:02:41 -04:00
|
|
|
# above threshold
|
|
|
|
echo -n "${bat}"
|
|
|
|
return 1
|
2013-05-14 19:04:26 -04:00
|
|
|
fi
|
2013-06-11 22:02:41 -04:00
|
|
|
;;
|
|
|
|
*)
|
2013-05-14 19:04:26 -04:00
|
|
|
if [[ ${bat} -le $LP_BATTERY_THRESHOLD ]] ; then
|
2013-06-11 22:02:41 -04:00
|
|
|
# under threshold
|
|
|
|
echo -n "${bat}"
|
|
|
|
return 2
|
2013-05-14 19:04:26 -04:00
|
|
|
else
|
2013-06-11 22:02:41 -04:00
|
|
|
# above threshold
|
|
|
|
echo -n "${bat}"
|
|
|
|
return 3
|
2013-05-14 19:04:26 -04:00
|
|
|
fi
|
2013-06-11 22:02:41 -04:00
|
|
|
;;
|
|
|
|
esac
|
2013-05-14 19:04:26 -04:00
|
|
|
}
|
|
|
|
;;
|
|
|
|
esac
|
2012-07-07 03:32:29 -04:00
|
|
|
|
2012-07-17 03:22:40 -04:00
|
|
|
# Compute a gradient of background/foreground colors depending on the battery status
|
2012-08-12 06:13:47 -04:00
|
|
|
# Display:
|
2012-08-13 16:09:49 -04:00
|
|
|
# a green ⏚ if the battery is charging and above threshold
|
|
|
|
# a yellow ⏚ if the battery is charging and under threshold
|
|
|
|
# a yellow ⌁ if the battery is discharging but above threshold
|
|
|
|
# a red ⌁ if the battery is discharging and above threshold
|
2012-08-13 17:15:24 -04:00
|
|
|
_lp_battery_color()
|
2012-07-07 03:32:29 -04:00
|
|
|
{
|
2012-08-16 12:35:07 -04:00
|
|
|
[[ "$LP_ENABLE_BATT" != 1 ]] && return
|
|
|
|
|
2012-08-17 12:10:11 -04:00
|
|
|
local mark=$LP_MARK_BATTERY
|
|
|
|
local chargingmark=$LP_MARK_ADAPTER
|
2012-08-12 06:13:47 -04:00
|
|
|
local bat
|
|
|
|
local ret
|
2013-06-02 06:14:58 -04:00
|
|
|
bat="$(_lp_battery)"
|
2012-08-12 06:13:47 -04:00
|
|
|
ret=$?
|
2012-07-17 03:23:44 -04:00
|
|
|
|
2012-08-12 06:13:47 -04:00
|
|
|
if [[ $ret == 4 || $bat == 100 ]] ; then
|
|
|
|
# no battery support or battery full: nothing displayed
|
|
|
|
return
|
|
|
|
elif [[ $ret == 3 && $bat != 100 ]] ; then
|
|
|
|
# charging and above threshold and not 100%
|
2012-08-13 04:02:10 -04:00
|
|
|
# green ⏚
|
2012-08-14 08:35:20 -04:00
|
|
|
echo -ne "${LP_COLOR_CHARGING_ABOVE}$chargingmark${NO_COL}"
|
2012-08-12 06:13:47 -04:00
|
|
|
return
|
|
|
|
elif [[ $ret == 2 ]] ; then
|
|
|
|
# charging but under threshold
|
2012-08-13 04:02:10 -04:00
|
|
|
# yellow ⏚
|
2012-08-14 08:35:20 -04:00
|
|
|
echo -ne "${LP_COLOR_CHARGING_UNDER}$chargingmark${NO_COL}"
|
2012-08-12 06:13:47 -04:00
|
|
|
return
|
|
|
|
elif [[ $ret == 1 ]] ; then
|
|
|
|
# discharging but above threshold
|
2012-08-13 04:02:10 -04:00
|
|
|
# yellow ⌁
|
2012-08-14 08:35:20 -04:00
|
|
|
echo -ne "${LP_COLOR_DISCHARGING_ABOVE}$mark${NO_COL}"
|
2012-08-12 06:13:47 -04:00
|
|
|
return
|
2012-07-17 03:23:44 -04:00
|
|
|
|
2012-08-12 06:13:47 -04:00
|
|
|
# discharging and under threshold
|
|
|
|
elif [[ "$bat" != "" ]] ; then
|
2012-08-14 08:35:20 -04:00
|
|
|
ret="${LP_COLOR_DISCHARGING_UNDER}${mark}${NO_COL}"
|
2012-07-17 03:23:44 -04:00
|
|
|
|
2013-03-13 07:30:41 -04:00
|
|
|
if [[ "$LP_PERCENTS_ALWAYS" -eq "1" ]]; then
|
|
|
|
if [[ ${bat} -le 100 ]] && [[ ${bat} -gt 80 ]] ; then # -20
|
|
|
|
ret="${ret}${LP_COLORMAP_1}"
|
|
|
|
elif [[ ${bat} -le 80 ]] && [[ ${bat} -gt 65 ]] ; then # -15
|
|
|
|
ret="${ret}${LP_COLORMAP_2}"
|
|
|
|
elif [[ ${bat} -le 65 ]] && [[ ${bat} -gt 50 ]] ; then # -15
|
|
|
|
ret="${ret}${LP_COLORMAP_3}"
|
|
|
|
elif [[ ${bat} -le 50 ]] && [[ ${bat} -gt 40 ]] ; then # -10
|
|
|
|
ret="${ret}${LP_COLORMAP_4}"
|
|
|
|
elif [[ ${bat} -le 40 ]] && [[ ${bat} -gt 30 ]] ; then # …
|
|
|
|
ret="${ret}${LP_COLORMAP_5}"
|
|
|
|
elif [[ ${bat} -le 30 ]] && [[ ${bat} -gt 20 ]] ; then
|
|
|
|
ret="${ret}${LP_COLORMAP_6}"
|
|
|
|
elif [[ ${bat} -le 20 ]] && [[ ${bat} -gt 10 ]] ; then
|
|
|
|
ret="${ret}${LP_COLORMAP_7}"
|
|
|
|
elif [[ ${bat} -le 10 ]] && [[ ${bat} -gt 5 ]] ; then
|
|
|
|
ret="${ret}${LP_COLORMAP_8}"
|
|
|
|
elif [[ ${bat} -le 5 ]] && [[ ${bat} -gt 0 ]] ; then
|
|
|
|
ret="${ret}${LP_COLORMAP_9}"
|
|
|
|
else
|
|
|
|
# for debugging purpose
|
|
|
|
ret="${ret}${LP_COLORMAP_0}"
|
|
|
|
fi
|
|
|
|
|
2013-05-04 18:11:18 -04:00
|
|
|
if $_LP_SHELL_bash; then
|
2013-03-13 07:30:41 -04:00
|
|
|
ret="${ret}${bat}%"
|
2013-05-04 18:11:18 -04:00
|
|
|
else # zsh
|
2013-03-13 07:30:41 -04:00
|
|
|
ret="${ret}${bat}%%"
|
|
|
|
fi
|
|
|
|
fi # LP_PERCENTS_ALWAYS
|
|
|
|
echo -ne "${ret}${NO_COL}"
|
|
|
|
fi # ret
|
2012-07-07 03:32:29 -04:00
|
|
|
}
|
|
|
|
|
2013-04-21 10:16:06 -04:00
|
|
|
_lp_color_map() {
|
2013-06-11 15:03:10 -04:00
|
|
|
# Default scale: 0..100
|
|
|
|
# Custom scale: 0..$2
|
2013-06-12 09:21:11 -04:00
|
|
|
local -i scale value
|
|
|
|
scale=${2:-100}
|
2013-06-11 15:03:10 -04:00
|
|
|
# Transform the value to a 0..100 scale
|
2013-06-12 09:21:11 -04:00
|
|
|
value=100*$1/scale
|
2013-06-11 15:03:10 -04:00
|
|
|
if (( value < 50 )); then
|
|
|
|
if (( value < 30 )); then
|
|
|
|
if (( value < 10 )); then
|
2013-05-13 14:40:04 -04:00
|
|
|
echo -ne "${LP_COLORMAP_0}"
|
2013-06-11 15:03:10 -04:00
|
|
|
elif (( value < 20 )); then
|
2013-05-13 14:40:04 -04:00
|
|
|
echo -ne "${LP_COLORMAP_1}"
|
|
|
|
else # 40..59
|
|
|
|
echo -ne "${LP_COLORMAP_2}"
|
|
|
|
fi
|
2013-06-11 15:03:10 -04:00
|
|
|
elif (( value < 40 )); then
|
2013-05-13 14:40:04 -04:00
|
|
|
echo -ne "${LP_COLORMAP_3}"
|
|
|
|
else # 80..99
|
|
|
|
echo -ne "${LP_COLORMAP_4}"
|
|
|
|
fi
|
2013-06-11 15:03:10 -04:00
|
|
|
elif (( value < 80 )); then
|
|
|
|
if (( value < 60 )); then
|
2013-05-13 14:40:04 -04:00
|
|
|
echo -ne "${LP_COLORMAP_5}"
|
2013-06-11 15:03:10 -04:00
|
|
|
elif (( value < 70 )); then
|
2013-05-13 14:40:04 -04:00
|
|
|
echo -ne "${LP_COLORMAP_6}"
|
|
|
|
else
|
|
|
|
echo -ne "${LP_COLORMAP_7}"
|
|
|
|
fi
|
2013-06-11 15:03:10 -04:00
|
|
|
elif (( value < 90 )) ; then
|
2013-04-21 10:16:06 -04:00
|
|
|
echo -ne "${LP_COLORMAP_8}"
|
2013-06-11 15:03:10 -04:00
|
|
|
else # (( value >= 90 ))
|
2013-04-21 10:16:06 -04:00
|
|
|
echo -ne "${LP_COLORMAP_9}"
|
|
|
|
fi
|
|
|
|
}
|
2012-07-07 03:32:29 -04:00
|
|
|
|
2013-06-11 13:32:02 -04:00
|
|
|
###########################
|
|
|
|
# runtime of last command #
|
|
|
|
###########################
|
|
|
|
|
2013-08-01 02:23:42 -04:00
|
|
|
_LP_RUNTIME_LAST_SECONDS=$SECONDS
|
2013-06-11 13:32:02 -04:00
|
|
|
|
|
|
|
_lp_runtime()
|
|
|
|
{
|
|
|
|
[[ "$LP_ENABLE_RUNTIME" != 1 ]] && return
|
|
|
|
if [[ $_LP_RUNTIME_SECONDS -ge $LP_RUNTIME_THRESHOLD ]]
|
|
|
|
then
|
|
|
|
echo -ne "${LP_COLOR_RUNTIME}"
|
|
|
|
# display runtime seconds as days, hours, minutes, and seconds
|
2013-06-24 05:57:20 -04:00
|
|
|
[[ "$_LP_RUNTIME_SECONDS" -ge 86400 ]] && echo -ne $((_LP_RUNTIME_SECONDS / 86400))d
|
|
|
|
[[ "$_LP_RUNTIME_SECONDS" -ge 3600 ]] && echo -ne $((_LP_RUNTIME_SECONDS % 86400 / 3600))h
|
|
|
|
[[ "$_LP_RUNTIME_SECONDS" -ge 60 ]] && echo -ne $((_LP_RUNTIME_SECONDS % 3600 / 60))m
|
|
|
|
echo -ne $((_LP_RUNTIME_SECONDS % 60))s
|
2013-06-11 13:32:02 -04:00
|
|
|
echo -ne "${NO_COL}"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
_lp_reset_runtime()
|
|
|
|
{
|
|
|
|
# Compute number of seconds since program was started
|
2013-06-24 05:57:20 -04:00
|
|
|
_LP_RUNTIME_SECONDS=$((SECONDS - _LP_RUNTIME_LAST_SECONDS))
|
2013-06-11 13:32:02 -04:00
|
|
|
|
|
|
|
# If no proper command was executed (i.e., someone pressed enter without entering a command),
|
|
|
|
# reset the runtime counter
|
|
|
|
[ "$_LP_RUNTIME_COMMAND_EXECUTED" != 1 ] && _LP_RUNTIME_LAST_SECONDS=$SECONDS && _LP_RUNTIME_SECONDS=0
|
|
|
|
|
|
|
|
# A proper command has been executed if the last command was not related to liquidprompt
|
|
|
|
[ "$BASH_COMMAND" = _lp_set_prompt ] && _LP_RUNTIME_COMMAND_EXECUTED=0 && return
|
|
|
|
_LP_RUNTIME_COMMAND_EXECUTED=1
|
|
|
|
}
|
|
|
|
|
|
|
|
if [ "$LP_ENABLE_RUNTIME" = 1 ]
|
|
|
|
then
|
|
|
|
# _lp_reset_runtime gets called whenever bash executes a command
|
|
|
|
trap '_lp_reset_runtime' DEBUG
|
|
|
|
fi
|
|
|
|
|
2012-07-07 03:32:29 -04:00
|
|
|
###############
|
|
|
|
# System load #
|
|
|
|
###############
|
|
|
|
|
|
|
|
# Compute a gradient of background/forground colors depending on the battery status
|
2012-08-13 17:15:24 -04:00
|
|
|
_lp_load_color()
|
2012-07-07 03:32:29 -04:00
|
|
|
{
|
2012-07-17 03:23:44 -04:00
|
|
|
# Colour progression is important ...
|
|
|
|
# bold gray -> bold green -> bold yellow -> bold red ->
|
|
|
|
# black on red -> bold white on red
|
|
|
|
#
|
|
|
|
# Then we have to choose the values at which the colours switch, with
|
|
|
|
# anything past yellow being pretty important.
|
|
|
|
|
2012-08-16 12:35:07 -04:00
|
|
|
[[ "$LP_ENABLE_LOAD" != 1 ]] && return
|
|
|
|
|
2013-06-02 06:14:58 -04:00
|
|
|
local tmp="$(_lp_cpu_load)"
|
2013-05-13 19:15:04 -04:00
|
|
|
tmp=${tmp/./} # Remove '.'
|
|
|
|
tmp=${tmp#0} # Remove leading '0'
|
|
|
|
tmp=${tmp#0} # Remove leading '0', again (ex: 0.09)
|
|
|
|
local -i load=${tmp:-0}/$_lp_CPUNUM
|
2012-07-17 03:23:44 -04:00
|
|
|
|
2013-05-13 19:15:04 -04:00
|
|
|
if (( load > $LP_LOAD_THRESHOLD )); then
|
2013-06-07 06:05:31 -04:00
|
|
|
local ret="$(_lp_color_map $load 200)${LP_MARK_LOAD}"
|
2013-03-13 07:30:41 -04:00
|
|
|
|
2013-05-13 19:15:04 -04:00
|
|
|
if [[ "$LP_PERCENTS_ALWAYS" == 1 ]]; then
|
2013-05-04 18:11:18 -04:00
|
|
|
if $_LP_SHELL_bash; then
|
2013-03-13 07:30:41 -04:00
|
|
|
ret="${ret}$load%"
|
2013-05-04 18:11:18 -04:00
|
|
|
else # zsh
|
2013-03-13 07:30:41 -04:00
|
|
|
ret="${ret}$load%%"
|
|
|
|
fi
|
2012-08-13 09:20:20 -04:00
|
|
|
fi
|
2013-05-13 19:15:04 -04:00
|
|
|
echo -nE "${ret}${NO_COL}"
|
2012-07-17 03:23:44 -04:00
|
|
|
fi
|
2012-07-07 03:32:29 -04:00
|
|
|
}
|
|
|
|
|
2013-04-24 03:48:18 -04:00
|
|
|
######################
|
|
|
|
# System temperature #
|
|
|
|
######################
|
2013-04-22 17:22:32 -04:00
|
|
|
|
2013-12-04 18:00:38 -05:00
|
|
|
_lp_temp_sensors()
|
|
|
|
{
|
2013-05-20 12:39:50 -04:00
|
|
|
# Return the hottest system temperature we get through the sensors command
|
2013-12-04 18:24:19 -05:00
|
|
|
local i
|
2013-06-10 03:58:29 -04:00
|
|
|
for i in $(sensors |
|
|
|
|
sed -n -r "s/^(CPU|SYS|MB|Core|temp).*: *\+([0-9]*)\..°.*/\2/p"); do
|
2013-12-04 18:24:19 -05:00
|
|
|
[[ $i -gt $temperature ]] && temperature=$i
|
2013-04-21 10:16:06 -04:00
|
|
|
done
|
2013-04-24 03:48:18 -04:00
|
|
|
}
|
|
|
|
|
2013-12-04 18:00:38 -05:00
|
|
|
_lp_temp_acpi()
|
|
|
|
{
|
2013-12-04 18:24:19 -05:00
|
|
|
local i
|
2014-01-18 10:37:52 -05:00
|
|
|
for i in $(acpi -t | sed 's/.* \([0-9]*\)\.[0-9]* degrees C$/\1/p'); do
|
2013-12-04 18:24:19 -05:00
|
|
|
[[ $i -gt $temperature ]] && temperature=$i
|
2013-12-04 18:13:57 -05:00
|
|
|
done
|
2013-12-04 18:00:38 -05:00
|
|
|
}
|
|
|
|
|
2013-06-11 16:06:20 -04:00
|
|
|
# Will set _LP_TEMP_FUNCTION so the temperature monitoring feature use an
|
|
|
|
# available command. _LP_TEMP_FUNCTION should return only a numeric value
|
2013-04-24 03:48:18 -04:00
|
|
|
if [[ "$LP_ENABLE_TEMP" = 1 ]]; then
|
2013-12-04 18:00:38 -05:00
|
|
|
if command -v acpi >/dev/null; then
|
|
|
|
_LP_TEMP_FUNCTION=_lp_temp_acpi
|
|
|
|
elif command -v sensors >/dev/null; then
|
2013-06-11 16:06:20 -04:00
|
|
|
_LP_TEMP_FUNCTION=_lp_temp_sensors
|
2013-04-24 03:48:18 -04:00
|
|
|
# elif command -v the_command_you_want_to_use; then
|
2013-06-11 16:06:20 -04:00
|
|
|
# _LP_TEMP_FUNCTION=your_function
|
2013-04-24 03:48:18 -04:00
|
|
|
else
|
|
|
|
LP_ENABLE_TEMP=0
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
_lp_temperature() {
|
2013-06-11 16:06:20 -04:00
|
|
|
# Will display the numeric value as we got it through the _LP_TEMP_FUNCTION
|
2013-04-24 03:48:18 -04:00
|
|
|
# and colorize it through _lp_color_map.
|
|
|
|
[[ "$LP_ENABLE_TEMP" != 1 ]] && return
|
|
|
|
|
2013-12-04 18:24:19 -05:00
|
|
|
local temperature
|
|
|
|
temperature=0
|
|
|
|
$_LP_TEMP_FUNCTION
|
2013-04-21 10:16:06 -04:00
|
|
|
if [[ $temperature -ge $LP_TEMP_THRESHOLD ]]; then
|
2013-06-07 06:05:31 -04:00
|
|
|
echo -ne "${LP_MARK_TEMP}$(_lp_color_map $temperature 120)$temperature°${NO_COL}"
|
2013-04-21 10:16:06 -04:00
|
|
|
fi
|
|
|
|
}
|
2012-07-19 05:21:18 -04:00
|
|
|
|
|
|
|
##########
|
|
|
|
# DESIGN #
|
|
|
|
##########
|
|
|
|
|
2013-12-27 18:29:33 -05:00
|
|
|
|
|
|
|
# Sed expression using extended regexp to remove shell codes around terminal
|
|
|
|
# escape sequences
|
|
|
|
_LP_CLEAN_ESC="$(printf "s,%q|%q,,g" "$_LP_OPEN_ESC" "$_LP_CLOSE_ESC")"
|
|
|
|
|
2013-01-10 11:18:45 -05:00
|
|
|
# Remove all colors and escape characters of the given string and return a pure text
|
|
|
|
_lp_as_text()
|
|
|
|
{
|
|
|
|
# Remove colors from the computed prompt
|
2013-12-27 18:29:33 -05:00
|
|
|
echo -n "$1" | sed -$_LP_SED_EXTENDED "s/\x1B\[[0-9;]*[mK]//g;$_LP_CLEAN_ESC"
|
2013-01-10 11:18:45 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
_lp_title()
|
|
|
|
{
|
2013-01-11 08:18:24 -05:00
|
|
|
[[ "$LP_ENABLE_TITLE" != "1" ]] && return
|
2013-01-10 11:18:45 -05:00
|
|
|
|
|
|
|
# Get the current computed prompt as pure text
|
2013-12-27 17:56:51 -05:00
|
|
|
echo -n "${_LP_OPEN_ESC}${LP_TITLE_OPEN}$(_lp_as_text "$1")${LP_TITLE_CLOSE}${_LP_CLOSE_ESC}"
|
2013-01-10 11:18:45 -05:00
|
|
|
}
|
|
|
|
|
2012-08-10 08:40:50 -04:00
|
|
|
# Set the prompt mark to ± if git, to ☿ if mercurial, to ‡ if subversion
|
|
|
|
# to # if root and else $
|
2012-08-13 17:15:24 -04:00
|
|
|
_lp_smart_mark()
|
2012-07-17 03:22:40 -04:00
|
|
|
{
|
2012-08-13 17:15:24 -04:00
|
|
|
local mark
|
2013-06-12 20:26:40 -04:00
|
|
|
case "$LP_VCS_TYPE" in
|
|
|
|
git) mark="$LP_MARK_GIT" ;;
|
|
|
|
git-svn) mark="$LP_MARK_GIT$LP_MARK_SVN" ;;
|
|
|
|
hg) mark="$LP_MARK_HG" ;;
|
|
|
|
svn) mark="$LP_MARK_SVN" ;;
|
|
|
|
fossil) mark="$LP_MARK_FOSSIL" ;;
|
|
|
|
bzr) mark="$LP_MARK_BZR" ;;
|
|
|
|
disabled) mark="$LP_MARK_DISABLED" ;;
|
|
|
|
*)
|
|
|
|
if [[ -n "$LP_MARK_DEFAULT" ]]; then
|
2014-01-20 15:34:15 -05:00
|
|
|
mark="$LP_MARK_DEFAULT"
|
2013-06-12 20:26:40 -04:00
|
|
|
else
|
|
|
|
mark="$_LP_MARK_SYMBOL"
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2013-06-11 16:23:26 -04:00
|
|
|
echo -ne "${LP_COLOR_MARK}${mark}${NO_COL}"
|
2012-07-17 03:22:40 -04:00
|
|
|
}
|
2012-07-07 03:32:29 -04:00
|
|
|
|
2012-07-19 08:17:32 -04:00
|
|
|
# insert a space on the right
|
2012-08-13 17:15:24 -04:00
|
|
|
_lp_sr()
|
2012-07-19 05:14:42 -04:00
|
|
|
{
|
2013-05-04 18:34:03 -04:00
|
|
|
[[ -n "$1" ]] && echo -n "$1 "
|
2012-07-19 05:14:42 -04:00
|
|
|
}
|
|
|
|
|
2012-07-19 08:17:32 -04:00
|
|
|
# insert a space on the left
|
2012-08-13 17:15:24 -04:00
|
|
|
_lp_sl()
|
2012-07-19 05:14:42 -04:00
|
|
|
{
|
2013-05-04 18:34:03 -04:00
|
|
|
[[ -n "$1" ]] && echo -n " $1"
|
2012-07-19 05:14:42 -04:00
|
|
|
}
|
|
|
|
|
2012-07-19 08:17:32 -04:00
|
|
|
# insert two space, before and after
|
2012-08-13 17:15:24 -04:00
|
|
|
_lp_sb()
|
2012-07-19 05:14:42 -04:00
|
|
|
{
|
2013-05-04 18:34:03 -04:00
|
|
|
[[ -n "$1" ]] && echo -n " $1 "
|
2012-07-17 03:22:40 -04:00
|
|
|
}
|
|
|
|
|
2012-08-17 09:47:44 -04:00
|
|
|
###################
|
|
|
|
# CURRENT TIME #
|
|
|
|
###################
|
2013-04-20 15:51:55 -04:00
|
|
|
_lp_time_analog()
|
|
|
|
{
|
|
|
|
# get the date as "hours(12) minutes" in a single call
|
|
|
|
# make a bash array with it
|
2013-06-02 05:02:34 -04:00
|
|
|
local -a d
|
|
|
|
d=( $(date "+%I %M") )
|
2013-04-20 15:51:55 -04:00
|
|
|
# separate hours and minutes
|
2013-06-02 05:02:34 -04:00
|
|
|
local -i hour=${d[_LP_FIRST_INDEX+0]#0} # no leading 0
|
|
|
|
local -i min=${d[_LP_FIRST_INDEX+1]#0}
|
2013-04-20 15:51:55 -04:00
|
|
|
|
|
|
|
# The targeted unicode characters are the "CLOCK FACE" ones
|
|
|
|
# They are located in the codepages between:
|
|
|
|
# U+1F550 (ONE OCLOCK) and U+1F55B (TWELVE OCLOCK), for the plain hours
|
|
|
|
# U+1F55C (ONE-THIRTY) and U+1F567 (TWELVE-THIRTY), for the thirties
|
|
|
|
#
|
2013-04-21 18:07:45 -04:00
|
|
|
|
2013-06-02 05:02:34 -04:00
|
|
|
local -a plain
|
|
|
|
plain=(🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛 )
|
|
|
|
local -a half
|
|
|
|
half=(🕜 🕝 🕞 🕟 🕠 🕡 🕢 🕣 🕤 🕥 🕦 🕧 )
|
2013-04-21 18:07:45 -04:00
|
|
|
|
|
|
|
# array index starts at 0
|
2013-05-04 16:50:49 -04:00
|
|
|
local -i hi=hour-1
|
2013-04-21 18:07:45 -04:00
|
|
|
|
|
|
|
# add a space for correct alignment
|
2013-05-04 16:50:49 -04:00
|
|
|
if (( min < 15 )) ; then
|
|
|
|
echo -n "${plain[hi]} "
|
|
|
|
elif (( min < 45 )) ; then
|
|
|
|
echo -n "${half[hi]} "
|
2013-04-21 18:07:45 -04:00
|
|
|
else
|
2013-05-04 16:50:49 -04:00
|
|
|
echo -n "${plain[hi+1]} "
|
2013-04-21 18:07:45 -04:00
|
|
|
fi
|
2013-04-20 15:51:55 -04:00
|
|
|
}
|
|
|
|
|
2012-08-17 09:47:44 -04:00
|
|
|
_lp_time()
|
|
|
|
{
|
|
|
|
[[ "$LP_ENABLE_TIME" != 1 ]] && return
|
2013-04-20 15:51:55 -04:00
|
|
|
if [[ "$LP_TIME_ANALOG" != 1 ]]; then
|
2013-05-04 16:58:12 -04:00
|
|
|
echo -n "${LP_COLOR_TIME}${_LP_TIME_SYMBOL}${NO_COL}"
|
2013-04-20 15:51:55 -04:00
|
|
|
else
|
2013-05-04 16:58:12 -04:00
|
|
|
echo -n "${LP_COLOR_TIME}"
|
2013-05-04 16:50:49 -04:00
|
|
|
_lp_time_analog
|
2013-05-04 16:58:12 -04:00
|
|
|
echo -n "${NO_COL}"
|
2013-04-20 15:51:55 -04:00
|
|
|
fi
|
2012-08-17 09:47:44 -04:00
|
|
|
}
|
|
|
|
|
2012-07-19 05:21:18 -04:00
|
|
|
########################
|
|
|
|
# Construct the prompt #
|
|
|
|
########################
|
|
|
|
|
2013-01-10 11:18:45 -05:00
|
|
|
|
2012-08-16 14:18:29 -04:00
|
|
|
_lp_set_prompt()
|
2012-07-17 03:22:40 -04:00
|
|
|
{
|
2013-05-22 17:56:50 -04:00
|
|
|
# Display the return value of the last command, if different from zero
|
|
|
|
# As this get the last returned code, it should be called first
|
|
|
|
local -i err=$?
|
|
|
|
if (( err != 0 )); then
|
|
|
|
LP_ERR=" $LP_COLOR_ERR$err$NO_COL"
|
|
|
|
else
|
|
|
|
LP_ERR= # Hidden
|
|
|
|
fi
|
2012-07-19 05:27:22 -04:00
|
|
|
|
2013-05-13 18:34:48 -04:00
|
|
|
# Reset IFS to its default value to avoid strange behaviors
|
|
|
|
# (in case the user is playing with the value at the prompt)
|
|
|
|
local IFS="$(echo -e ' \t')
|
|
|
|
" # space, tab, LF
|
|
|
|
|
2013-06-17 15:40:56 -04:00
|
|
|
# execute the old prompt
|
2013-06-23 17:44:23 -04:00
|
|
|
eval "$LP_OLD_PROMPT_COMMAND"
|
2012-08-05 05:19:19 -04:00
|
|
|
|
2012-07-19 05:27:22 -04:00
|
|
|
# left of main prompt: space at right
|
2013-06-02 06:14:58 -04:00
|
|
|
LP_JOBS="$(_lp_sr "$(_lp_jobcount_color)")"
|
|
|
|
LP_TEMP="$(_lp_sr "$(_lp_temperature)")"
|
|
|
|
LP_LOAD="$(_lp_sr "$(_lp_load_color)")"
|
|
|
|
LP_BATT="$(_lp_sr "$(_lp_battery_color)")"
|
|
|
|
LP_TIME="$(_lp_sr "$(_lp_time)")"
|
2012-07-19 05:14:42 -04:00
|
|
|
|
2012-07-19 05:27:22 -04:00
|
|
|
# in main prompt: no space
|
2013-06-12 18:25:39 -04:00
|
|
|
if [[ "$LP_ENABLE_PROXY,$http_proxy" = 1,?* ]] ; then
|
|
|
|
LP_PROXY="$LP_COLOR_PROXY$LP_MARK_PROXY$NO_COL"
|
|
|
|
else
|
|
|
|
LP_PROXY=
|
|
|
|
fi
|
2012-07-19 05:14:42 -04:00
|
|
|
|
2014-01-06 16:10:42 -05:00
|
|
|
# Display the current Python virtual environnement, if available
|
|
|
|
if [[ "$LP_ENABLE_VIRTUALENV,$VIRTUAL_ENV" = 1,?* ]] ; then
|
2014-01-06 16:15:46 -05:00
|
|
|
LP_VENV=" [${LP_COLOR_VIRTUALENV}${VIRTUAL_ENV##*/}${NO_COL}]"
|
2014-01-06 16:10:42 -05:00
|
|
|
else
|
|
|
|
LP_VENV=
|
|
|
|
fi
|
2013-06-11 13:32:02 -04:00
|
|
|
|
|
|
|
LP_RUNTIME=$(_lp_sl "$(_lp_runtime)")
|
|
|
|
|
2014-01-06 16:10:42 -05:00
|
|
|
# if change of working directory
|
2013-08-13 12:23:38 -04:00
|
|
|
if [[ "$LP_OLD_PWD" != "LP:$PWD" ]]; then
|
2013-06-17 15:40:56 -04:00
|
|
|
# Update directory icon for MacOS X
|
|
|
|
$_LP_TERM_UPDATE_DIR
|
|
|
|
|
2013-04-22 13:07:34 -04:00
|
|
|
LP_VCS=""
|
|
|
|
LP_VCS_TYPE=""
|
2013-01-23 12:17:24 -05:00
|
|
|
# LP_HOST is a global set at load time
|
2014-01-06 15:38:15 -05:00
|
|
|
|
|
|
|
# LP_PERM: shows a ":"
|
|
|
|
# - colored in green if user has write permission on the current dir
|
|
|
|
# - colored in red if not
|
|
|
|
if [[ "$LP_ENABLE_PERM" = 1 ]]; then
|
|
|
|
if [[ -w "${PWD}" ]]; then
|
|
|
|
LP_PERM="${LP_COLOR_WRITE}:${NO_COL}"
|
|
|
|
else
|
|
|
|
LP_PERM="${LP_COLOR_NOWRITE}:${NO_COL}"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2013-12-16 18:12:14 -05:00
|
|
|
_lp_shorten_path # set LP_PWD
|
2013-01-23 12:17:24 -05:00
|
|
|
|
2013-05-16 16:31:34 -04:00
|
|
|
if _lp_are_vcs_enabled; then
|
2013-01-23 12:17:24 -05:00
|
|
|
LP_VCS="$(_lp_git_branch_color)"
|
2013-04-22 13:07:34 -04:00
|
|
|
LP_VCS_TYPE="git"
|
2013-03-20 08:56:44 -04:00
|
|
|
if [[ -n "$LP_VCS" ]]; then
|
|
|
|
# If this is a git-svn repository
|
2013-07-26 04:30:50 -04:00
|
|
|
if [[ -d "$(\git rev-parse --git-dir 2>/dev/null)/svn" ]]; then
|
2013-04-22 13:07:34 -04:00
|
|
|
LP_VCS_TYPE="git-svn"
|
2013-05-16 16:31:34 -04:00
|
|
|
fi # git-svn
|
|
|
|
else
|
2013-01-23 12:17:24 -05:00
|
|
|
LP_VCS="$(_lp_hg_branch_color)"
|
2013-04-22 13:07:34 -04:00
|
|
|
LP_VCS_TYPE="hg"
|
2013-01-23 09:44:42 -05:00
|
|
|
if [[ -z "$LP_VCS" ]]; then
|
2013-01-23 12:17:24 -05:00
|
|
|
LP_VCS="$(_lp_svn_branch_color)"
|
2013-04-22 13:07:34 -04:00
|
|
|
LP_VCS_TYPE="svn"
|
2013-01-23 09:44:42 -05:00
|
|
|
if [[ -z "$LP_VCS" ]]; then
|
2013-01-23 12:17:24 -05:00
|
|
|
LP_VCS="$(_lp_fossil_branch_color)"
|
2013-04-22 13:07:34 -04:00
|
|
|
LP_VCS_TYPE="fossil"
|
2013-01-23 12:17:24 -05:00
|
|
|
if [[ -z "$LP_VCS" ]]; then
|
|
|
|
LP_VCS="$(_lp_bzr_branch_color)"
|
2013-04-22 13:07:34 -04:00
|
|
|
LP_VCS_TYPE="bzr"
|
|
|
|
if [[ -z "$LP_VCS" ]]; then
|
|
|
|
LP_VCS=""
|
|
|
|
LP_VCS_TYPE=""
|
|
|
|
fi # nothing
|
2013-03-20 08:56:44 -04:00
|
|
|
fi # bzr
|
|
|
|
fi # fossil
|
|
|
|
fi # svn
|
|
|
|
fi # hg
|
2013-04-22 13:07:34 -04:00
|
|
|
|
|
|
|
else # if this vcs rep is disabled
|
|
|
|
LP_VCS="" # not necessary, but more readable
|
|
|
|
LP_VCS_TYPE="disabled"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ -z "$LP_VCS_TYPE" ]] ; then
|
|
|
|
LP_VCS=""
|
2013-01-23 09:44:42 -05:00
|
|
|
else
|
2013-06-02 06:14:58 -04:00
|
|
|
LP_VCS="$(_lp_sl "${LP_VCS}")"
|
2013-01-23 09:44:42 -05:00
|
|
|
fi
|
2012-07-19 05:14:42 -04:00
|
|
|
|
2013-01-23 12:17:24 -05:00
|
|
|
# end of the prompt line: double spaces
|
2013-06-02 06:14:58 -04:00
|
|
|
LP_MARK="$(_lp_sb "$(_lp_smart_mark $LP_VCS_TYPE)")"
|
2012-07-19 05:14:42 -04:00
|
|
|
|
2013-06-11 16:23:26 -04:00
|
|
|
# The color is different if user is root
|
|
|
|
LP_PWD="${LP_COLOR_PATH}${LP_PWD}${NO_COL}"
|
|
|
|
|
2013-08-13 12:23:38 -04:00
|
|
|
LP_OLD_PWD="LP:$PWD"
|
2013-01-23 12:17:24 -05:00
|
|
|
|
2013-04-22 13:07:34 -04:00
|
|
|
# if do not change of working directory but...
|
|
|
|
elif [[ -n "$LP_VCS_TYPE" ]]; then # we are still in a VCS dir
|
|
|
|
case "$LP_VCS_TYPE" in
|
2013-05-22 18:23:56 -04:00
|
|
|
# git, git-svn
|
2013-06-02 06:14:58 -04:00
|
|
|
git*) LP_VCS="$(_lp_sl "$(_lp_git_branch_color)")";;
|
|
|
|
hg) LP_VCS="$(_lp_sl "$(_lp_hg_branch_color)")";;
|
|
|
|
svn) LP_VCS="$(_lp_sl "$(_lp_svn_branch_color)")";;
|
|
|
|
fossil) LP_VCS="$(_lp_sl "$(_lp_fossil_branch_color)")";;
|
|
|
|
bzr) LP_VCS="$(_lp_sl "$(_lp_bzr_branch_color)")";;
|
2013-04-22 13:07:34 -04:00
|
|
|
disabled)LP_VCS="";;
|
2013-01-23 12:17:24 -05:00
|
|
|
esac
|
2012-08-16 06:13:40 -04:00
|
|
|
fi
|
|
|
|
|
2013-03-12 17:14:09 -04:00
|
|
|
if [[ -f "$LP_PS1_FILE" ]]; then
|
|
|
|
source "$LP_PS1_FILE"
|
|
|
|
fi
|
2013-03-12 16:02:28 -04:00
|
|
|
|
2013-12-27 13:08:21 -05:00
|
|
|
if [[ -z "$LP_PS1" ]] ; then
|
2013-01-10 11:18:45 -05:00
|
|
|
# add title escape time, jobs, load and battery
|
2013-05-04 10:41:07 -04:00
|
|
|
PS1="${LP_PS1_PREFIX}${LP_TIME}${LP_BATT}${LP_LOAD}${LP_TEMP}${LP_JOBS}"
|
2012-08-10 09:46:44 -04:00
|
|
|
# add user, host and permissions colon
|
2013-05-04 10:04:51 -04:00
|
|
|
PS1="${PS1}${LP_BRACKET_OPEN}${LP_USER}${LP_HOST}${LP_PERM}"
|
2012-07-19 08:17:32 -04:00
|
|
|
|
2013-06-11 16:37:14 -04:00
|
|
|
PS1="${PS1}${LP_PWD}${LP_BRACKET_CLOSE}${LP_VENV}${LP_PROXY}"
|
|
|
|
|
2013-06-11 16:54:44 -04:00
|
|
|
# Add VCS infos
|
|
|
|
# If root, the info has not been collected unless LP_ENABLE_VCS_ROOT
|
|
|
|
# is set.
|
|
|
|
PS1="${PS1}${LP_VCS}"
|
2013-06-11 16:37:14 -04:00
|
|
|
|
2012-08-10 09:46:44 -04:00
|
|
|
# add return code and prompt mark
|
2013-05-14 00:21:42 -04:00
|
|
|
PS1="${PS1}${LP_RUNTIME}${LP_ERR}${LP_MARK_PREFIX}${LP_MARK}${LP_PS1_POSTFIX}"
|
2012-08-10 09:46:44 -04:00
|
|
|
|
2013-01-10 11:18:45 -05:00
|
|
|
# "invisible" parts
|
|
|
|
# Get the current prompt on the fly and make it a title
|
2013-06-02 06:14:58 -04:00
|
|
|
LP_TITLE="$(_lp_title "$PS1")"
|
2013-01-10 11:18:45 -05:00
|
|
|
|
|
|
|
# Insert it in the prompt
|
|
|
|
PS1="${LP_TITLE}${PS1}"
|
|
|
|
|
2012-08-10 09:46:44 -04:00
|
|
|
# Glue the bash prompt always go to the first column.
|
|
|
|
# Avoid glitches after interrupting a command with Ctrl-C
|
|
|
|
# Does not seem to be necessary anymore?
|
|
|
|
#PS1="\[\033[G\]${PS1}${NO_COL}"
|
2012-07-17 03:23:44 -04:00
|
|
|
else
|
2012-08-10 09:46:44 -04:00
|
|
|
PS1=$LP_PS1
|
2012-07-17 03:23:44 -04:00
|
|
|
fi
|
2012-07-17 03:22:40 -04:00
|
|
|
}
|
2013-01-10 11:18:45 -05:00
|
|
|
|
2013-03-11 18:05:10 -04:00
|
|
|
prompt_tag()
|
2013-02-26 07:37:31 -05:00
|
|
|
{
|
2013-06-02 06:14:58 -04:00
|
|
|
export LP_PS1_PREFIX="$(_lp_sr "$1")"
|
2012-07-17 03:22:40 -04:00
|
|
|
}
|
2012-07-07 03:32:29 -04:00
|
|
|
|
2012-08-04 13:05:34 -04:00
|
|
|
# Activate the liquid prompt
|
|
|
|
prompt_on()
|
|
|
|
{
|
2012-08-07 15:29:44 -04:00
|
|
|
# if liquidprompt has not been already set
|
|
|
|
if [[ -z "$LP_LIQUIDPROMPT" ]] ; then
|
|
|
|
LP_OLD_PS1="$PS1"
|
2013-05-04 18:11:18 -04:00
|
|
|
if $_LP_SHELL_bash; then
|
2012-08-11 18:46:05 -04:00
|
|
|
LP_OLD_PROMPT_COMMAND="$PROMPT_COMMAND"
|
2013-05-04 18:11:18 -04:00
|
|
|
else # zsh
|
2012-08-11 18:46:05 -04:00
|
|
|
LP_OLD_PROMPT_COMMAND="$precmd"
|
|
|
|
fi
|
|
|
|
fi
|
2013-05-04 18:11:18 -04:00
|
|
|
if $_LP_SHELL_bash; then
|
2012-08-16 14:18:29 -04:00
|
|
|
PROMPT_COMMAND=_lp_set_prompt
|
2013-06-12 09:11:13 -04:00
|
|
|
[[ "$LP_DEBUG_TIME" == 1 ]] && PROMPT_COMMAND="time $PROMPT_COMMAND"
|
2013-05-04 18:11:18 -04:00
|
|
|
else # zsh
|
2013-06-12 09:11:13 -04:00
|
|
|
# That doesn't seem to work: no time output
|
|
|
|
#if [[ "$LP_DEBUG_TIME" == 1 ]]; then
|
|
|
|
# function precmd {
|
|
|
|
# local TIMEFMT='LiquidPrompt build time: %*E'
|
|
|
|
# time _lp_set_prompt
|
|
|
|
# }
|
|
|
|
#else
|
|
|
|
function precmd {
|
|
|
|
_lp_set_prompt
|
|
|
|
}
|
|
|
|
#fi
|
2012-08-07 15:29:44 -04:00
|
|
|
fi
|
|
|
|
|
|
|
|
# Keep in mind that LP has been sourced
|
|
|
|
# (to avoid recursive prompt command).
|
|
|
|
LP_LIQUIDPROMPT=1
|
2012-08-04 13:05:34 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
# Come back to the old prompt
|
|
|
|
prompt_off()
|
|
|
|
{
|
2012-08-04 13:19:09 -04:00
|
|
|
PS1=$LP_OLD_PS1
|
2013-05-04 18:11:18 -04:00
|
|
|
if $_LP_SHELL_bash; then
|
2013-12-17 15:16:43 -05:00
|
|
|
PROMPT_COMMAND="$LP_OLD_PROMPT_COMMAND"
|
2013-05-04 18:11:18 -04:00
|
|
|
else # zsh
|
2013-12-17 15:16:43 -05:00
|
|
|
precmd="$LP_OLD_PROMPT_COMMAND"
|
2012-08-11 18:46:05 -04:00
|
|
|
fi
|
2012-08-04 13:05:34 -04:00
|
|
|
}
|
|
|
|
|
2012-08-11 04:20:37 -04:00
|
|
|
# Use an empty prompt: just the \$ mark
|
|
|
|
prompt_OFF()
|
|
|
|
{
|
|
|
|
PS1="\$ "
|
2013-05-04 18:11:18 -04:00
|
|
|
if $_LP_SHELL_bash; then
|
2013-12-17 15:16:43 -05:00
|
|
|
PROMPT_COMMAND="$LP_OLD_PROMPT_COMMAND"
|
2013-05-04 18:11:18 -04:00
|
|
|
else # zsh
|
2013-12-17 15:16:43 -05:00
|
|
|
precmd="$LP_OLD_PROMPT_COMMAND"
|
2012-08-11 18:46:05 -04:00
|
|
|
fi
|
2012-08-11 04:20:37 -04:00
|
|
|
}
|
|
|
|
|
2013-06-19 15:24:55 -04:00
|
|
|
# By default, sourcing liquidprompt will activate the liquid prompt
|
2012-08-04 13:05:34 -04:00
|
|
|
prompt_on
|
2012-07-07 03:32:29 -04:00
|
|
|
|
2012-08-14 09:11:48 -04:00
|
|
|
# vim: set et sts=4 sw=4 tw=120 ft=sh:
|