You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
5.9 KiB
171 lines
5.9 KiB
8 years ago
|
A Powerline style prompt for your shell
|
||
|
=======================================
|
||
|
|
||
|
A [Powerline](https://github.com/Lokaltog/vim-powerline) like prompt for Bash, ZSH and Fish:
|
||
|
|
||
|
![MacVim+Solarized+Powerline+CtrlP](https://raw.github.com/milkbikis/dotfiles-mac/master/bash-powerline-screenshot.png)
|
||
|
|
||
|
* Shows some important details about the git/svn/hg/fossil branch (see below)
|
||
|
* Changes color if the last command exited with a failure code
|
||
|
* If you're too deep into a directory tree, shortens the displayed path with an ellipsis
|
||
|
* Shows the current Python [virtualenv](http://www.virtualenv.org/) environment
|
||
|
* It's easy to customize and extend. See below for details.
|
||
|
|
||
|
### Version Control
|
||
|
|
||
|
All of the version control systems supported by powerline shell give you a
|
||
|
quick look into the state of your repo:
|
||
|
|
||
|
* The current branch is displayed and changes background color when the
|
||
|
branch is dirty.
|
||
|
* When the local branch differs from the remote, the difference in number
|
||
|
of commits is shown along with `⇡` or `⇣` indicating whether a git push
|
||
|
or pull is pending
|
||
|
|
||
|
In addition, git has a few extra symbols:
|
||
|
|
||
|
* `✎` -- a file has been modified, but not staged for commit
|
||
|
* `✔` -- a file is staged for commit
|
||
|
* `✼` -- a file has conflicts
|
||
|
|
||
|
FIXME
|
||
|
* A `+` appears when untracked files are present (except for git, which
|
||
|
uses `?` instead)
|
||
|
|
||
|
Each of these will have a number next to it if more than one file matches.
|
||
|
|
||
|
# Setup
|
||
|
|
||
|
This script uses ANSI color codes to display colors in a terminal. These are
|
||
|
notoriously non-portable, so may not work for you out of the box, but try
|
||
|
setting your $TERM to `xterm-256color`, because that works for me.
|
||
|
|
||
|
* Patch the font you use for your terminal: see https://github.com/Lokaltog/powerline-fonts
|
||
|
|
||
|
* If you struggle too much to get working fonts in your terminal, you can use "compatible" mode.
|
||
|
* If you're using old patched fonts, you have to use the older symbols. Basically reverse [this commit](https://github.com/milkbikis/powerline-shell/commit/2a84ecc) in your copy
|
||
|
|
||
|
* Clone this repository somewhere:
|
||
|
|
||
|
git clone https://github.com/milkbikis/powerline-shell
|
||
|
|
||
|
* Copy `config.py.dist` to `config.py` and edit it to configure the segments you want. Then run
|
||
|
|
||
|
./install.py
|
||
|
|
||
|
* This will generate `powerline-shell.py`
|
||
|
|
||
|
* (optional) Create a symlink to this python script in your home:
|
||
|
|
||
|
ln -s <path/to/powerline-shell.py> ~/powerline-shell.py
|
||
|
|
||
|
* If you don't want the symlink, just modify the path in the commands below
|
||
|
|
||
|
* For python2.6 you have to install argparse
|
||
|
|
||
|
pip install argparse
|
||
|
|
||
|
### All Shells:
|
||
|
There are a few optional arguments which can be seen by running `powerline-shell.py --help`.
|
||
|
|
||
|
```
|
||
|
--cwd-mode {fancy,plain,dironly}
|
||
|
How to display the current directory
|
||
|
--cwd-max-depth CWD_MAX_DEPTH
|
||
|
Maximum number of directories to show in path
|
||
|
--cwd-max-dir-size CWD_MAX_DIR_SIZE
|
||
|
Maximum number of letters displayed for each directory
|
||
|
in the path
|
||
|
--colorize-hostname Colorize the hostname based on a hash of itself.
|
||
|
--mode {patched,compatible,flat}
|
||
|
The characters used to make separators between
|
||
|
segments
|
||
|
```
|
||
|
|
||
|
### Bash:
|
||
|
Add the following to your `.bashrc` (or `.profile` on Mac):
|
||
|
|
||
|
```
|
||
|
function _update_ps1() {
|
||
|
PS1="$(~/powerline-shell.py $? 2> /dev/null)"
|
||
|
}
|
||
|
|
||
|
if [ "$TERM" != "linux" ]; then
|
||
|
PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND"
|
||
|
fi
|
||
|
```
|
||
|
|
||
|
### ZSH:
|
||
|
Add the following to your `.zshrc`:
|
||
|
|
||
|
```
|
||
|
function powerline_precmd() {
|
||
|
PS1="$(~/powerline-shell.py $? --shell zsh 2> /dev/null)"
|
||
|
}
|
||
|
|
||
|
function install_powerline_precmd() {
|
||
|
for s in "${precmd_functions[@]}"; do
|
||
|
if [ "$s" = "powerline_precmd" ]; then
|
||
|
return
|
||
|
fi
|
||
|
done
|
||
|
precmd_functions+=(powerline_precmd)
|
||
|
}
|
||
|
|
||
|
if [ "$TERM" != "linux" ]; then
|
||
|
install_powerline_precmd
|
||
|
fi
|
||
|
```
|
||
|
|
||
|
### Fish:
|
||
|
Redefine `fish_prompt` in ~/.config/fish/config.fish:
|
||
|
|
||
|
```
|
||
|
function fish_prompt
|
||
|
~/powerline-shell.py $status --shell bare ^/dev/null
|
||
|
end
|
||
|
```
|
||
|
|
||
|
# Customization
|
||
|
|
||
|
### Adding, Removing and Re-arranging segments
|
||
|
|
||
|
The `config.py` file defines which segments are drawn and in which order. Simply
|
||
|
comment out and rearrange segment names to get your desired arrangement. Every
|
||
|
time you change `config.py`, run `install.py`, which will generate a new
|
||
|
`powerline-shell.py` customized to your configuration. You should see the new
|
||
|
prompt immediately.
|
||
|
|
||
|
### Contributing new types of segments
|
||
|
|
||
|
The `segments` directory contains python scripts which are injected as is into
|
||
|
a single file `powerline_shell_base.py`. Each segment script defines a function
|
||
|
that inserts one or more segments into the prompt. If you want to add a new
|
||
|
segment, simply create a new file in the segments directory and add its name to
|
||
|
the `config.py` file at the appropriate location.
|
||
|
|
||
|
Make sure that your script does not introduce new globals which might conflict
|
||
|
with other scripts. Your script should fail silently and run quickly in any
|
||
|
scenario.
|
||
|
|
||
|
Make sure you introduce new default colors in `themes/default.py` for every new
|
||
|
segment you create. Test your segment with this theme first.
|
||
|
|
||
|
You should add tests for your segment as best you are able. Unit and
|
||
|
integration tests are both welcome. Run your tests with the `nosetests` command
|
||
|
after install the requirements in `dev_requirements.txt`.
|
||
|
|
||
|
### Themes
|
||
|
|
||
|
The `themes` directory stores themes for your prompt, which are basically color
|
||
|
values used by segments. The `default.py` defines a default theme which can be
|
||
|
used standalone, and every other theme falls back to it if they miss colors for
|
||
|
any segments. Create new themes by copying any other existing theme and
|
||
|
changing the values. To use a theme, set the `THEME` variable in `config.py` to
|
||
|
the name of your theme.
|
||
|
|
||
|
A script for testing color combinations is provided at `themes/colortest.py`.
|
||
|
Note that the colors you see may vary depending on your terminal. When designing
|
||
|
a theme, please test your theme on multiple terminals, especially with default
|
||
|
settings.
|