Skip to content
Malcolm Ramsay edited this page Jul 10, 2018 · 37 revisions

Customizations

Use different prompt symbol for non-zero exit codes

By default, pure only changes the color of the prompt symbol. You can change this behavior by modifying PROMPT after pure has been initialized in your .zshrc.

.zshrc:

prompt pure
PROMPT='%(?.%F{magenta}△.%F{red}▲)%f '

The above change would show a magenta character by default, and a red when there is a non-zero exit status. This works because pure initialised PROMPT only once, so you are free to modify it afterwards.

Show exit code of last command as a separate prompt character

The prompt character still turns red if the last command didn't exit with 0, but adds another magenta to show that it was the previous command that failed.

Replace: PROMPT='%(?.%F{magenta}.%F{red})❯%f '

With: PROMPT='%(?.%F{magenta}.%F{red}❯%F{magenta})❯%f '

Show current mode when using vi keybindings

Prompt screenshot

Add in prompt_pure_setup()

zstyle ':prezto:module:editor:info:keymap:primary'   format "❯%f"
zstyle ':prezto:module:editor:info:keymap:alternate' format "❮%f"

and change the PROMPT line to

PROMPT='%(?.%F{magenta}.%F{red})${editor_info[keymap]} '

It works using prezto, still looking for a generic solution

A generic way of showing current mode in vi mode

Following this guide I got the mode prompt without Prezto.

prompt_pure_update_vim_prompt() {
    zle || {
        print "error: pure_update_vim_prompt must be called when zle is active"
        return 1
    }
    PURE_PROMPT_SYMBOL=${${KEYMAP/vicmd/❮}/(main|viins)/❯}
    zle .reset-prompt
}

function zle-line-init zle-keymap-select { 
    prompt_pure_update_vim_prompt
}
zle -N zle-line-init
zle -N zle-keymap-select

Put all of this code to your .zshrc or, if you do not wish to replace your zle-line-init and zle-keymap-select functions, you can choose to call prompt_pure_update_vim_prompt from them.

Safer symbols

Pure's default symbols are cool, but if you use a limited font such as Inconsolata (because hey, it does look good), you'll need to change them. These worked for me on Windows:

PURE_PROMPT_SYMBOL='»'
PURE_GIT_DOWN_ARROW=''
PURE_GIT_UP_ARROW=''

Show system time in prompt

To show the current system time before the prompt symbol like

Screenshot

Initialize pure with:

prompt pure
PROMPT='%F{white}%* '$PROMPT

Alternatively you can set RPROMPT='%F{white}%*' beforehand.

Create aliases for really long directory paths

Let's face it, a really long directory path hurts readability and can easily be aliased to something much more meaningful. Pure provides no such functionality, however, Zsh does!

By enabling the Zsh option for named directories (setopt AUTO_NAME_DIRS) we can alias directories by assigning them to a variable.

An example .zshrc with one aliased directory (SUPERSECRET):

setopt AUTO_NAME_DIRS
SUPERSECRET=$HOME/a/really/long/path/to/my/SecretProject

prompt pure

And here's the result:

~cd $SUPERSECRET

~SUPERSECRETpwd
/Users/myuser/a/really/long/path/to/my/SecretProject

As a bonus, you can enable cdable variables (setopt CDABLE_VARS). This allows us to omit the $ when cding into the directory. We can now simply cd SUPERSECRET.

Single line prompt

To display Pure as a single line prompt, add this to your .zshrc:

prompt pure
prompt_newline='%666v'
PROMPT=" $PROMPT"

Single line preview

See #228.

Prefix prompt when logged in as root

Add the following to the root users .zshrc:

# For completeness, start by closing the original %F{magenta} with %f.
# The final %f will be added by the PROMPT definition.
PURE_PROMPT_SYMBOL='%f%F{red}#%f %F{magenta}❯'

Root prompt prefix

Originally suggested in #378.

Show number of jobs in prompt

PROMPT='%(1j.[%j] .)%(?.%F{magenta}.%F{red})${PURE_PROMPT_SYMBOL:-❯}%f '

We're simply adding %(1j.[%j] .)% to the regular pure prompt.

This works because %(x.true.false) is a test (just like we're doing with the prompt color %(?.true.false). %j is something that expands to the number of jobs and and %(j.t.f) tests the number of jobs. With 1j we are saying that if the number of jobs >= 1, the test is truthy which will produce the truthy value ([%j] ), otherwise an empty string.

Number of jobs in prompt

Disable Pure terminal title updates

Pure sets the title in an attempt to provide useful information to the user. However, this might not work for all users. Fortunately, the shell is dynamic, and you can override any function.

# First, load Pure.
prompt pure
# Then, replace the set title function with an empty one.
prompt_pure_set_title() {}

See: https://github.com/sindresorhus/pure/pull/383.

Inspired

@sapegin’s Bash Prompt

Prompt screenshot

Bash prompt and color theme for Terminal.app.

@brandonweiss’s Fish Prompt

Screenshot of Pure.fish

Pure.fish is a Pure-inspired prompt for fish shell.

@therealklanni's Purity fork

Screenshot of Pure.fish

Purity is my own spin on Pure. It favors a more compact current working directory, important details on the main prompt line, and extra Git indicators (modified, staged, deleted, renamed, unmerged, and untracked items) in addition to the unique features of Pure (namely: the "pull ready" indicator and execution time feedback).

@rafaelrinaldi's Fish Prompt

pure is a direct port of the original pure theme to fish shell.

It's fast and implements all the features available on the original version, including symbols, colors and indicators (Git repository info, previous command execution time with threshold, and so on).

Although the screenshot shows a light Terminal theme, it also works well with dark themes.

Free to open an issue to help me improve the theme.

Clone this wiki locally