1
0
Fork 0
mirror of https://github.com/romkatv/powerlevel10k.git synced 2024-12-18 05:40:07 +00:00

Merge branch 'master' into dritter/developers_guide

This commit is contained in:
Dominik Ritter 2015-07-09 19:11:03 +02:00
commit 008512cc79
3 changed files with 446 additions and 130 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
test-vm/.vagrant

244
README.md
View file

@ -1,13 +1,56 @@
## powerlevel9k Theme for Oh-My-Zsh ## powerlevel9k Theme for ZSH
This is a theme for [Oh-My-Zsh](https://github.com/robbyrussell/oh-my-zsh). This Powerlevel9k is a theme for ZSH which uses [Powerline
theme uses [Powerline Fonts](https://github.com/Lokaltog/powerline-fonts), thus Fonts](https://github.com/Lokaltog/powerline-fonts), thus giving you the most
giving you the most epic terminal styling in the universe. epic terminal styling in the universe.
Look like a bad-ass. Impress everyone in 'Screenshot Your Desktop' threads. Use powerlevel9k. Look like a bad-ass. Impress everyone in 'Screenshot Your Desktop' threads. Use powerlevel9k.
Powerlevel9k can be used with vanilla ZSH,
[Oh-My-Zsh](https://github.com/robbyrussell/oh-my-zsh), or
[Prezto](https://github.com/sorin-ionescu/prezto), and can also be installed
using [antigen](https://github.com/zsh-users/antigen).
In addition to looking amazing, this theme actually provides a lot of useful In addition to looking amazing, this theme actually provides a lot of useful
information in configurable prompt segments. information in configurable prompt segments. Here is an example of what it looks
like with a normal installation and default settings:
![](http://bhilburn.org/content/images/2015/01/pl9k-improved.png)
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*
- [Features](#features)
- [Installation](#installation)
- [Step 1: Install Powerlevel9k](#step-1-install-powerlevel9k)
- [Option 1: Install for Vanilla ZSH](#option-1-install-for-vanilla-zsh)
- [Option 2: Install for Oh-My-ZSH](#option-2-install-for-oh-my-zsh)
- [Option 3: Install for Prezto](#option-3-install-for-prezto)
- [Option 4: Install for antigen](#option-4-install-for-antigen)
- [Step 2: Install Powerline Fonts](#step-2-install-powerline-fonts)
- [Option 1: Install Powerline Fonts](#option-1-install-powerline-fonts)
- [Option 2: Install Awesome Powerline Fonts](#option-2-install-awesome-powerline-fonts)
- [Option 3: Compatible Mode](#option-3-compatible-mode)
- [Segment Customization](#segment-customization)
- [The AWS Profile Segment](#the-aws-profile-segment)
- [The 'context' Segment](#the-context-segment)
- [The 'time' segment](#the-time-segment)
- [Unit Test Ratios](#unit-test-ratios)
- [The 'vcs' Segment](#the-vcs-segment)
- [Symbols](#symbols)
- [Styling](#styling)
- [Double-Lined Prompt](#double-lined-prompt)
- [Light Color Theme](#light-color-theme)
- [Further color customizations](#further-color-customizations)
- [Troubleshooting](#troubleshooting)
- [Gaps Between Segments](#gaps-between-segments)
- [Meta](#meta)
- [Kudos](#kudos)
- [Contributions / Bugs / Contact](#contributions--bugs--contact)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
### Features ### Features
@ -21,7 +64,7 @@ information in configurable prompt segments.
* various working tree statuses (e.g., unstaged, staged, etc.,) * various working tree statuses (e.g., unstaged, staged, etc.,)
* Shows return-code of the last command if it is an error code * Shows return-code of the last command if it is an error code
* Indicates background jobs with a gear icon * Indicates background jobs with a gear icon
* Can conditionally display the `user@host` string when needed * Can conditionally display the `user@host` string when needed (e.g., SSH)
* Provides segment for command history (so you can `$ !<num>` to re-run) * Provides segment for command history (so you can `$ !<num>` to re-run)
* Plenty of additional segments to choose from (e.g., AWS, ruby) * Plenty of additional segments to choose from (e.g., AWS, ruby)
* Can be used as a single or double-lined prompt (see screenshots below) * Can be used as a single or double-lined prompt (see screenshots below)
@ -31,33 +74,44 @@ information in configurable prompt segments.
doesn't require Powerline fonts, check out the sister font, doesn't require Powerline fonts, check out the sister font,
[hackersaurus](https://github.com/bhilburn/hackersaurus).** [hackersaurus](https://github.com/bhilburn/hackersaurus).**
Here are some screenshots of `powerlevel9k` with default settings: Here is a detailed screenshot showing `powerlevel9k` with default settings and
varying terminal status indicators:
![](http://bhilburn.org/content/images/2014/12/powerlevel9k.png) ![](http://bhilburn.org/content/images/2014/12/powerlevel9k.png)
![](http://bhilburn.org/content/images/2015/01/pl9k-improved.png)
### Installation ### Installation
There are two steps to start using this theme:
There are two things you need to make this theme work correctly: Powerline 1. Install the Powerlevel9k theme.
fonts, and the theme itself. 2. Install Powerline-patched fonts.
3. [Optional] Configuration
#### Install Powerline Fonts To get the most out of Powerlevel9k, you need to install both the theme as well
First, you need to install Powerline Fonts. You can find the [installation as Powerline-patched fonts, if you don't have them installed already. If you
instructions cannot install Powerline-patched fonts for some reason, follow the instructions
here](https://powerline.readthedocs.org/en/latest/installation/linux.html#fonts-installation). below for a `compatible` install.
You can also find the raw font files [in this Github
repository](https://github.com/powerline/fonts) if you want to manually install
them for your OS.
After you have installed Powerline fonts, make the default font in your terminal No configuration is necessary post-installation if you like the default
emulator the Powerline font you want to use. settings, but there is plenty of segment configuration available if you are
interested.
#### Install Powerlevel9k #### Step 1: Install Powerlevel9k
There are four ways to install and use the Powerlevel9k theme: vanilla ZSH,
Oh-My-Zsh, Prezto, and antigen. Do one of the following:
To install this theme, clone this repository into your Oh-My-Zsh `custom/themes` ##### Option 1: Install for Vanilla ZSH
directory.
If you use just a vanilla ZSH install, simply clone this repository and
reference it in your `~/.zshrc`:
$ git clone https://github.com/bhilburn/powerlevel9k.git
$ echo 'source powerlevel9k/powerlevel9k.zsh-theme' >> ~/.zshrc
##### Option 2: Install for Oh-My-ZSH
To install this theme for
[Oh-My-Zsh](https://github.com/robbyrussell/oh-my-zsh), clone this repository
into your OMZ `custom/themes` directory.
$ cd ~/.oh-my-zsh/custom $ cd ~/.oh-my-zsh/custom
$ git clone https://github.com/bhilburn/powerlevel9k.git themes/powerlevel9k $ git clone https://github.com/bhilburn/powerlevel9k.git themes/powerlevel9k
@ -66,6 +120,99 @@ You then need to select this theme in your `~/.zshrc`:
ZSH_THEME="powerlevel9k/powerlevel9k" ZSH_THEME="powerlevel9k/powerlevel9k"
##### Option 3: Install for Prezto
To install this theme for use in Prezto, clone this repository into your
[Prezto](https://github.com/sorin-ionescu/prezto) `prompt/external` directory.
$ cd ~.zprezto/modules/prompt/external
$ git clone https://github.com/bhilburn/powerlevel9k.git
$ ln -s powerlevel9k/powerlevel9k.zsh-theme ../functions/prompt_powerlevel9k_setup
You then need to select this theme in your `~/.zpreztorc`:
zstyle ':prezto:module:prompt' theme 'powerlevel9k'
##### Option 4: Install for antigen
If you prefer [antigen](https://github.com/zsh-users/antigen), just add this
theme to the antigen config in your `~/.zshrc`:
$ echo 'antigen theme bhilburn/powerlevel9k powerlevel9k' >> ~/.zshrc
$ echo 'antigen apply' >> ~/.zshrc
Note that you should define any customizations before calling `antigen theme`
(i.e. setting the `POWERLEVEL9K_*` variables) in your `.zshrc`.
#### Step 2: Install Powerline Fonts
Technically, you don't *have* to install Powerline fonts. If you are using
a font that has some of the basic glyphs we need, you can use the theme in
`compatible` mode - see the third option, below.
To get the most out of theme, though, you'll want Powerline-patched fonts. There
are two varieties of these: 'Powerline Fonts' and 'Awesome Powerline
Fonts'. The latter includes additional glyphs that aren't required for a normal
install.
Do one of the following:
##### Option 1: Install Powerline Fonts
You can find the [installation instructions for Powerline Fonts here]
(https://powerline.readthedocs.org/en/latest/installation/linux.html#fonts-installation).
You can also find the raw font files [in this Github
repository](https://github.com/powerline/fonts) if you want to manually install
them for your OS.
After you have installed Powerline fonts, make the default font in your terminal
emulator the Powerline font you want to use.
This is the default mode for `Powerlevel9k`, and no further configuration is
necessary.
**N.B.:** If Powerlevel9k is not working properly, it is almost always the case
that the fonts were not properly installed, or you have not configured your
terminal to use a Powerline-patched font!
##### Option 2: Install Awesome Powerline Fonts
Alternatively, you can install [Awesome Powerline
Fonts](https://github.com/gabrielelana/awesome-terminal-fonts), which provide
a number of additional glyphs.
You then need to indicate that you wish to use the additional glyphs by defining
the following in your `~/.zshrc`:
POWERLEVEL9K_MODE='awesome-patched'
If you choose to make use of this, your prompt will look something like this:
![](https://cloud.githubusercontent.com/assets/1544760/7959660/67612918-09fb-11e5-9ef2-2308363c3c51.png)
Note that if you prefer flat segment transitions, you can use the following with
`Awesome Powerline Fonts` installed:
POWERLEVEL9K_MODE='flat'
Which looks like this:
![](https://cloud.githubusercontent.com/assets/1544760/7981324/76d0eb5a-0aae-11e5-9608-d662123d0b0a.png)
##### Option 3: Compatible Mode
This option is best if you prefer not to install additional fonts. This option
will work out-of-the-box if your your terminal font supports the segment
separator characters `\uE0B0` (left segment separator) and `\uE0B2` (right
segment separator).
All you need to do to in this case is install the `Powerlevel9k` theme itself,
as explained above, and then define the following in your `~/.zshrc`:
POWERLEVEL9K_MODE='compatible'
Note that depending on your terminal font, this may still not render
appropriately. This configuration should be used as a back-up.
### Segment Customization ### Segment Customization
Customizing your prompt is easy! Select the segments you want to have displayed, Customizing your prompt is easy! Select the segments you want to have displayed,
@ -80,6 +227,7 @@ currently available are:
* **rspec_stats** - Show a ratio of test classes vs code classes for RSpec. * **rspec_stats** - Show a ratio of test classes vs code classes for RSpec.
* **status** - The return code of the previous command, and status of background jobs. * **status** - The return code of the previous command, and status of background jobs.
* **symfony2_tests** - Show a ratio of test classes vs code classes for Symfony2. * **symfony2_tests** - Show a ratio of test classes vs code classes for Symfony2.
* **symfony2_version** - Show the current Symfony2 version, if you are in a Symfony2-Project dir.
* **time** - System time. * **time** - System time.
* **virtualenv** - Your Python [VirtualEnv](https://virtualenv.pypa.io/en/latest/). * **virtualenv** - Your Python [VirtualEnv](https://virtualenv.pypa.io/en/latest/).
* **vcs** - Information about this `git` or `hg` repository (if you are in one). * **vcs** - Information about this `git` or `hg` repository (if you are in one).
@ -133,26 +281,39 @@ By default, the `vcs` segment will provide quite a bit of information. If you
would also like for it to display the current hash / changeset, simply define would also like for it to display the current hash / changeset, simply define
`POWERLEVEL9K_SHOW_CHANGESET` in your `~/.zshrc`. If activated, it will show `POWERLEVEL9K_SHOW_CHANGESET` in your `~/.zshrc`. If activated, it will show
the first 12 characters of the changeset id. To change the amount of characters, the first 12 characters of the changeset id. To change the amount of characters,
set `POWERLEVEL9K_CHANGESET_HASH_LENTH` to any value you want. set `POWERLEVEL9K_CHANGESET_HASH_LENGTH` to any value you want.
Example:
# enable the vcs segment in general # enable the vcs segment in general
POWERLEVEL9K_SHOW_CHANGESET=true POWERLEVEL9K_SHOW_CHANGESET=true
# just show the 6 first characters of changeset # just show the 6 first characters of changeset
POWERLEVEL9K_CHANGESET_HASH_LENGTH=6 POWERLEVEL9K_CHANGESET_HASH_LENGTH=6
You can also enable an additional branch icon in your prompt by setting
`POWERLEVEL9K_SHOW_BRANCH_ICON` to `true`:
# Show an icon before the branch name
POWERLEVEL9K_SHOW_BRANCH_ICON=true
##### Symbols ##### Symbols
The `vcs` segment uses various symbols to tell you the state of your repository: The `vcs` segment uses various symbols to tell you the state of your repository.
These symbols depend on your installed font and selected `POWERLEVEL9K_MODE`
from the [Installation](#Installation) section above.
* `↑4` - The number of commits your repository is ahead of your remote branch | `Bare Bones` | `Normal` | `Über` | explanation
* `↓5` - The number of commits your repository is behind of your remote branch |--------------|---------------------|-------------------|--------------------------
* `⍟3` - The number of stashes, here 3. | `↑4` | `↑4` | ![icon_outgoing](https://cloud.githubusercontent.com/assets/1544760/7976089/b5904d6e-0a76-11e5-8147-5e873ac52d79.gif)4 | Number of commits your repository is ahead of your remote branch
* `●` - There are unstaged changes in your working copy | `↓5` | `↓5` | ![icon_incoming](https://cloud.githubusercontent.com/assets/1544760/7976091/b5909c9c-0a76-11e5-9cad-9bf0a28a897c.gif)5 | Number of commits your repository is behind of your remote branch
* `✚` - There are staged changes in your working copy | `⍟3` | `⍟3` | ![icon_stash](https://cloud.githubusercontent.com/assets/1544760/7976094/b5ae9346-0a76-11e5-8cc7-e98b81824118.gif)3 | Number of stashes, here 3.
* `?` - There are files in your working copy, that are unknown to your repository | `●` | `●` | ![icon_unstaged](https://cloud.githubusercontent.com/assets/1544760/7976096/b5aefa98-0a76-11e5-9408-985440471215.gif) | There are unstaged changes in your working copy
* `→` - The name of your branch differs from its tracking branch. | `✚` | `✚` | ![icon_staged](https://cloud.githubusercontent.com/assets/1544760/7976095/b5aecc8a-0a76-11e5-8988-221afc6e8982.gif) | There are staged changes in your working copy
* `☿` - A mercurial bookmark is active. | `?` | `?` | ![icon_untracked](https://cloud.githubusercontent.com/assets/1544760/7976098/b5c7a2e6-0a76-11e5-8c5b-315b595b2bc4.gif) | There are files in your working copy, that are unknown to your repository
| `→` | `→` | ![icon_remote_tracking_branch](https://cloud.githubusercontent.com/assets/1544760/7976093/b5ad2c0e-0a76-11e5-9cd3-62a077b1b0c7.gif) | The name of your branch differs from its tracking branch.
| `☿` | `☿` | ![icon_bookmark](https://cloud.githubusercontent.com/assets/1544760/7976197/546cfac6-0a78-11e5-88a6-ce3a1e0a174e.gif) | A mercurial bookmark is active.
| `@` | ![icon_branch_powerline](https://cloud.githubusercontent.com/assets/1544760/8000852/e7e8d8a0-0b5f-11e5-9834-de9b25c92284.gif) | ![](https://cloud.githubusercontent.com/assets/1544760/7976087/b58bbe3e-0a76-11e5-8d0d-7a5c1bc7f730.gif) | Branch Icon
| None | None | ![icon_commit](https://cloud.githubusercontent.com/assets/1544760/7976088/b58f4e50-0a76-11e5-9e70-86450d937030.gif)2c3705 | The current commit hash. Here "2c3705"
| None | None | ![icon_git](https://cloud.githubusercontent.com/assets/1544760/7976092/b5909f80-0a76-11e5-9950-1438b9d72465.gif) | Repository is a git repository
| None | None | ![icon_mercurial](https://cloud.githubusercontent.com/assets/1544760/7976090/b5908da6-0a76-11e5-8c91-452b6e73f631.gif) | Repository is a Mercurial repository
### Styling ### Styling
@ -245,13 +406,20 @@ Thankfully, this is easy to fix. This happens if you have successfully installed
Powerline fonts, but did not make a Powerline font the default font in your Powerline fonts, but did not make a Powerline font the default font in your
terminal emulator (e.g., 'terminator', 'gnome-terminal', 'konsole', etc.,). terminal emulator (e.g., 'terminator', 'gnome-terminal', 'konsole', etc.,).
### Contributions / Bugs / Contact ### Meta
#### Kudos
This theme wouldn't have happened without inspiration from the original [agnoster](https://gist.github.com/agnoster/3712874) Oh-My-ZSH theme.
Before creating this theme, I also tried [jeremyFreeAgent's theme](https://github.com/jeremyFreeAgent/oh-my-zsh-powerline-theme) and [maverick2000's theme, ZSH2000](https://github.com/maverick2000/zsh2000).
#### Contributions / Bugs / Contact
If you have any requests or bug reports, please use the tracker in this Github If you have any requests or bug reports, please use the tracker in this Github
repository. repository.
I'm happy to accept code contributions from anyone who has an improvement! I'm happy to accept code contributions from anyone who has a bug fix, new feature, or just a general improvement! Please submit your contribution as a Github pull-request.
Please submit your contribution as a Github pull-request.
If you would like to contact me directly, you can find my e-mail address on my If you would like to contact me directly, you can find my e-mail address on my
[Github profile page](https://github.com/bhilburn). [Github profile page](https://github.com/bhilburn).

View file

@ -8,9 +8,6 @@
# #
# The `vcs_info` hooks in this file are from Tom Upton: # The `vcs_info` hooks in this file are from Tom Upton:
# https://github.com/tupton/dotfiles/blob/master/zsh/zshrc # https://github.com/tupton/dotfiles/blob/master/zsh/zshrc
#
# In order for this theme to render correctly, you will need a Powerline-patched font:
# https://github.com/Lokaltog/powerline-fonts
################################################################ ################################################################
################################################################ ################################################################
@ -43,24 +40,140 @@
# POWERLEVEL9K_COLOR_SCHEME='light' # POWERLEVEL9K_COLOR_SCHEME='light'
################################################################ ################################################################
# The `CURRENT_BG` variable is used to remember what the last BG color used was ## Debugging
# when building the left-hand prompt. Because the RPROMPT is created from #zstyle ':vcs_info:*+*:*' debug true
# right-left but reads the opposite, this isn't necessary for the other side. #set -o xtrace
CURRENT_BG='NONE'
# These characters require the Powerline fonts to work properly. If see boxes or # These characters require the Powerline fonts to work properly. If see boxes or
# bizarre characters below, your fonts are not correctly installed. # bizarre characters below, your fonts are not correctly installed. If you
LEFT_SEGMENT_SEPARATOR='' # do not want to install a special font, you can set `POWERLEVEL9K_MODE` to
RIGHT_SEGMENT_SEPARATOR='' # `compatible`. This shows all icons in regular symbols.
VCS_UNSTAGED_ICON='●' case $POWERLEVEL9K_MODE in
VCS_STAGED_ICON='✚' 'flat')
# Awesome-Patched Font required!
# See https://github.com/gabrielelana/awesome-terminal-fonts/tree/patching-strategy/patched
LEFT_SEGMENT_SEPARATOR=''
RIGHT_SEGMENT_SEPARATOR=''
ROOT_ICON="\uE801" # 
RUBY_ICON="\uE847" # 
AWS_ICON="\uE895" # 
BACKGROUND_JOBS_ICON="\uE82F " # 
TEST_ICON="\uE891" # 
OK_ICON="\u2713" # ✓
FAIL_ICON="\u2718" # ✘
SYMFONY_ICON="SF"
VCS_UNTRACKED_ICON="\uE16C" # 
VCS_UNSTAGED_ICON="\uE17C" # 
VCS_STAGED_ICON="\uE168" # 
VCS_STASH_ICON="\uE133 " # 
#VCS_INCOMING_CHANGES="\uE1EB " # 
#VCS_INCOMING_CHANGES="\uE80D " # 
VCS_INCOMING_CHANGES="\uE131 " # 
#VCS_OUTGOING_CHANGES="\uE1EC " # 
#VCS_OUTGOING_CHANGES="\uE80E " # 
VCS_OUTGOING_CHANGES="\uE132 " # 
VCS_TAG_ICON="\uE817 " # 
VCS_BOOKMARK_ICON="\uE87B" # 
VCS_COMMIT_ICON="\uE821 " # 
VCS_BRANCH_ICON=" \uE220" # 
VCS_REMOTE_BRANCH_ICON="\uE804" # 
VCS_GIT_ICON="\uE20E " # 
VCS_HG_ICON="\uE1C3 " # 
;;
'compatible')
LEFT_SEGMENT_SEPARATOR="\u2B80" # ⮀
RIGHT_SEGMENT_SEPARATOR="\u2B82" # ⮂
ROOT_ICON="\u26A1" # ⚡
RUBY_ICON=''
AWS_ICON="AWS:"
BACKGROUND_JOBS_ICON="\u2699" # ⚙
TEST_ICON=''
OK_ICON="\u2713" # ✓
FAIL_ICON="\u2718" # ✘
SYMFONY_ICON="SF"
VCS_UNTRACKED_ICON='?'
VCS_UNSTAGED_ICON="\u25CF" # ●
VCS_STAGED_ICON="\u271A" # ✚
VCS_STASH_ICON="\u235F" # ⍟
VCS_INCOMING_CHANGES="\u2193" # ↓
VCS_OUTGOING_CHANGES="\u2191" # ↑
VCS_TAG_ICON=''
VCS_BOOKMARK_ICON="\u263F" # ☿
VCS_COMMIT_ICON=''
VCS_BRANCH_ICON='@'
VCS_REMOTE_BRANCH_ICON="\u2192" # →
VCS_GIT_ICON='Git'
VCS_HG_ICON='HG'
;;
'awesome-patched')
# Awesome-Patched Font required!
# See https://github.com/gabrielelana/awesome-terminal-fonts/tree/patching-strategy/patched
LEFT_SEGMENT_SEPARATOR="\uE0B0" # 
RIGHT_SEGMENT_SEPARATOR="\uE0B2" # 
ROOT_ICON="\u26A1" # ⚡
RUBY_ICON="\uE847" # 
AWS_ICON="\uE895" # 
BACKGROUND_JOBS_ICON="\uE82F " # 
TEST_ICON="\uE891" # 
OK_ICON="\u2713" # ✓
FAIL_ICON="\u2718" # ✘
SYMFONY_ICON="SF"
VCS_UNTRACKED_ICON="\uE16C" # 
VCS_UNSTAGED_ICON="\uE17C" # 
VCS_STAGED_ICON="\uE168" # 
VCS_STASH_ICON="\uE133 " # 
#VCS_INCOMING_CHANGES="\uE1EB " # 
#VCS_INCOMING_CHANGES="\uE80D " # 
VCS_INCOMING_CHANGES="\uE131 " # 
#VCS_OUTGOING_CHANGES="\uE1EC " # 
#VCS_OUTGOING_CHANGES="\uE80E " # 
VCS_OUTGOING_CHANGES="\uE132 " # 
VCS_TAG_ICON="\uE817 " # 
VCS_BOOKMARK_ICON="\uE87B" # 
VCS_COMMIT_ICON="\uE821 " # 
VCS_BRANCH_ICON=" \uE220" # 
VCS_REMOTE_BRANCH_ICON="\uE804" # 
VCS_GIT_ICON="\uE20E " # 
VCS_HG_ICON="\uE1C3 " # 
;;
*)
# Powerline-Patched Font required!
# See https://github.com/Lokaltog/powerline-fonts
LEFT_SEGMENT_SEPARATOR="\uE0B0" # 
RIGHT_SEGMENT_SEPARATOR="\uE0B2" # 
ROOT_ICON="\u26A1" # ⚡
RUBY_ICON=''
AWS_ICON="AWS:"
BACKGROUND_JOBS_ICON="\u2699" # ⚙
TEST_ICON=''
OK_ICON="\u2713" # ✓
FAIL_ICON="\u2718" # ✘
SYMFONY_ICON="SF"
VCS_UNTRACKED_ICON='?'
VCS_UNSTAGED_ICON="\u25CF" # ●
VCS_STAGED_ICON="\u271A" # ✚
VCS_STASH_ICON="\u235F" # ⍟
VCS_INCOMING_CHANGES="\u2193" # ↓
VCS_OUTGOING_CHANGES="\u2191" # ↑
VCS_TAG_ICON=''
VCS_BOOKMARK_ICON="\u263F" # ☿
VCS_COMMIT_ICON=''
VCS_BRANCH_ICON='@'
VCS_REMOTE_BRANCH_ICON="\u2192" # →
VCS_GIT_ICON="\uE0A0" # 
VCS_HG_ICON="\uE0A0" # 
;;
esac
if [[ "$POWERLEVEL9K_SHOW_BRANCH_ICON" != true ]]; then
VCS_BRANCH_ICON=''
fi
################################################################ ################################################################
# color scheme # color scheme
################################################################ ################################################################
local DEFAULT_COLOR DEFAULT_COLOR_INVERTED DEFAULT_COLOR_DARK if [[ "$POWERLEVEL9K_COLOR_SCHEME" == "light" ]]; then
if [[ $POWERLEVEL9K_COLOR_SCHEME == "light" ]]; then
DEFAULT_COLOR=white DEFAULT_COLOR=white
DEFAULT_COLOR_INVERTED=black DEFAULT_COLOR_INVERTED=black
DEFAULT_COLOR_DARK="252" DEFAULT_COLOR_DARK="252"
@ -70,8 +183,8 @@ else
DEFAULT_COLOR_DARK="236" DEFAULT_COLOR_DARK="236"
fi fi
local VCS_FOREGROUND_COLOR=$DEFAULT_COLOR VCS_FOREGROUND_COLOR=$DEFAULT_COLOR
local VCS_FOREGROUND_COLOR_DARK=$DEFAULT_COLOR_DARK VCS_FOREGROUND_COLOR_DARK=$DEFAULT_COLOR_DARK
# If user has defined custom colors for the `vcs` segment, override the defaults # If user has defined custom colors for the `vcs` segment, override the defaults
if [[ -n $POWERLEVEL9K_VCS_FOREGROUND ]]; then if [[ -n $POWERLEVEL9K_VCS_FOREGROUND ]]; then
@ -88,31 +201,35 @@ fi
setopt prompt_subst setopt prompt_subst
autoload -Uz vcs_info autoload -Uz vcs_info
local VCS_WORKDIR_DIRTY=false VCS_WORKDIR_DIRTY=false
local VCS_CHANGESET_PREFIX='' VCS_CHANGESET_PREFIX=''
if [[ "$POWERLEVEL9K_SHOW_CHANGESET" == true ]]; then if [[ "$POWERLEVEL9K_SHOW_CHANGESET" == true ]]; then
# Default: Just display the first 12 characters of our changeset-ID. # Default: Just display the first 12 characters of our changeset-ID.
local VCS_CHANGESET_HASH_LENGTH=12 local VCS_CHANGESET_HASH_LENGTH=12
if [[ -n $POWERLEVEL9K_CHANGESET_HASH_LENGTH ]]; then if [[ -n "$POWERLEVEL9K_CHANGESET_HASH_LENGTH" ]]; then
VCS_CHANGESET_HASH_LENGTH=$POWERLEVEL9K_CHANGESET_HASH_LENGTH VCS_CHANGESET_HASH_LENGTH="$POWERLEVEL9K_CHANGESET_HASH_LENGTH"
fi fi
VCS_CHANGESET_PREFIX="%F{$VCS_FOREGROUND_COLOR_DARK}%0.$VCS_CHANGESET_HASH_LENGTH""i@%f" VCS_CHANGESET_PREFIX="%F{$VCS_FOREGROUND_COLOR_DARK}$VCS_COMMIT_ICON%0.$VCS_CHANGESET_HASH_LENGTH""i%f"
fi fi
zstyle ':vcs_info:*' enable git hg zstyle ':vcs_info:*' enable git hg
zstyle ':vcs_info:*' check-for-changes true zstyle ':vcs_info:*' check-for-changes true
zstyle ':vcs_info:*' formats " $VCS_CHANGESET_PREFIX%F{$VCS_FOREGROUND_COLOR}%b%c%u%m%f" VCS_DEFAULT_FORMAT="$VCS_CHANGESET_PREFIX%F{$VCS_FOREGROUND_COLOR}%b%c%u%m%f"
zstyle ':vcs_info:git:*' formats "%F{$VCS_FOREGROUND_COLOR}$VCS_GIT_ICON%f $VCS_DEFAULT_FORMAT"
zstyle ':vcs_info:hg:*' formats "%F{$VCS_FOREGROUND_COLOR}$VCS_HG_ICON%f $VCS_DEFAULT_FORMAT"
zstyle ':vcs_info:*' actionformats " %b %F{red}| %a%f" zstyle ':vcs_info:*' actionformats " %b %F{red}| %a%f"
zstyle ':vcs_info:*' stagedstr " %F{$VCS_FOREGROUND_COLOR}$VCS_STAGED_ICON%f" zstyle ':vcs_info:*' stagedstr " %F{$VCS_FOREGROUND_COLOR}$VCS_STAGED_ICON%f"
zstyle ':vcs_info:*' unstagedstr " %F{$VCS_FOREGROUND_COLOR}$VCS_UNSTAGED_ICON%f" zstyle ':vcs_info:*' unstagedstr " %F{$VCS_FOREGROUND_COLOR}$VCS_UNSTAGED_ICON%f"
zstyle ':vcs_info:git*+set-message:*' hooks git-untracked git-aheadbehind git-stash git-remotebranch git-tagname 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 # For Hg, only show the branch name
zstyle ':vcs_info:hg*:*' branchformat "%b" zstyle ':vcs_info:hg*:*' branchformat "$VCS_BRANCH_ICON%b"
# The `get-revision` function must be turned on for dirty-check to work for Hg # 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-revision true
zstyle ':vcs_info:hg*:*' get-bookmarks true zstyle ':vcs_info:hg*:*' get-bookmarks true
@ -126,10 +243,6 @@ else
zstyle ':vcs_info:*' use-simple true zstyle ':vcs_info:*' use-simple true
fi fi
## Debugging
#zstyle ':vcs_info:*+*:*' debug true
#set -o xtrace
################################################################ ################################################################
# Prompt Segment Constructors # Prompt Segment Constructors
################################################################ ################################################################
@ -162,22 +275,24 @@ left_prompt_segment() {
[[ -n $2 ]] && bg="%K{$2}" || bg="%k" [[ -n $2 ]] && bg="%K{$2}" || bg="%k"
[[ -n $3 ]] && fg="%F{$3}" || fg="%f" [[ -n $3 ]] && fg="%F{$3}" || fg="%f"
if [[ $CURRENT_BG != 'NONE' && $2 != $CURRENT_BG ]]; then if [[ $CURRENT_BG != 'NONE' && $2 != $CURRENT_BG ]]; then
# Middle segment
echo -n "%{$bg%F{$CURRENT_BG}%}$LEFT_SEGMENT_SEPARATOR%{$fg%} " echo -n "%{$bg%F{$CURRENT_BG}%}$LEFT_SEGMENT_SEPARATOR%{$fg%} "
else else
# First segment
echo -n "%{$bg%}%{$fg%} " echo -n "%{$bg%}%{$fg%} "
fi fi
CURRENT_BG=$2 CURRENT_BG=$2
[[ -n $4 ]] && echo -n $4 [[ -n $4 ]] && echo -n "$4 "
} }
# End the left prompt, closing any open segments # End the left prompt, closing any open segments
left_prompt_end() { left_prompt_end() {
if [[ -n $CURRENT_BG ]]; then if [[ -n $CURRENT_BG ]]; then
echo -n " %{%k%F{$CURRENT_BG}%}$LEFT_SEGMENT_SEPARATOR" echo -n "%{%k%F{$CURRENT_BG}%}$LEFT_SEGMENT_SEPARATOR"
else else
echo -n " %{%k%}" echo -n "%{%k%}"
fi fi
echo -n "%{%f%}" echo -n "%{%f%} "
CURRENT_BG='' CURRENT_BG=''
} }
@ -203,8 +318,8 @@ right_prompt_segment() {
local bg fg local bg fg
[[ -n $2 ]] && bg="%K{$2}" || bg="%k" [[ -n $2 ]] && bg="%K{$2}" || bg="%k"
[[ -n $3 ]] && fg="%F{$3}" || fg="%f" [[ -n $3 ]] && fg="%F{$3}" || fg="%f"
echo -n " %f%F{$2}$RIGHT_SEGMENT_SEPARATOR%f%{$bg%}%{$fg%} " echo -n "%f%F{$2}$RIGHT_SEGMENT_SEPARATOR%f%{$bg%}%{$fg%} "
[[ -n $4 ]] && echo -n $4 [[ -n $4 ]] && echo -n "$4 "
} }
################################################################ ################################################################
@ -213,21 +328,21 @@ right_prompt_segment() {
prompt_vcs() { prompt_vcs() {
local vcs_prompt="${vcs_info_msg_0_}" local vcs_prompt="${vcs_info_msg_0_}"
if [[ -n $vcs_prompt ]]; then if [[ -n "$vcs_prompt" ]]; then
if [[ "$VCS_WORKDIR_DIRTY" == true ]]; then if [[ "$VCS_WORKDIR_DIRTY" == true ]]; then
$1_prompt_segment $0_MODIFIED yellow $DEFAULT_COLOR $1_prompt_segment "$0_MODIFIED" "yellow" "$DEFAULT_COLOR"
else else
$1_prompt_segment $0 green $DEFAULT_COLOR $1_prompt_segment "$0" "green" "$DEFAULT_COLOR"
fi fi
echo -n "%F{$VCS_FOREGROUND_COLOR}%f$vcs_prompt" echo -n "%F{$VCS_FOREGROUND_COLOR}%f$vcs_prompt "
fi fi
} }
function +vi-git-untracked() { function +vi-git-untracked() {
if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' && \ if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' && \
$(git ls-files --others --exclude-standard | sed q | wc -l | tr -d ' ') != 0 ]]; then $(git ls-files --others --exclude-standard | sed q | wc -l | tr -d ' ') != 0 ]]; then
hook_com[unstaged]+=" %F{$VCS_FOREGROUND_COLOR}?%f" hook_com[unstaged]+=" %F{$VCS_FOREGROUND_COLOR}$VCS_UNTRACKED_ICON%f"
fi fi
} }
@ -240,12 +355,12 @@ function +vi-git-aheadbehind() {
# for git prior to 1.7 # for git prior to 1.7
# ahead=$(git rev-list origin/${branch_name}..HEAD | wc -l) # ahead=$(git rev-list origin/${branch_name}..HEAD | wc -l)
ahead=$(git rev-list ${branch_name}@{upstream}..HEAD 2>/dev/null | wc -l | tr -d ' ') ahead=$(git rev-list ${branch_name}@{upstream}..HEAD 2>/dev/null | wc -l | tr -d ' ')
(( $ahead )) && gitstatus+=( " %F{$VCS_FOREGROUND_COLOR}${ahead// /}%f" ) (( $ahead )) && gitstatus+=( " %F{$VCS_FOREGROUND_COLOR}$VCS_OUTGOING_CHANGES${ahead// /}%f" )
# for git prior to 1.7 # for git prior to 1.7
# behind=$(git rev-list HEAD..origin/${branch_name} | wc -l) # behind=$(git rev-list HEAD..origin/${branch_name} | wc -l)
behind=$(git rev-list HEAD..${branch_name}@{upstream} 2>/dev/null | wc -l | tr -d ' ') behind=$(git rev-list HEAD..${branch_name}@{upstream} 2>/dev/null | wc -l | tr -d ' ')
(( $behind )) && gitstatus+=( " %F{$VCS_FOREGROUND_COLOR}${behind// /}%f" ) (( $behind )) && gitstatus+=( " %F{$VCS_FOREGROUND_COLOR}$VCS_INCOMING_CHANGES${behind// /}%f" )
hook_com[misc]+=${(j::)gitstatus} hook_com[misc]+=${(j::)gitstatus}
} }
@ -257,12 +372,12 @@ function +vi-git-remotebranch() {
remote=${$(git rev-parse --verify HEAD@{upstream} --symbolic-full-name 2>/dev/null)/refs\/(remotes|heads)\/} remote=${$(git rev-parse --verify HEAD@{upstream} --symbolic-full-name 2>/dev/null)/refs\/(remotes|heads)\/}
branch_name=${$(git symbolic-ref --short HEAD 2>/dev/null)} branch_name=${$(git symbolic-ref --short HEAD 2>/dev/null)}
hook_com[branch]="%F{$VCS_FOREGROUND_COLOR}${hook_com[branch]}%f" hook_com[branch]="%F{$VCS_FOREGROUND_COLOR}$VCS_BRANCH_ICON${hook_com[branch]}%f"
# Always show the remote # Always show the remote
#if [[ -n ${remote} ]] ; then #if [[ -n ${remote} ]] ; then
# Only show the remote if it differs from the local # Only show the remote if it differs from the local
if [[ -n ${remote} && ${remote#*/} != ${branch_name} ]] ; then if [[ -n ${remote} && ${remote#*/} != ${branch_name} ]] ; then
hook_com[branch]+="%F{$VCS_FOREGROUND_COLOR}%f%F{$VCS_FOREGROUND_COLOR}${remote// /}%f" hook_com[branch]+="%F{$VCS_FOREGROUND_COLOR}$VCS_REMOTE_BRANCH_ICON%f%F{$VCS_FOREGROUND_COLOR}${remote// /}%f"
fi fi
} }
@ -270,7 +385,7 @@ function +vi-git-tagname() {
local tag local tag
tag=$(git describe --tags --exact-match HEAD 2>/dev/null) tag=$(git describe --tags --exact-match HEAD 2>/dev/null)
[[ -n ${tag} ]] && hook_com[branch]=" %F{$VCS_FOREGROUND_COLOR}${tag}%f" [[ -n "${tag}" ]] && hook_com[branch]=" %F{$VCS_FOREGROUND_COLOR}$VCS_TAG_ICON${tag}%f"
} }
# Show count of stashed changes # Show count of stashed changes
@ -280,13 +395,13 @@ function +vi-git-stash() {
if [[ -s $(git rev-parse --git-dir)/refs/stash ]] ; then if [[ -s $(git rev-parse --git-dir)/refs/stash ]] ; then
stashes=$(git stash list 2>/dev/null | wc -l) stashes=$(git stash list 2>/dev/null | wc -l)
hook_com[misc]+=" %F{$VCS_FOREGROUND_COLOR}${stashes// /}%f" hook_com[misc]+=" %F{$VCS_FOREGROUND_COLOR}$VCS_STASH_ICON${stashes// /}%f"
fi fi
} }
function +vi-hg-bookmarks() { function +vi-hg-bookmarks() {
if [[ -n "${hgbmarks[@]}" ]]; then if [[ -n "${hgbmarks[@]}" ]]; then
hook_com[hg-bookmark-string]=" ☿ ${hgbmarks[@]}" hook_com[hg-bookmark-string]=" %F{$VCS_FOREGROUND_COLOR}$VCS_BOOKMARK_ICON${hgbmarks[@]}%f"
# And to signal, that we want to use the sting we just generated, # And to signal, that we want to use the sting we just generated,
# set the special variable `ret' to something other than the default # set the special variable `ret' to something other than the default
@ -297,7 +412,7 @@ function +vi-hg-bookmarks() {
} }
function +vi-vcs-detect-changes() { function +vi-vcs-detect-changes() {
if [[ -n ${hook_com[staged]} ]] || [[ -n ${hook_com[unstaged]} ]]; then if [[ -n "${hook_com[staged]}" ]] || [[ -n "${hook_com[unstaged]}" ]]; then
VCS_WORKDIR_DIRTY=true VCS_WORKDIR_DIRTY=true
else else
VCS_WORKDIR_DIRTY=false VCS_WORKDIR_DIRTY=false
@ -308,12 +423,17 @@ function +vi-vcs-detect-changes() {
# Prompt Segments # Prompt Segments
################################################################ ################################################################
# The `CURRENT_BG` variable is used to remember what the last BG color used was
# when building the left-hand prompt. Because the RPROMPT is created from
# right-left but reads the opposite, this isn't necessary for the other side.
CURRENT_BG='NONE'
# AWS Profile # AWS Profile
prompt_aws() { prompt_aws() {
local aws_profile=$AWS_DEFAULT_PROFILE local aws_profile="$AWS_DEFAULT_PROFILE"
if [[ -n $aws_profile ]]; if [[ -n "$aws_profile" ]];
then then
$1_prompt_segment $0 red white "AWS: $aws_profile" $1_prompt_segment "$0" red white "$AWS_ICON $aws_profile"
fi fi
} }
@ -321,18 +441,18 @@ prompt_aws() {
# Note that if $DEFAULT_USER is not set, this prompt segment will always print # Note that if $DEFAULT_USER is not set, this prompt segment will always print
prompt_context() { prompt_context() {
if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
$1_prompt_segment $0 $DEFAULT_COLOR "011" "%(!.%{%F{yellow}%}.)$USER@%m" $1_prompt_segment "$0" "$DEFAULT_COLOR" "011" "%(!.%{%F{yellow}%}.)$USER@%m"
fi fi
} }
# Dir: current working directory # Dir: current working directory
prompt_dir() { prompt_dir() {
$1_prompt_segment $0 blue $DEFAULT_COLOR '%~' $1_prompt_segment "$0" "blue" "$DEFAULT_COLOR" '%~'
} }
# Command number (in local history) # Command number (in local history)
prompt_history() { prompt_history() {
$1_prompt_segment $0 "244" $DEFAULT_COLOR '%h' $1_prompt_segment "$0" "244" "$DEFAULT_COLOR" '%h'
} }
# Right Status: (return code, root status, background jobs) # Right Status: (return code, root status, background jobs)
@ -342,24 +462,24 @@ prompt_longstatus() {
local symbols bg local symbols bg
symbols=() symbols=()
if [[ $RETVAL -ne 0 ]]; then if [[ "$RETVAL" -ne 0 ]]; then
symbols+="%{%F{"226"}%}%? ↵" symbols+="%F{226}%? ↵"
bg="009" bg="009"
else else
symbols+="%{%F{"046"}%}" symbols+="%{%F{"046"}%}$OK_ICON"
bg="008" bg="008"
fi fi
[[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}⚡" [[ "$UID" -eq 0 ]] && symbols+="%{%F{yellow}%} $ROOT_ICON"
[[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}" [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}$BACKGROUND_JOBS_ICON"
[[ -n "$symbols" ]] && $1_prompt_segment $0 $bg $DEFAULT_COLOR "$symbols" [[ -n "$symbols" ]] && $1_prompt_segment "$0" "$bg" "$DEFAULT_COLOR" "$symbols"
} }
# rbenv information # rbenv information
prompt_rbenv() { prompt_rbenv() {
if [[ -n "$RBENV_VERSION" ]]; then if [[ -n "$RBENV_VERSION" ]]; then
$1_prompt_segment $0 red $DEFAULT_COLOR "$RBENV_VERSION" $1_prompt_segment "$0" "red" "$DEFAULT_COLOR" "$RBENV_VERSION"
fi fi
} }
@ -369,7 +489,7 @@ prompt_rspec_stats() {
local code_amount=$(ls -1 app/**/*.rb | wc -l) local code_amount=$(ls -1 app/**/*.rb | wc -l)
local tests_amount=$(ls -1 spec/**/*.rb | wc -l) local tests_amount=$(ls -1 spec/**/*.rb | wc -l)
build_test_stats $1 $0 $code_amount $tests_amount "RSpec" build_test_stats "$1" $0 "$code_amount" $tests_amount "RSpec $TEST_ICON"
fi fi
} }
@ -378,7 +498,7 @@ prompt_rvm() {
local rvm_prompt local rvm_prompt
rvm_prompt=`rvm-prompt` rvm_prompt=`rvm-prompt`
if [ "$rvm_prompt" != "" ]; then if [ "$rvm_prompt" != "" ]; then
$1_prompt_segment $0 "240" $DEFAULT_COLOR "$rvm_prompt " $1_prompt_segment "$0" "240" "$DEFAULT_COLOR" "$rvm_prompt $RUBY_ICON "
fi fi
} }
@ -387,11 +507,11 @@ prompt_rvm() {
prompt_status() { prompt_status() {
local symbols local symbols
symbols=() symbols=()
[[ $RETVAL -ne 0 ]] && symbols+="%{%F{red}%}✘" [[ "$RETVAL" -ne 0 ]] && symbols+="%{%F{red}%}$FAIL_ICON"
[[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}⚡" [[ "$UID" -eq 0 ]] && symbols+="%{%F{yellow}%} $ROOT_ICON"
[[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}" [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}$BACKGROUND_JOBS_ICON"
[[ -n "$symbols" ]] && $1_prompt_segment $0 $DEFAULT_COLOR default "$symbols" [[ -n "$symbols" ]] && $1_prompt_segment "$0" "$DEFAULT_COLOR" "default" "$symbols"
} }
# Symfony2-PHPUnit test ratio # Symfony2-PHPUnit test ratio
@ -400,33 +520,41 @@ prompt_symfony2_tests() {
local code_amount=$(ls -1 src/**/*.php | grep -v Tests | wc -l) local code_amount=$(ls -1 src/**/*.php | grep -v Tests | wc -l)
local tests_amount=$(ls -1 src/**/*.php | grep Tests | wc -l) local tests_amount=$(ls -1 src/**/*.php | grep Tests | wc -l)
build_test_stats $1 $0 $code_amount $tests_amount "SF2-Tests" build_test_stats "$1" "$0" "$code_amount" "$tests_amount" "SF2 $TEST_ICON"
fi
}
# Symfony2-Version
prompt_symfony2_version() {
if [[ -f app/bootstrap.php.cache ]]; then
local symfony2_version=$(grep " VERSION " app/bootstrap.php.cache | sed -e 's/[^.0-9]*//g')
$1_prompt_segment "$0" "240" "$DEFAULT_COLOR" "$SYMFONY_ICON $symfony2_version"
fi fi
} }
# Show a ratio of tests vs code # Show a ratio of tests vs code
build_test_stats() { build_test_stats() {
local code_amount=$3 local code_amount="$3"
local tests_amount=$4+0.00001 local tests_amount="$4"+0.00001
local headline=$5 local headline="$5"
# Set float precision to 2 digits: # Set float precision to 2 digits:
typeset -F 2 ratio typeset -F 2 ratio
local ratio=$(( (tests_amount/code_amount) * 100 )) local ratio=$(( (tests_amount/code_amount) * 100 ))
[[ ratio -ge 0.75 ]] && $1_prompt_segment ${2}_GOOD cyan $DEFAULT_COLOR "$headline: $ratio%%" [[ ratio -ge 0.75 ]] && $1_prompt_segment "${2}_GOOD" "cyan" "$DEFAULT_COLOR" "$headline: $ratio%%"
[[ ratio -ge 0.5 && ratio -lt 0.75 ]] && $1_prompt_segment $2_AVG yellow $DEFAULT_COLOR "$headline: $ratio%%" [[ ratio -ge 0.5 && ratio -lt 0.75 ]] && $1_prompt_segment "$2_AVG" "yellow" "$DEFAULT_COLOR" "$headline: $ratio%%"
[[ ratio -lt 0.5 ]] && $1_prompt_segment $2_BAD red $DEFAULT_COLOR "$headline: $ratio%%" [[ ratio -lt 0.5 ]] && $1_prompt_segment "$2_BAD" "red" "$DEFAULT_COLOR" "$headline: $ratio%%"
} }
# System time # System time
prompt_time() { prompt_time() {
local time_format='%D{%H:%M:%S}' local time_format="%D{%H:%M:%S}"
if [[ -n $POWERLEVEL9K_TIME_FORMAT ]]; then if [[ -n "$POWERLEVEL9K_TIME_FORMAT" ]]; then
time_format=$POWERLEVEL9K_TIME_FORMAT time_format="$POWERLEVEL9K_TIME_FORMAT"
fi fi
$1_prompt_segment $0 $DEFAULT_COLOR_INVERTED $DEFAULT_COLOR "$time_format " $1_prompt_segment "$0" "$DEFAULT_COLOR_INVERTED" "$DEFAULT_COLOR" "$time_format"
} }
# Virtualenv: current working virtualenv # Virtualenv: current working virtualenv
@ -434,8 +562,8 @@ prompt_time() {
# 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" && -n "$VIRTUAL_ENV_DISABLE_PROMPT" ]]; then
$1_prompt_segment $0 blue $DEFAULT_COLOR "(`basename $virtualenv_path`)" $1_prompt_segment "$0" "blue" "$DEFAULT_COLOR" "(`basename $virtualenv_path`)"
fi fi
} }
@ -445,7 +573,7 @@ prompt_virtualenv() {
# Main prompt # Main prompt
build_left_prompt() { build_left_prompt() {
if [[ ${#POWERLEVEL9K_LEFT_PROMPT_ELEMENTS} == 0 ]]; then if [[ "${#POWERLEVEL9K_LEFT_PROMPT_ELEMENTS}" == 0 ]]; then
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir rbenv vcs) POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir rbenv vcs)
fi fi
@ -460,7 +588,7 @@ build_left_prompt() {
build_right_prompt() { build_right_prompt() {
RETVAL=$? RETVAL=$?
if [[ ${#POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS} == 0 ]]; then if [[ "${#POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS}" == 0 ]]; then
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(longstatus history time) POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(longstatus history time)
fi fi
@ -469,17 +597,36 @@ build_right_prompt() {
done done
} }
precmd() { powerlevel9k_init() {
vcs_info setopt LOCAL_OPTIONS
unsetopt XTRACE KSH_ARRAYS
prompt_opts=(cr percent subst)
# initialize colors
autoload -U colors && colors
# initialize VCS
autoload -Uz add-zsh-hook
add-zsh-hook precmd vcs_info
if [[ "$POWERLEVEL9K_PROMPT_ON_NEWLINE" == true ]]; then
PROMPT="╭─%{%f%b%k%}"'$(build_left_prompt)'"
╰─ "
# The right prompt should be on the same line as the first line of the left
# prompt. To do so, there is just a quite ugly workaround: Before zsh draws
# the RPROMPT, we advise it, to go one line up. At the end of RPROMPT, we
# advise it to go one line down. See:
# http://superuser.com/questions/357107/zsh-right-justify-in-ps1
RPROMPT_PREFIX='%{'$'\e[1A''%}' # one line up
RPROMPT_SUFFIX='%{'$'\e[1B''%}' # one line down
else
PROMPT="%{%f%b%k%}"'$(build_left_prompt)'
RPROMPT_PREFIX=''
RPROMPT_SUFFIX=''
fi
RPROMPT=$RPROMPT_PREFIX"%{%f%b%k%}"'$(build_right_prompt)'"%{$reset_color%}"$RPROMPT_SUFFIX
# Add a static hook to examine staged/unstaged changes.
vcs_info_hookadd set-message vcs-detect-changes
} }
if [[ "$POWERLEVEL9K_PROMPT_ON_NEWLINE" == true ]]; then powerlevel9k_init "$@"
PROMPT='╭─%{%f%b%k%}$(build_left_prompt)
╰─ '
else
PROMPT='%{%f%b%k%}$(build_left_prompt) '
fi
RPROMPT='%{%f%b%k%}$(build_right_prompt)%{$reset_color%}'