Added a little "Developers Guide"

This commit is contained in:
Dominik Ritter 2015-06-04 03:58:27 +02:00
parent 77cbe9a6f0
commit 3dc5084e40
2 changed files with 66 additions and 5 deletions

View file

@ -256,3 +256,55 @@ 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).
#### Developers Guide
The theme has grown a lot lately, so I think a little explanation would be
helpful.
##### Basic Knowledge
Our main entry point are the `PROMPT` and `RPROMPT` variables, which are
interpreted by zsh itself. All that this (and any other) theme does is
filling these two variables with control instructions (like defining
colors, etc.) and ready-to-use data. So within this theme we collect a
whole bunch of information to put in that variables. You can find
`PROMPT` and `RPROMPT` at the very end of the `powerlevel9k.zsh-theme`.
This simple diagram may explain the invoking order better:
```
+-----+ +---------+
| Zsh |--->| $PROMPT |
+-----+ +---------+
|
V
+---------------------+ +------------+ +---------------------+
| build_left_prompt() |--->| prompt_*() |->| $1_prompt_segment() |
+---------------------+ +------------+ +---------------------+
```
##### Adding Segments
Feel free to add your own segments. Every segment gets called with an
orientation as first parameter (`left` or `right`), so we can figure
out on which side we should draw the segment. This information is
used at the time we call the actual segment-drawing function:
`$1_prompt_segment`. To make the magic color-overwrite mechanism to
work, we have to pass our function name as first argument. Usually
this is just `$0`. Second parameter is a default background color,
third the default foreground color. And finally we pass our content
to the function. So our function could look somewhat like this:
```zsh
prompt_echo() {
local content='Hello World!'
$1_prompt_segment $0 blue red $content
}
```
At this point we can overwrite our blue-on-red segment by putting
POWERLEVEL9K_ECHO_FOREGROUND="200"
POWERLEVEL9K_ECHO_BACKGROUND="040"
in our `~/.zshrc`. We now have a pink-on-green segment. Yay!

View file

@ -135,8 +135,13 @@ fi
################################################################ ################################################################
# Begin a left prompt segment # Begin a left prompt segment
# Takes two arguments, background and foreground. Both can be omitted, # Takes four arguments:
# rendering default background/foreground. # * $1: Name of the function that was orginally invoked (mandatory).
# Necessary, to make the dynamic color-overwrite mechanism work.
# * $2: Background color
# * $3: Foreground color
# * $4: The segment content
# The latter three can be omitted,
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.
# We get as first Parameter the function name, which called this function. # We get as first Parameter the function name, which called this function.
@ -177,9 +182,13 @@ left_prompt_end() {
} }
# Begin a right prompt segment # Begin a right prompt segment
# Takes two arguments, background and foreground. Both can be omitted, # Takes four arguments:
# rendering default background/foreground. No ending for the right prompt # * $1: Name of the function that was orginally invoked (mandatory).
# segment is needed (unlike the left prompt, above). # Necessary, to make the dynamic color-overwrite mechanism work.
# * $2: Background color
# * $3: Foreground color
# * $4: The segment content
# No ending for the right prompt segment is needed (unlike the left prompt, above).
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