Skip to content
This repository has been archived by the owner on Apr 24, 2020. It is now read-only.

Developer's Guide

Ben Hilburn edited this page Jul 13, 2015 · 8 revisions

Developers' Guide

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:

    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!

Clone this wiki locally