1
0
Fork 0
mirror of https://github.com/romkatv/powerlevel10k.git synced 2024-11-16 17:50:09 +00:00

Merge branch 'next' into color_detection

This commit is contained in:
Dominik Ritter 2015-10-18 19:43:41 +02:00
commit c10cbabb9e
2 changed files with 96 additions and 74 deletions

View file

@ -25,9 +25,9 @@ this theme focus on four primary goals:
4. Optimize the code for execution speed as much as possible. A snappy terminal 4. Optimize the code for execution speed as much as possible. A snappy terminal
is a happy terminal. is a happy terminal.
Here is a detailed screenshot showing `powerlevel9k` in action, with default settings. Here is `powerlevel9k` in action, with [some simple settings](https://github.com/bhilburn/powerlevel9k/wiki/Show-Off-Your-Config#natemccurdys-configuration).
![](http://bhilburn.org/content/images/2014/12/powerlevel9k.png) ![](https://camo.githubusercontent.com/80ec23fda88d2f445906a3502690f22827336736/687474703a2f2f692e696d6775722e636f6d2f777942565a51792e676966)
### Table of Contents ### Table of Contents
@ -77,6 +77,7 @@ The segments that are currently available are:
* [ip](#ip) - Shows the current IP address. * [ip](#ip) - Shows the current IP address.
* **load** - Your machines 5 minute load average and free RAM. * **load** - Your machines 5 minute load average and free RAM.
* **node_version** - Show the version number of the installed Node.js. * **node_version** - Show the version number of the installed Node.js.
* **nvm** - Show the version of Node that is currently active, if it differs from the version used by NVM
* **os_icon** - Display a nice little icon, depending on your operating system. * **os_icon** - Display a nice little icon, depending on your operating system.
* **php_version** - Show the current PHP version. * **php_version** - Show the current PHP version.
* [rbenv](#rbenv) - Ruby environment information (if one is active). * [rbenv](#rbenv) - Ruby environment information (if one is active).
@ -85,6 +86,7 @@ The segments that are currently available are:
* [symphony2_tests](#symphony2_tests) - Show a ratio of test classes vs code classes for Symfony2. * [symphony2_tests](#symphony2_tests) - Show a ratio of test classes vs code classes for Symfony2.
* **symphony2_version** - Show the current Symfony2 version, if you are in a Symfony2-Project dir. * **symphony2_version** - Show the current Symfony2 version, if you are in a Symfony2-Project dir.
* [time](#time) - System time. * [time](#time) - System time.
* [todo](http://todotxt.com/) - Shows the number of tasks in your todo.txt tasks file.
* [vi_mode](#vi_mode)- Vi editing mode (NORMAL|INSERT). * [vi_mode](#vi_mode)- Vi editing mode (NORMAL|INSERT).
* **virtualenv** - Your Python [VirtualEnv](https://virtualenv.pypa.io/en/latest/). * **virtualenv** - Your Python [VirtualEnv](https://virtualenv.pypa.io/en/latest/).
* [vcs](#vcs) - Information about this `git` or `hg` repository (if you are in one). * [vcs](#vcs) - Information about this `git` or `hg` repository (if you are in one).
@ -213,23 +215,17 @@ from the [Installation](#Installation) section above.
##### vi_mode ##### vi_mode
This Segment shows the current mode of your ZSH. If you want to use your ZSH in This segment shows ZSH's current input mode. Note that this is only useful if
VI-Mode, you need to configure it separately in your `~/.zshrc`: you are using the [ZSH Line Editor](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html)
(VI mode). You can enable this either by `.zshrc` configuration or using a plugin, like
[Oh-My-Zsh's vi-mode plugin](https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/vi-mode/vi-mode.plugin.zsh).
# VI-Mode If you want to display a string other than "NORMAL" or "INSERT" in `command` and
# general activation `insert-mode`, you can do so by setting the following variables in your
bindkey -v `~/.zshrc`:
# set some nice hotkeys POWERLEVEL9K_VI_INSERT_MODE_STRING="INSERT"
bindkey '^P' up-history POWERLEVEL9K_VI_COMMAND_MODE_STRING="NORMAL"
bindkey '^N' down-history
bindkey '^?' backward-delete-char
bindkey '^h' backward-delete-char
bindkey '^w' backward-kill-word
bindkey '^r' history-incremental-search-backward
# make it more responsive
export KEYTIMEOUT=1
#### Unit Test Ratios #### Unit Test Ratios

View file

@ -45,6 +45,7 @@ case $POWERLEVEL9K_MODE in
AWS_ICON $'\UE895' #  AWS_ICON $'\UE895' # 
BACKGROUND_JOBS_ICON $'\UE82F ' #  BACKGROUND_JOBS_ICON $'\UE82F ' # 
TEST_ICON $'\UE891' #  TEST_ICON $'\UE891' # 
TODO_ICON $'\U2611' # ☑
OK_ICON $'\U2713' # ✓ OK_ICON $'\U2713' # ✓
FAIL_ICON $'\U2718' # ✘ FAIL_ICON $'\U2718' # ✘
SYMFONY_ICON 'SF' SYMFONY_ICON 'SF'
@ -93,6 +94,7 @@ case $POWERLEVEL9K_MODE in
AWS_ICON $'\UF296' #  AWS_ICON $'\UF296' # 
BACKGROUND_JOBS_ICON $'\UF013 ' #  BACKGROUND_JOBS_ICON $'\UF013 ' # 
TEST_ICON $'\UF291' #  TEST_ICON $'\UF291' # 
TODO_ICON $'\U2611' # ☑
OK_ICON $'\UF23A' #  OK_ICON $'\UF23A' # 
FAIL_ICON $'\UF281' #  FAIL_ICON $'\UF281' # 
SYMFONY_ICON 'SF' SYMFONY_ICON 'SF'
@ -136,6 +138,7 @@ case $POWERLEVEL9K_MODE in
AWS_ICON 'AWS:' AWS_ICON 'AWS:'
BACKGROUND_JOBS_ICON $'\u2699' # ⚙ BACKGROUND_JOBS_ICON $'\u2699' # ⚙
TEST_ICON '' TEST_ICON ''
TODO_ICON $'\U2611' # ☑
OK_ICON $'\u2713' # ✓ OK_ICON $'\u2713' # ✓
FAIL_ICON $'\u2718' # ✘ FAIL_ICON $'\u2718' # ✘
SYMFONY_ICON 'SF' SYMFONY_ICON 'SF'
@ -388,51 +391,6 @@ fi
set_default POWERLEVEL9K_VCS_FOREGROUND "$DEFAULT_COLOR" set_default POWERLEVEL9K_VCS_FOREGROUND "$DEFAULT_COLOR"
set_default POWERLEVEL9K_VCS_DARK_FOREGROUND "$DEFAULT_COLOR_DARK" set_default POWERLEVEL9K_VCS_DARK_FOREGROUND "$DEFAULT_COLOR_DARK"
################################################################
# VCS Information Settings
################################################################
setopt prompt_subst
autoload -Uz vcs_info
VCS_WORKDIR_DIRTY=false
VCS_CHANGESET_PREFIX=''
if [[ "$POWERLEVEL9K_SHOW_CHANGESET" == true ]]; then
# Default: Just display the first 12 characters of our changeset-ID.
local VCS_CHANGESET_HASH_LENGTH=12
if [[ -n "$POWERLEVEL9K_CHANGESET_HASH_LENGTH" ]]; then
VCS_CHANGESET_HASH_LENGTH="$POWERLEVEL9K_CHANGESET_HASH_LENGTH"
fi
VCS_CHANGESET_PREFIX="%F{$POWERLEVEL9K_VCS_DARK_FOREGROUND}$(print_icon 'VCS_COMMIT_ICON')%0.$VCS_CHANGESET_HASH_LENGTH""i%f "
fi
zstyle ':vcs_info:*' enable git hg
zstyle ':vcs_info:*' check-for-changes true
VCS_DEFAULT_FORMAT="$VCS_CHANGESET_PREFIX%F{$POWERLEVEL9K_VCS_FOREGROUND}%b%c%u%m%f"
zstyle ':vcs_info:git*:*' formats "%F{$POWERLEVEL9K_VCS_FOREGROUND}$(print_icon 'VCS_GIT_ICON')%f$VCS_DEFAULT_FORMAT"
zstyle ':vcs_info:hg*:*' formats "%F{$POWERLEVEL9K_VCS_FOREGROUND}$(print_icon 'VCS_HG_ICON')%f$VCS_DEFAULT_FORMAT"
zstyle ':vcs_info:*' actionformats "%b %F{red}| %a%f"
zstyle ':vcs_info:*' stagedstr " %F{$POWERLEVEL9K_VCS_FOREGROUND}$(print_icon 'VCS_STAGED_ICON')%f"
zstyle ':vcs_info:*' unstagedstr " %F{$POWERLEVEL9K_VCS_FOREGROUND}$(print_icon 'VCS_UNSTAGED_ICON')%f"
zstyle ':vcs_info:git*+set-message:*' hooks vcs-detect-changes git-untracked git-aheadbehind git-stash git-remotebranch git-tagname
zstyle ':vcs_info:hg*+set-message:*' hooks vcs-detect-changes
# For Hg, only show the branch name
zstyle ':vcs_info:hg*:*' branchformat "$(print_icon 'VCS_BRANCH_ICON')%b"
# The `get-revision` function must be turned on for dirty-check to work for Hg
zstyle ':vcs_info:hg*:*' get-revision true
zstyle ':vcs_info:hg*:*' get-bookmarks true
zstyle ':vcs_info:hg*+gen-hg-bookmark-string:*' hooks hg-bookmarks
if [[ "$POWERLEVEL9K_SHOW_CHANGESET" == true ]]; then
zstyle ':vcs_info:*' get-revision true
fi
################################################################ ################################################################
# Prompt Segment Constructors # Prompt Segment Constructors
# #
@ -458,6 +416,7 @@ CURRENT_BG='NONE'
# * $3: Foreground color # * $3: Foreground color
# * $4: The segment content # * $4: The segment content
# The latter three can be omitted, # The latter three can be omitted,
set_default POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS " "
left_prompt_segment() { left_prompt_segment() {
# Overwrite given background-color by user defined variable for this segment. # Overwrite given background-color by user defined variable for this segment.
local BACKGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_BACKGROUND local BACKGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_BACKGROUND
@ -474,7 +433,7 @@ left_prompt_segment() {
[[ -n $3 ]] && fg="%F{$3}" || fg="%f" [[ -n $3 ]] && fg="%F{$3}" || fg="%f"
if [[ $CURRENT_BG != 'NONE' ]] && ! isSameColor "$2" "$CURRENT_BG"; then if [[ $CURRENT_BG != 'NONE' ]] && ! isSameColor "$2" "$CURRENT_BG"; then
# Middle segment # Middle segment
echo -n "%{$bg%F{$CURRENT_BG}%}$(print_icon 'LEFT_SEGMENT_SEPARATOR')%{$fg%} " echo -n "%{$bg%F{$CURRENT_BG}%}$(print_icon 'LEFT_SEGMENT_SEPARATOR')%{$fg%}$POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS"
elif isSameColor "$CURRENT_BG" "$2"; then elif isSameColor "$CURRENT_BG" "$2"; then
# Middle segment with same color as previous segment # Middle segment with same color as previous segment
# We take the current foreground color as color for our # We take the current foreground color as color for our
@ -482,13 +441,13 @@ left_prompt_segment() {
# enough contrast. # enough contrast.
local complement local complement
[[ -n $3 ]] && complement=$3 || complement=$DEFAULT_COLOR [[ -n $3 ]] && complement=$3 || complement=$DEFAULT_COLOR
echo -n "%{$bg%F{$complement}%}$(print_icon 'LEFT_SUBSEGMENT_SEPARATOR')%{$fg%} " echo -n "%{$bg%F{$complement}%}$(print_icon 'LEFT_SUBSEGMENT_SEPARATOR')%{$fg%}$POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS"
else else
# First segment # First segment
echo -n "%{$bg%}%{$fg%} " echo -n "%{$bg%}%{$fg%}$POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS"
fi fi
CURRENT_BG=$2 CURRENT_BG=$2
[[ -n $4 ]] && echo -n "$4 " [[ -n $4 ]] && echo -n "$4$POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS"
} }
# End the left prompt, closes the final segment. # End the left prompt, closes the final segment.
@ -512,6 +471,7 @@ CURRENT_RIGHT_BG='NONE'
# * $3: Foreground color # * $3: Foreground color
# * $4: The segment content # * $4: The segment content
# No ending for the right prompt segment is needed (unlike the left prompt, above). # No ending for the right prompt segment is needed (unlike the left prompt, above).
set_default POWERLEVEL9K_WHITESPACE_BETWEEN_RIGHT_SEGMENTS " "
right_prompt_segment() { right_prompt_segment() {
# Overwrite given background-color by user defined variable for this segment. # Overwrite given background-color by user defined variable for this segment.
local BACKGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_BACKGROUND local BACKGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_BACKGROUND
@ -534,11 +494,11 @@ right_prompt_segment() {
# enough contrast. # enough contrast.
local complement local complement
[[ -n $3 ]] && complement=$3 || complement=$DEFAULT_COLOR [[ -n $3 ]] && complement=$3 || complement=$DEFAULT_COLOR
echo -n "%F{$complement}$(print_icon 'RIGHT_SUBSEGMENT_SEPARATOR')%f%{$bg%}%{$fg%} " echo -n "%F{$complement}$(print_icon 'RIGHT_SUBSEGMENT_SEPARATOR')%f%{$bg%}%{$fg%}$POWERLEVEL9K_WHITESPACE_BETWEEN_RIGHT_SEGMENTS"
else else
echo -n "%F{$2}$(print_icon 'RIGHT_SEGMENT_SEPARATOR')%f%{$bg%}%{$fg%} " echo -n "%F{$2}$(print_icon 'RIGHT_SEGMENT_SEPARATOR')%f%{$bg%}%{$fg%}$POWERLEVEL9K_WHITESPACE_BETWEEN_RIGHT_SEGMENTS"
fi fi
[[ -n $4 ]] && echo -n "$4 %f" [[ -n $4 ]] && echo -n "$4$POWERLEVEL9K_WHITESPACE_BETWEEN_RIGHT_SEGMENTS%f"
CURRENT_RIGHT_BG=$2 CURRENT_RIGHT_BG=$2
} }
@ -547,6 +507,48 @@ right_prompt_segment() {
# The `vcs` Segment and VCS_INFO hooks / helper functions # The `vcs` Segment and VCS_INFO hooks / helper functions
################################################################ ################################################################
prompt_vcs() { prompt_vcs() {
autoload -Uz vcs_info
VCS_WORKDIR_DIRTY=false
VCS_CHANGESET_PREFIX=''
if [[ "$POWERLEVEL9K_SHOW_CHANGESET" == true ]]; then
# Default: Just display the first 12 characters of our changeset-ID.
local VCS_CHANGESET_HASH_LENGTH=12
if [[ -n "$POWERLEVEL9K_CHANGESET_HASH_LENGTH" ]]; then
VCS_CHANGESET_HASH_LENGTH="$POWERLEVEL9K_CHANGESET_HASH_LENGTH"
fi
VCS_CHANGESET_PREFIX="%F{$POWERLEVEL9K_VCS_DARK_FOREGROUND}$(print_icon 'VCS_COMMIT_ICON')%0.$VCS_CHANGESET_HASH_LENGTH""i%f "
fi
zstyle ':vcs_info:*' enable git hg
zstyle ':vcs_info:*' check-for-changes true
VCS_DEFAULT_FORMAT="$VCS_CHANGESET_PREFIX%F{$POWERLEVEL9K_VCS_FOREGROUND}%b%c%u%m%f"
zstyle ':vcs_info:git*:*' formats "%F{$POWERLEVEL9K_VCS_FOREGROUND}$(print_icon 'VCS_GIT_ICON')%f$VCS_DEFAULT_FORMAT"
zstyle ':vcs_info:hg*:*' formats "%F{$POWERLEVEL9K_VCS_FOREGROUND}$(print_icon 'VCS_HG_ICON')%f$VCS_DEFAULT_FORMAT"
zstyle ':vcs_info:*' actionformats "%b %F{red}| %a%f"
zstyle ':vcs_info:*' stagedstr " %F{$POWERLEVEL9K_VCS_FOREGROUND}$(print_icon 'VCS_STAGED_ICON')%f"
zstyle ':vcs_info:*' unstagedstr " %F{$POWERLEVEL9K_VCS_FOREGROUND}$(print_icon 'VCS_UNSTAGED_ICON')%f"
zstyle ':vcs_info:git*+set-message:*' hooks vcs-detect-changes git-untracked git-aheadbehind git-stash git-remotebranch git-tagname
zstyle ':vcs_info:hg*+set-message:*' hooks vcs-detect-changes
# For Hg, only show the branch name
zstyle ':vcs_info:hg*:*' branchformat "$(print_icon 'VCS_BRANCH_ICON')%b"
# The `get-revision` function must be turned on for dirty-check to work for Hg
zstyle ':vcs_info:hg*:*' get-revision true
zstyle ':vcs_info:hg*:*' get-bookmarks true
zstyle ':vcs_info:hg*+gen-hg-bookmark-string:*' hooks hg-bookmarks
if [[ "$POWERLEVEL9K_SHOW_CHANGESET" == true ]]; then
zstyle ':vcs_info:*' get-revision true
fi
# Actually invoke vcs_info manually to gather all information.
vcs_info
local vcs_prompt="${vcs_info_msg_0_}" local vcs_prompt="${vcs_info_msg_0_}"
if [[ -n "$vcs_prompt" ]]; then if [[ -n "$vcs_prompt" ]]; then
@ -800,6 +802,17 @@ prompt_php_version() {
fi fi
} }
# Node version from NVM
# Only prints the segment if different than the default value
prompt_nvm() {
local node_version=$(nvm current)
local nvm_default=$(cat $NVM_DIR/alias/default)
[[ -z "${node_version}" ]] && return
[[ "$node_version" =~ "$nvm_default" ]] && return
NODE_ICON=$'\u2B22' # ⬢
$1_prompt_segment "$0" "green" "011" "${node_version:1} $NODE_ICON"
}
# rbenv information # rbenv information
prompt_rbenv() { prompt_rbenv() {
if [[ -n "$RBENV_VERSION" ]]; then if [[ -n "$RBENV_VERSION" ]]; then
@ -897,14 +910,26 @@ prompt_time() {
"$1_prompt_segment" "$0" "$DEFAULT_COLOR_INVERTED" "$DEFAULT_COLOR" "$time_format" "$1_prompt_segment" "$0" "$DEFAULT_COLOR_INVERTED" "$DEFAULT_COLOR" "$time_format"
} }
# todo.sh: shows the number of tasks in your todo.sh file
prompt_todo() {
if $(hash todo.sh 2>&-); then
count=$(todo.sh ls | egrep "TODO: [0-9]+ of ([0-9]+) tasks shown" | awk '{ print $4 }')
if [[ "$count" = <-> ]]; then
"$1_prompt_segment" "$0" "244" "$DEFAULT_COLOR" "$(print_icon 'TODO_ICON') $count"
fi
fi
}
# Vi Mode: show editing mode (NORMAL|INSERT) # Vi Mode: show editing mode (NORMAL|INSERT)
set_default POWERLEVEL9K_VI_INSERT_MODE_STRING "INSERT"
set_default POWERLEVEL9K_VI_COMMAND_MODE_STRING "NORMAL"
prompt_vi_mode() { prompt_vi_mode() {
case ${KEYMAP} in case ${KEYMAP} in
main|viins) main|viins)
"$1_prompt_segment" "$0_INSERT" "$DEFAULT_COLOR" "blue" "INSERT" "$1_prompt_segment" "$0_INSERT" "$DEFAULT_COLOR" "blue" "$POWERLEVEL9K_VI_INSERT_MODE_STRING"
;; ;;
vicmd) vicmd)
"$1_prompt_segment" "$0_NORMAL" "$DEFAULT_COLOR" "default" "NORMAL" "$1_prompt_segment" "$0_NORMAL" "$DEFAULT_COLOR" "default" "$POWERLEVEL9K_VI_COMMAND_MODE_STRING"
;; ;;
esac esac
} }
@ -914,7 +939,7 @@ prompt_vi_mode() {
# https://virtualenv.pypa.io/en/latest/ # https://virtualenv.pypa.io/en/latest/
prompt_virtualenv() { prompt_virtualenv() {
local virtualenv_path="$VIRTUAL_ENV" local virtualenv_path="$VIRTUAL_ENV"
if [[ -n "$virtualenv_path" && -n "$VIRTUAL_ENV_DISABLE_PROMPT" ]]; then if [[ -n "$virtualenv_path" && "$VIRTUAL_ENV_DISABLE_PROMPT" != true ]]; then
"$1_prompt_segment" "$0" "blue" "$DEFAULT_COLOR" "($(basename "$virtualenv_path"))" "$1_prompt_segment" "$0" "blue" "$DEFAULT_COLOR" "($(basename "$virtualenv_path"))"
fi fi
} }
@ -987,6 +1012,8 @@ powerlevel9k_init() {
print "You should set TERM=xterm-256colors in your ~/.zshrc" print "You should set TERM=xterm-256colors in your ~/.zshrc"
fi fi
setopt prompt_subst
setopt LOCAL_OPTIONS setopt LOCAL_OPTIONS
unsetopt XTRACE KSH_ARRAYS unsetopt XTRACE KSH_ARRAYS
setopt PROMPT_CR PROMPT_PERCENT PROMPT_SUBST MULTIBYTE setopt PROMPT_CR PROMPT_PERCENT PROMPT_SUBST MULTIBYTE
@ -994,9 +1021,8 @@ powerlevel9k_init() {
# initialize colors # initialize colors
autoload -U colors && colors autoload -U colors && colors
# initialize VCS # initialize hooks
autoload -Uz add-zsh-hook autoload -Uz add-zsh-hook
add-zsh-hook precmd vcs_info
# prepare prompts # prepare prompts
add-zsh-hook precmd powerlevel9k_prepare_prompts add-zsh-hook precmd powerlevel9k_prepare_prompts