A simple powerline-like shell prompt generator written in C. It strives to be fast (light) and portable.
# edit config.h and main.c if you want
make
make install
PS1='$(pwrln $?)'To generate prompt for specific shell append its name delimited by -
to pwrln executable name e.g. pwrln-bash, pwrln-ksh, ...
# rename pwrln binary
mv pwrln pwrln-ksh
# or create symlink
ln -s pwrln pwrln-kshmake install creates symlinks for all supported shells.
Generating prompt for specific shell boils down to applying proper
escape code delimiters, so that its input line editor (e.g. readline)
takes into account only printable characters when estimating prompt
length.
Shells recognised by pwrln so far:
- bash
- ksh
- zsh
- rc (readline)
before adding entries to your shell config adjust the code to your liking (see Customisation) and install it with:
% make
# make installAdd those lines to .bashrc:
PS1='$(pwrln-bash $?)'
export PS1Notice ' single-quote marks.
Roughly the same case as with bash.
Add those lines to .kshrc or .mkshrc or .profile or whatever:
PS1='$(pwrln-ksh $?)'
export PS1Notice ' single-quote marks.
Add those lines to .zshrc:
precmd()
{
export PROMPT="$(pwrln-zsh $?)"
}Add those lines to .rcrc:
fn prompt {
_status = $status
PWD = `pwd
_prompt = `{pwrln-rc $_status}
prompt = $^_prompt' '
}
Change colours and glyphs (special characters) in config.h.
If your font does not display fancy characters like that powerline arrow you might replace them with any string (e.g. empty string):
static const char glyph_delimiter[] = "";
static const char glyph_subdelimiter[] = ">";In main.c a linked list of elements representing prompt
segments is assembled.
Those segments can be swapped, removed etc.
Creating custom segments is straightforward:
/* font colour -------------+
background colour -----+ |
| | */
tail(prompt_chain)->next = new("my custom segment", 238, 248);
/* tail(first_segment) returns last segment in chain */