mirror of
https://github.com/romkatv/powerlevel10k.git
synced 2025-12-25 22:22:31 +01:00
Change from Mkdocs to slates
This commit is contained in:
parent
e2c8058de6
commit
35bae85c29
78 changed files with 19112 additions and 398 deletions
BIN
docs/source/fonts/MesloLGS NF Regular.ttf
Normal file
BIN
docs/source/fonts/MesloLGS NF Regular.ttf
Normal file
Binary file not shown.
BIN
docs/source/fonts/MesloLGS-NF-Regular.woff
Normal file
BIN
docs/source/fonts/MesloLGS-NF-Regular.woff
Normal file
Binary file not shown.
BIN
docs/source/fonts/slate.eot
Normal file
BIN
docs/source/fonts/slate.eot
Normal file
Binary file not shown.
14
docs/source/fonts/slate.svg
Normal file
14
docs/source/fonts/slate.svg
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Generated by IcoMoon</metadata>
|
||||
<defs>
|
||||
<font id="slate" horiz-adv-x="1024">
|
||||
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
||||
<missing-glyph horiz-adv-x="1024" />
|
||||
<glyph unicode=" " d="" horiz-adv-x="512" />
|
||||
<glyph unicode="" d="M438.857 877.714q119.429 0 220.286-58.857t159.714-159.714 58.857-220.286-58.857-220.286-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857zM512 165.143v108.571q0 8-5.143 13.429t-12.571 5.429h-109.714q-7.429 0-13.143-5.714t-5.714-13.143v-108.571q0-7.429 5.714-13.143t13.143-5.714h109.714q7.429 0 12.571 5.429t5.143 13.429zM510.857 361.714l10.286 354.857q0 6.857-5.714 10.286-5.714 4.571-13.714 4.571h-125.714q-8 0-13.714-4.571-5.714-3.429-5.714-10.286l9.714-354.857q0-5.714 5.714-10t13.714-4.286h105.714q8 0 13.429 4.286t6 10z" />
|
||||
<glyph unicode="" d="M585.143 164.571v91.429q0 8-5.143 13.143t-13.143 5.143h-54.857v292.571q0 8-5.143 13.143t-13.143 5.143h-182.857q-8 0-13.143-5.143t-5.143-13.143v-91.429q0-8 5.143-13.143t13.143-5.143h54.857v-182.857h-54.857q-8 0-13.143-5.143t-5.143-13.143v-91.429q0-8 5.143-13.143t13.143-5.143h256q8 0 13.143 5.143t5.143 13.143zM512 676.571v91.429q0 8-5.143 13.143t-13.143 5.143h-109.714q-8 0-13.143-5.143t-5.143-13.143v-91.429q0-8 5.143-13.143t13.143-5.143h109.714q8 0 13.143 5.143t5.143 13.143zM877.714 438.857q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
|
||||
<glyph unicode="" d="M733.714 531.428q0 16-10.286 26.286l-52 51.429q-10.857 10.857-25.714 10.857t-25.714-10.857l-233.143-232.571-129.143 129.143q-10.857 10.857-25.714 10.857t-25.714-10.857l-52-51.429q-10.286-10.286-10.286-26.286 0-15.429 10.286-25.714l206.857-206.857q10.857-10.857 25.714-10.857 15.429 0 26.286 10.857l310.286 310.286q10.286 10.286 10.286 25.714zM877.714 438.857q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
|
||||
<glyph unicode="" d="M658.286 475.428q0 105.714-75.143 180.857t-180.857 75.143-180.857-75.143-75.143-180.857 75.143-180.857 180.857-75.143 180.857 75.143 75.143 180.857zM950.857 0q0-29.714-21.714-51.429t-51.429-21.714q-30.857 0-51.429 21.714l-196 195.429q-102.286-70.857-228-70.857-81.714 0-156.286 31.714t-128.571 85.714-85.714 128.571-31.714 156.286 31.714 156.286 85.714 128.571 128.571 85.714 156.286 31.714 156.286-31.714 128.571-85.714 85.714-128.571 31.714-156.286q0-125.714-70.857-228l196-196q21.143-21.143 21.143-51.429z" horiz-adv-x="951" />
|
||||
</font></defs></svg>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
BIN
docs/source/fonts/slate.ttf
Normal file
BIN
docs/source/fonts/slate.ttf
Normal file
Binary file not shown.
BIN
docs/source/fonts/slate.woff
Normal file
BIN
docs/source/fonts/slate.woff
Normal file
Binary file not shown.
BIN
docs/source/fonts/slate.woff2
Normal file
BIN
docs/source/fonts/slate.woff2
Normal file
Binary file not shown.
BIN
docs/source/images/logo.png
Normal file
BIN
docs/source/images/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.4 KiB |
BIN
docs/source/images/navbar.png
Normal file
BIN
docs/source/images/navbar.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 96 B |
39
docs/source/includes/configuration.md
Normal file
39
docs/source/includes/configuration.md
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
# Configuration
|
||||
|
||||
## For new users
|
||||
|
||||
On the first run, Powerlevel10k [configuration wizard](#configuration-wizard) will ask you a few
|
||||
questions and configure your prompt. If it doesn't trigger automatically, type `p10k configure`.
|
||||
Configuration wizard creates `~/.p10k.zsh` based on your preferences. Additional prompt
|
||||
customization can be done by editing this file. It has plenty of comments to help you navigate
|
||||
through configuration options.
|
||||
|
||||
_FAQ_:
|
||||
|
||||
- [What is the best prompt style in the configuration wizard?](#what-is-the-best-prompt-style-in-the-configuration-wizard)
|
||||
- [What do different symbols in Git status mean?](#what-do-different-symbols-in-git-status-mean)
|
||||
- [How do I change the format of Git status?](#how-do-i-change-the-format-of-git-status)
|
||||
- [How do I add username and/or hostname to prompt?](#how-do-i-add-username-and-or-hostname-to-prompt)
|
||||
- [How do I change prompt colors?](#how-do-i-change-prompt-colors)
|
||||
- [Why some prompt segments appear and disappear as I'm typing?](#why-some-prompt-segments-appear-and-disappear-as-im-typing)
|
||||
|
||||
_Troubleshooting_:
|
||||
|
||||
- [Question mark in prompt](#question-mark-in-prompt).
|
||||
- [Icons, glyphs or powerline symbols don't render](#icons-glyphs-or-powerline-symbols-don-39-t-render).
|
||||
- [Sub-pixel imperfections around powerline symbols](#sub-pixel-imperfections-around-powerline-symbols).
|
||||
- [Directory is difficult to see in prompt when using Rainbow style](#directory-is-difficult-to-see-in-prompt-when-using-rainbow-style).
|
||||
|
||||
## For Powerlevel9k users
|
||||
|
||||
If you've been using Powerlevel9k before, **do not remove the configuration options**. Powerlevel10k
|
||||
will pick them up and provide you with the same prompt UI you are used to. See
|
||||
[Powerlevel9k compatibility](#powerlevel9k-compatibility).
|
||||
|
||||
_FAQ_:
|
||||
|
||||
- [I'm using Powerlevel9k with Oh My Zsh. How do I migrate?](#i-39-m-using-powerlevel9k-with-oh-my-zsh-how-do-i-migrate)
|
||||
- [What is the relationship between Powerlevel9k and Powerlevel10k?](#what-is-the-relationship-between-powerlevel9k-and-powerlevel10k)
|
||||
- [Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config?](#does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config)
|
||||
|
||||
_Troubleshooting_: [Extra or missing spaces in prompt compared to Powerlevel9k](#extra-or-missing-spaces-in-prompt-compared-to-powerlevel9k).
|
||||
618
docs/source/includes/faq.md
Normal file
618
docs/source/includes/faq.md
Normal file
|
|
@ -0,0 +1,618 @@
|
|||
# FAQ
|
||||
|
||||
## How do I update Powerlevel10k?
|
||||
|
||||
The command to update Powerlevel10k depends on how it was installed.
|
||||
|
||||
| Installation | Update command |
|
||||
| ---------------------------------------- | ------------------------------------------------------------------------- |
|
||||
| [Manual](#manual) | `git -C ~/powerlevel10k pull` |
|
||||
| [Oh My Zsh](#oh-my-zsh) | `git -C ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k pull` |
|
||||
| [Prezto](#prezto) | `zprezto-update` |
|
||||
| [Zim](#zim) | `zimfw update` |
|
||||
| [Antigen](#antigen) | `antigen update` |
|
||||
| [Zplug](#zplug) | `zplug update` |
|
||||
| [Zgen](#zgen) | `zgen update` |
|
||||
| [Zplugin](#zplugin) | `zplugin update` |
|
||||
| [Zinit](#zinit) | `zinit update` |
|
||||
| [Homebrew](#homebrew) | `brew update && brew upgrade` |
|
||||
| [Arch Linux](#arch-linux) | `yay -S --noconfirm zsh-theme-powerlevel10k-git` |
|
||||
|
||||
**IMPORTANT**: Restart Zsh after updating Powerlevel10k. [Do not use `source ~/.zshrc`](#weird-things-happen-after-typing-source-zshrc).
|
||||
|
||||
## How do I uninstall Powerlevel10k?
|
||||
|
||||
Remove all references to "p10k" from `~/.zshrc`. You might have this snippet at the top:
|
||||
|
||||
```zsh
|
||||
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
|
||||
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
|
||||
fi
|
||||
```
|
||||
|
||||
And this at the bottom:
|
||||
|
||||
```zsh
|
||||
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
|
||||
```
|
||||
|
||||
These are added by the [configuration wizard](#configuration-wizard). Remove them.
|
||||
|
||||
Remove all references to "powerlevel10k" from `~/.zshrc`, `~/.zpreztorc` and `~/.zimrc` (some
|
||||
of these files may be missing -- this is normal). These references have been added manually by
|
||||
yourself when installing Powerlevel10k. Refer to the [installation instructions]()
|
||||
if you need a reminder.
|
||||
Verify that all references to "p10k" and "powerlevel10k" are gone from `~/.zshrc`, `~/.zpreztorc`
|
||||
and `~/.zimrc`.
|
||||
|
||||
```zsh
|
||||
grep -E 'p10k|powerlevel10k' ~/.zshrc ~/.zpreztorc ~/.zimrc 2>/dev/null
|
||||
```
|
||||
|
||||
If this command produces output, there are still references to "p10k" or "powerlevel10k". You
|
||||
need to remove them.
|
||||
|
||||
Delete Powerlevel10k configuration file. This file is created by the
|
||||
[configuration wizard](#configuration-wizard) and may contain manual edits by yourself.
|
||||
|
||||
```zsh
|
||||
rm -f ~/.p10k.zsh
|
||||
```
|
||||
|
||||
Delete Powerlevel10k source files. These files have been downloaded when you've installed
|
||||
Powerlevel10k. The command to delete them depends on which installation method you'd chosen.
|
||||
Refer to the [installation instructions]() if you need a reminder.
|
||||
|
||||
| Installation | Uninstall command |
|
||||
| ---------------------------------------- | ----------------------------------------------------------------------- |
|
||||
| [Manual](#manual) | `rm -rf ~/powerlevel10k` |
|
||||
| [Oh My Zsh](#oh-my-zsh) | `rm -rf -- ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k` |
|
||||
| [Prezto](#prezto) | n/a |
|
||||
| [Zim](#zim) | `zimfw uninstall` |
|
||||
| [Antigen](#antigen) | `antigen purge romkatv/powerlevel10k` |
|
||||
| [Zplug](#zplug) | `zplug clean` |
|
||||
| [Zgen](#zgen) | `zgen reset` |
|
||||
| [Zplugin](#zplugin) | `zplugin delete romkatv/powerlevel10k` |
|
||||
| [Zinit](#zinit) | `zinit delete romkatv/powerlevel10k` |
|
||||
| [Homebrew](#homebrew) | `brew uninstall powerlevel10k; brew untap romkatv/powerlevel10k` |
|
||||
| [Arch Linux](#arch-linux) | `yay -R --noconfirm zsh-theme-powerlevel10k-git` |
|
||||
|
||||
Restart Zsh. [Do not use `source ~/.zshrc`](#weird-things-happen-after-typing-source-zshrc).
|
||||
|
||||
## How do I install Powerlevel10k on a machine without Internet access?
|
||||
|
||||
Run this command on the machine without Internet access:
|
||||
|
||||
```sh
|
||||
uname -sm | tr '[A-Z]' '[a-z]'
|
||||
```
|
||||
|
||||
Run these commands on a machine connected to the Internet after replacing the value of `target_uname` with the output of the previous command:
|
||||
|
||||
```sh
|
||||
target_uname="replace this with the output of the previous command"
|
||||
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
|
||||
GITSTATUS_CACHE_DIR="$HOME"/powerlevel10k/gitstatus/usrbin ~/powerlevel10k/gitstatus/install -f -s "${target_uname% *}" -m "${target_uname#* }"
|
||||
```
|
||||
|
||||
Copy `~/powerlevel10k` from the machine connected to the Internet to the one without Internet access.
|
||||
Add `source ~/powerlevel10k/powerlevel10k.zsh-theme` to `~/.zshrc` on the machine without Internet access:
|
||||
|
||||
```zsh
|
||||
echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc
|
||||
```
|
||||
|
||||
If `~/.zshrc` on the machine without Internet access sets `ZSH_THEME`, remove that line.
|
||||
|
||||
```zsh
|
||||
sed -i.bak '/^ZSH_THEME=/d' ~/.zshrc
|
||||
```
|
||||
|
||||
To update, remove `~/powerlevel10k` on both machines and repeat steps 1-3.
|
||||
|
||||
## Where can I ask for help and report bugs?
|
||||
|
||||
The best way to ask for help and to report bugs is to [open an issue](https://github.com/romkatv/powerlevel10k/issues).
|
||||
|
||||
[Gitter](https://gitter.im/powerlevel10k/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
||||
is another option.
|
||||
|
||||
If all else fails, email roman.perepelitsa@gmail.com.
|
||||
|
||||
If necessary, encrypt your communication with [this PGP key](https://api.github.com/users/romkatv/gpg_keys).
|
||||
|
||||
## Which aspects of shell and terminal does Powerlevel10k affect?
|
||||
|
||||
Powerlevel10k defines prompt and nothing else. It sets [prompt-related options](http://zsh.sourceforge.net/Doc/Release/Options.html#Prompting), and parameters `PS1` and `RPS1`.
|
||||
|
||||

|
||||
|
||||
Everything within the highlighted areas on the screenshot is produced by Powerlevel10k.
|
||||
Powerlevel10k has no control over the terminal content or colors outside these areas.
|
||||
|
||||
Powerlevel10k does not affect:
|
||||
|
||||
- Terminal window/tab title.
|
||||
- Colors used by `ls`.
|
||||
- The behavior of `git` command.
|
||||
- The content and style of <kbd>Tab</kbd> completions.
|
||||
- Command line colors (syntax highlighting, autosuggestions, etc.).
|
||||
- Key bindings.
|
||||
- Aliases.
|
||||
- Prompt parameters other than `PS1` and `RPS1`.
|
||||
- Zsh options other than those [related to prompt](http://zsh.sourceforge.net/Doc/Release/Options.html#Prompting).
|
||||
|
||||
## I'm using Powerlevel9k with Oh My Zsh. How do I migrate?
|
||||
|
||||
1. Run this command:
|
||||
|
||||
```zsh
|
||||
# Add powerlevel10k to the list of Oh My Zsh themes.
|
||||
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k
|
||||
# Replace ZSH_THEME="powerlevel9k/powerlevel9k" with ZSH_THEME="powerlevel10k/powerlevel10k".
|
||||
sed -i.bak 's/powerlevel9k/powerlevel10k/g' ~/.zshrc
|
||||
# Restart Zsh.
|
||||
exec zsh
|
||||
```
|
||||
|
||||
2. _Optional but highly recommended:_
|
||||
1. Install [the recommended font](#recommended-font-meslo-nerd-font-patched-for-powerlevel10k).
|
||||
1. Type `p10k configure` and choose your favorite prompt style.
|
||||
|
||||
_Related:_
|
||||
|
||||
- [Powerlevel9k compatibility.](features/p9k_compatibility.md)
|
||||
- [Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config?](#does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config)
|
||||
- [Extra or missing spaces in prompt compared to Powerlevel9k.](#extra-or-missing-spaces-in-prompt-compared-to-powerlevel9k)
|
||||
- [Configuration wizard.](#configuration-wizard)
|
||||
|
||||
## Is it really fast?
|
||||
|
||||
Yes.
|
||||
|
||||
<script id="asciicast-249531" src="https://asciinema.org/a/249531.js" async></script>
|
||||
|
||||
Benchmark results obtained with
|
||||
[zsh-prompt-benchmark](https://github.com/romkatv/zsh-prompt-benchmark) on an Intel i9-7900X
|
||||
running Ubuntu 18.04 with the config from the demo.
|
||||
|
||||
| Theme | Prompt Latency |
|
||||
| ------------------- | -------------: |
|
||||
| powerlevel9k/master | 1046 ms |
|
||||
| powerlevel9k/next | 1005 ms |
|
||||
| **powerlevel10k** | **8.7 ms** |
|
||||
|
||||
Powerlevel10k is over 100 times faster than Powerlevel9k in this benchmark.
|
||||
|
||||
In fairness, Powerlevel9k has acceptable latency when given a spartan configuration. If all you need
|
||||
is the current directory without truncation or shortening, Powerlevel9k can render it for you in
|
||||
17 ms. Powerlevel10k can do the same 30 times faster but it won't matter in practice because 17 ms
|
||||
is fast enough (the threshold where latency becomes noticeable is around 50 ms). You have to be
|
||||
careful with Powerlevel9k configuration as it's all too easy to make prompt frustratingly slow.
|
||||
Powerlevel10k, on the other hand, doesn't require trading latency for utility -- it's virtually
|
||||
instant with any configuration. It stays well below the 50 ms mark, leaving most of the latency
|
||||
budget for other plugins you might install.
|
||||
|
||||
## How do I enable instant prompt?
|
||||
|
||||
See [instant prompt](features/instant_prompt.md) to learn about instant prompt. This section explains how you
|
||||
can enable it and lists caveats that you should be aware of.
|
||||
|
||||
```zsh
|
||||
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
|
||||
# Initialization code that may require console input (password prompts, [y/n]
|
||||
# confirmations, etc.) must go above this block; everything else may go below.
|
||||
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
|
||||
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
|
||||
fi
|
||||
```
|
||||
|
||||
Instant prompt can be enabled either through `p10k configure` or by manually adding the following
|
||||
code snippet at the top of `~/.zshrc` 👉:
|
||||
|
||||
It's important that you copy the lines verbatim. Don't replace `source` with something else, don't
|
||||
call `zcompile`, don't redirect output, etc.
|
||||
|
||||
When instant prompt is enabled, for the duration of Zsh initialization standard input is redirected
|
||||
to `/dev/null` and standard output with standard error are redirected to a temporary file. Once Zsh
|
||||
is fully initialized, standard file descriptors are restored and the content of the temporary file
|
||||
is printed out.
|
||||
|
||||
When using instant prompt, you should carefully check any output that appears on Zsh startup as it
|
||||
may indicate that initialization has been altered, or perhaps even broken, by instant prompt.
|
||||
Initialization code that may require console input, such as asking for a keyring password or for a
|
||||
_[y/n]_ confirmation, must be moved above the instant prompt preamble in `~/.zshrc`. Initialization
|
||||
code that merely prints to console but never reads from it will work correctly with instant prompt,
|
||||
although output that normally has colors may appear uncolored. You can either leave it be, suppress
|
||||
the output, or move it above the instant prompt preamble.
|
||||
|
||||
```zsh
|
||||
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
|
||||
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
|
||||
fi
|
||||
|
||||
keychain id_rsa --agents ssh # asks for password
|
||||
chatty-script # spams to stdout even when everything is fine
|
||||
# ...
|
||||
```
|
||||
|
||||
Here's an example of `~/.zshrc` that breaks when instant prompt is enabled 👉:
|
||||
|
||||
Fixed version:
|
||||
|
||||
```zsh
|
||||
keychain id_rsa --agents ssh # moved before instant prompt
|
||||
|
||||
# OK to perform console I/O before this point.
|
||||
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
|
||||
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
|
||||
fi
|
||||
# From this point on, until zsh is fully initialized, console input won't work and
|
||||
# console output may appear uncolored.
|
||||
|
||||
chatty-script >/dev/null # spam output suppressed
|
||||
# ...
|
||||
```
|
||||
|
||||
If `POWERLEVEL9K_INSTANT_PROMPT` is unset or set to `verbose`, Powerlevel10k will print a warning
|
||||
when it detects console output during initialization to bring attention to potential issues. You can
|
||||
silence this warning (without suppressing console output) with `POWERLEVEL9K_INSTANT_PROMPT=quiet`.
|
||||
This is recommended if some initialization code in `~/.zshrc` prints to console and it's infeasible
|
||||
to move it above the instant prompt preamble or to suppress its output. You can completely disable
|
||||
instant prompt with `POWERLEVEL9K_INSTANT_PROMPT=off`. Do this if instant prompt breaks Zsh
|
||||
initialization and you don't know how to fix it.
|
||||
|
||||
_Note_: Instant prompt requires Zsh >= 5.4. It's OK to enable it even when using an older version of
|
||||
Zsh but it won't do anything.
|
||||
|
||||
## What do different symbols in Git status mean?
|
||||
|
||||
When using Lean, Classic or Rainbow style, Git status may look like this 👉:
|
||||
|
||||
```text
|
||||
feature:master ⇣42⇡42 ⇠42⇢42 *42 merge ~42 +42 !42 ?42
|
||||
```
|
||||
|
||||
| Symbol | Meaning | Source |
|
||||
| --------- | -------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
|
||||
| `feature` | current branch; replaced with `#tag` or `@commit` if not on a branch | `git status --ignore-submodules=dirty` |
|
||||
| `master` | remote tracking branch; only shown if different from local branch | `git rev-parse --abbrev-ref --symbolic-full-name @{u}` |
|
||||
| `⇣42` | this many commits behind the remote | `git status --ignore-submodules=dirty` |
|
||||
| `⇡42` | this many commits ahead of the remote | `git status --ignore-submodules=dirty` |
|
||||
| `⇠42` | this many commits behind the push remote | `git rev-list --left-right --count HEAD...@{push}` |
|
||||
| `⇢42` | this many commits ahead of the push remote | `git rev-list --left-right --count HEAD...@{push}` |
|
||||
| `*42` | this many stashes | `git stash list` |
|
||||
| `merge` | repository state | `git status --ignore-submodules=dirty` |
|
||||
| `~42` | this many merge conflicts | `git status --ignore-submodules=dirty` |
|
||||
| `+42` | this many staged changes | `git status --ignore-submodules=dirty` |
|
||||
| `!42` | this many unstaged changes | `git status --ignore-submodules=dirty` |
|
||||
| `?42` | this many untracked files | `git status --ignore-submodules=dirty` |
|
||||
| `─` | the number of staged, unstaged or untracked files is unknown | `echo $POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY` or `git config --get bash.showDirtyState` |
|
||||
|
||||
_Related_: [How do I change the format of Git status?](#how-do-i-change-the-format-of-git-status)
|
||||
|
||||
## How do I change the format of Git status?
|
||||
|
||||
To change the format of Git status, open `~/.p10k.zsh`, search for `my_git_formatter` and edit its
|
||||
source code.
|
||||
|
||||
_Related_: [What do different symbols in Git status mean?](#what-do-different-symbols-in-git-status-mean)
|
||||
|
||||
## Why is Git status from `$HOME/.git` not displayed in prompt?
|
||||
|
||||
```zsh
|
||||
# Don't show Git status in prompt for repositories whose workdir matches this pattern.
|
||||
# For example, if set to '~', the Git repository at $HOME/.git will be ignored.
|
||||
# Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'.
|
||||
typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~'
|
||||
```
|
||||
|
||||
When using Lean, Classic or Rainbow style, `~/.p10k.zsh` contains the following parameter 👉:
|
||||
|
||||
To see Git status for `$HOME/.git` in prompt, open `~/.p10k.zsh` and remove
|
||||
`POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN`.
|
||||
|
||||
## Why does Git status sometimes appear grey and then gets colored after a short period of time?
|
||||
|
||||
tl;dr: When Git status in prompt is greyed out, it means Powerlevel10k is currently computing
|
||||
up-to-date Git status in the background. Prompt will get automatically refreshed when this
|
||||
computation completes.
|
||||
|
||||
When your current directory is within a Git repository, Powerlevel10k computes up-to-date Git
|
||||
status after every command. If the repository is large, or the machine is slow, this computation
|
||||
can take quite a bit of time. If it takes longer than 20 milliseconds (configurable via
|
||||
`POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS`), Powerlevel10k displays the last known Git status in
|
||||
grey and continues to compute up-to-date Git status in the background. When the computation
|
||||
completes, Powerlevel10k refreshes prompt with new information, this time with colored Git status.
|
||||
|
||||
## How do I add username and/or hostname to prompt?
|
||||
|
||||
When using Lean, Classic or Rainbow style, prompt shows `username@hostname` when you are logged in
|
||||
as root or via SSH. There is little value in showing `username` or `hostname` when you are logged in
|
||||
to your local machine as a normal user. So the absence of `username@hostname` in your prompt is an
|
||||
indication that you are working locally and that you aren't root. You can change it, however.
|
||||
|
||||
```zsh
|
||||
typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
|
||||
...
|
||||
context # user@hostname
|
||||
...
|
||||
)
|
||||
```
|
||||
|
||||
Open `~/.p10k.zsh`. Close to the top you can see the most important parameters that define which
|
||||
segments are shown in your prompt. All generally useful prompt segments are listed in there. Some of
|
||||
them are enabled, others are commented out. One of them is of interest to you.
|
||||
|
||||
```zsh
|
||||
# Don't show context unless running with privileges or in SSH.
|
||||
# Tip: Remove the next line to always show context.
|
||||
typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION=
|
||||
```
|
||||
|
||||
Search for `context` to find the section in the config that lists parameters specific to this prompt
|
||||
segment. You should see the following lines 👉:
|
||||
|
||||
If you follow the tip and remove (or comment out) the last line, you'll always see
|
||||
`username@hostname` in prompt. You can change the format to just `username`, or change the color, by
|
||||
adjusting the values of parameters nearby. There are plenty of comments to help you navigate.
|
||||
|
||||
You can also move `context` to a different position in `POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS` or even
|
||||
to `POWERLEVEL9K_LEFT_PROMPT_ELEMENTS`.
|
||||
|
||||
## Why some prompt segments appear and disappear as I'm typing?
|
||||
|
||||
Prompt segments can be configured to be shown only when the current command you are typing invokes
|
||||
a relevant tool.
|
||||
|
||||
```zsh
|
||||
# Show prompt segment "kubecontext" only when the command you are typing
|
||||
# invokes kubectl, helm, kubens, kubectx, oc, istioctl, kogito, k9s or helmfile.
|
||||
typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile'
|
||||
```
|
||||
|
||||
Configs created by `p10k configure` may contain parameters of this kind. To customize when different
|
||||
prompt segments are shown, open `~/.p10k.zsh`, search for `SHOW_ON_COMMAND` and either remove these
|
||||
parameters or change their values.
|
||||
|
||||
You can also define a function in `~/.zshrc` to toggle the display of a prompt segment between
|
||||
_always_ and _on command_. This is similar to `kubeon`/`kubeoff` from
|
||||
[kube-ps1](https://github.com/jonmosco/kube-ps1).
|
||||
|
||||
```zsh
|
||||
function kube-toggle() {
|
||||
if (( ${+POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND} )); then
|
||||
unset POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND
|
||||
else
|
||||
POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile'
|
||||
fi
|
||||
p10k reload
|
||||
if zle; then
|
||||
zle push-input
|
||||
zle accept-line
|
||||
fi
|
||||
}
|
||||
```
|
||||
|
||||
Invoke this function by typing `kube-toggle`. You can also bind it to a key by adding two more lines
|
||||
to `~/.zshrc`:
|
||||
|
||||
```zsh
|
||||
zle -N kube-toggle
|
||||
bindkey '^]' kube-toggle # ctrl-] to toggle kubecontext in powerlevel10k prompt
|
||||
```
|
||||
|
||||
## How do I change prompt colors?
|
||||
|
||||
You can either [change the color palette used by your terminal](#change-the-color-palette-used-by-your-terminal) or
|
||||
[set colors through Powerlevel10k configuration parameters](#set-colors-through-powerlevel10k-configuration-parameters).
|
||||
|
||||
### Change the color palette used by your terminal
|
||||
|
||||
How exactly you change the terminal color palette (a.k.a. color scheme, or theme) depends on the
|
||||
kind of terminal you are using. Look around in terminal's settings/preferences or consult
|
||||
documentation.
|
||||
|
||||
When you change the terminal color palette, it usually affects only the first 16 colors, numbered
|
||||
from 0 to 15. In order to see any effect on Powerlevel10k prompt, you need to use prompt style that
|
||||
utilizes these low-numbered colors. Type `p10k configure` and select _Rainbow_, _Lean_ → _8 colors_
|
||||
or _Pure_ → _Original_. Other styles use higher-numbered colors, so they look the same in any
|
||||
terminal color palette.
|
||||
|
||||
### Set colors through Powerlevel10k configuration parameters
|
||||
|
||||
Open `~/.p10k.zsh`, search for "color", "foreground" and "background" and change values of
|
||||
appropriate parameters. For example, here's how you can set the foreground of `time` prompt segment
|
||||
to bright red:
|
||||
|
||||
```zsh
|
||||
typeset -g POWERLEVEL9K_TIME_FOREGROUND=160
|
||||
```
|
||||
|
||||
Colors are specified using numbers from 0 to 255. Colors from 0 to 15 look differently in different
|
||||
terminals. Many terminals also support customization of these colors through color palettes
|
||||
(a.k.a. color schemes, or themes). Colors from 16 to 255 always look the same.
|
||||
|
||||
Type `source ~/.p10k.zsh` to apply your changes to the current Zsh session.
|
||||
|
||||
To see how different colors look in your terminal, run the following command:
|
||||
|
||||
```zsh
|
||||
for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done
|
||||
```
|
||||
|
||||
## Why does Powerlevel10k spawn extra processes?
|
||||
|
||||
Powerlevel10k uses [gitstatus](https://github.com/romkatv/gitstatus) as the backend behind `vcs`
|
||||
prompt; gitstatus spawns `gitstatusd` and `zsh`. See
|
||||
[gitstatus](https://github.com/romkatv/gitstatus) for details. Powerlevel10k may also spawn `zsh`
|
||||
to perform computation without blocking prompt. To avoid security hazard, these background processes
|
||||
aren't shared by different interactive shells. They terminate automatically when the parent `zsh`
|
||||
process terminates or runs `exec(3)`.
|
||||
|
||||
## Are there configuration options that make Powerlevel10k slow?
|
||||
|
||||
No, Powerlevel10k is always fast, with any configuration you throw at it. If you have noticeable
|
||||
prompt latency when using Powerlevel10k, please
|
||||
[open an issue](https://github.com/romkatv/powerlevel10k/issues).
|
||||
|
||||
## Is Powerlevel10k fast to load?
|
||||
|
||||
Yes, provided that you are using Zsh >= 5.4.
|
||||
|
||||
Loading time, or time to first prompt, can be measured with the following benchmark:
|
||||
|
||||
```zsh
|
||||
time (repeat 1000 zsh -dfis <<< 'source ~/powerlevel10k/powerlevel10k.zsh-theme')
|
||||
```
|
||||
|
||||
_Note:_ This measures time to first complete prompt. Powerlevel10k can also display a
|
||||
[limited prompt](features/instant_prompt.md) before the full-featured prompt is ready.
|
||||
|
||||
Running this command with `~/powerlevel10k` as the current directory on the same machine as in the
|
||||
[prompt benchmark](#is-it-really-fast) takes 29 seconds (29 ms per invocation). This is about 6
|
||||
times faster than powerlevel9k/master and 17 times faster than powerlevel9k/next.
|
||||
|
||||
## What is the relationship between Powerlevel9k and Powerlevel10k?
|
||||
|
||||
Powerlevel10k was forked from Powerlevel9k in March 2019 after a week-long discussion in
|
||||
[powerlevel9k#1170](https://github.com/Powerlevel9k/powerlevel9k/issues/1170). Powerlevel9k was
|
||||
already a mature project with large user base and release cycle measured in months. Powerlevel10k
|
||||
was spun off to iterate on performance improvements and new features at much higher pace.
|
||||
|
||||
Powerlevel9k and Powerlevel10k are independent projects. When using one, you shouldn't install the
|
||||
other. Issues should be filed against the project that you actually use. There are no individuals
|
||||
that have commit rights in both repositories. All bug fixes and new features committed to
|
||||
Powerlevel9k repository get ported to Powerlevel10k.
|
||||
|
||||
Over time, virtually all code in Powerlevel10k has been rewritten. There is currently no meaningful
|
||||
overlap between the implementations of Powerlevel9k and Powerlevel10k.
|
||||
|
||||
Powerlevel10k is committed to maintaining backward compatibility with all configs indefinitely. This
|
||||
commitment covers all configuration parameters recognized by Powerlevel9k (see
|
||||
[Powerlevel9k compatibility](features/p9k_compatibility.md)) and additional parameters that only
|
||||
Powerlevel10k understands. Names of all parameters in Powerlevel10k start with `POWERLEVEL9K_` for
|
||||
consistency.
|
||||
|
||||
## Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config?
|
||||
|
||||
Almost. There are a few differences.
|
||||
|
||||
- By default only `git` vcs backend is enabled in Powerlevel10k. If you need `svn` and `hg`, add
|
||||
them to `POWERLEVEL9K_VCS_BACKENDS`. These backends aren't yet optimized in Powerlevel10k, so
|
||||
enabling them will make prompt _very slow_.
|
||||
- Powerlevel10k doesn't support `POWERLEVEL9K_VCS_SHOW_SUBMODULE_DIRTY=true`.
|
||||
- Powerlevel10k strives to be bug-compatible with Powerlevel9k but not when it comes to egregious
|
||||
bugs. If you accidentally rely on these bugs, your prompt will differ between Powerlevel9k and
|
||||
Powerlevel10k. Some examples:
|
||||
- Powerlevel9k ignores some options that are set after the theme is sourced while Powerlevel10k
|
||||
respects all options. If you see different icons in Powerlevel9k and Powerlevel10k, you've
|
||||
probably defined `POWERLEVEL9K_MODE` before sourcing the theme. This parameter gets ignored
|
||||
by Powerlevel9k but honored by Powerlevel10k. If you want your prompt to look in Powerlevel10k
|
||||
the same as in Powerlevel9k, remove `POWERLEVEL9K_MODE`.
|
||||
- Powerlevel9k doesn't respect `ZLE_RPROMPT_INDENT`. As a result, right prompt in Powerlevel10k
|
||||
can have an extra space at the end compared to Powerlevel9k. Set `ZLE_RPROMPT_INDENT=0` if you
|
||||
don't want that space. More details in
|
||||
[troubleshooting](#extra-space-without-background-on-the-right-side-of-right-prompt).
|
||||
- Powerlevel9k has inconsistent spacing around icons. This was fixed in Powerlevel10k. Set
|
||||
`POWERLEVEL9K_LEGACY_ICON_SPACING=true` to get the same spacing as in Powerlevel9k. More
|
||||
details in [troubleshooting](#extra-or-missing-spaces-around-icons).
|
||||
- There are dozens more bugs in Powerlevel9k that don't exist in Powerlevel10k.
|
||||
|
||||
If you notice any other changes in prompt appearance when switching from Powerlevel9k to
|
||||
Powerlevel10k, please [open an issue](https://github.com/romkatv/powerlevel10k/issues).
|
||||
|
||||
## What is the best prompt style in the configuration wizard?
|
||||
|
||||
There are as many opinions on what constitutes the best prompt as there are people. It mostly comes
|
||||
down to personal preference. There are, however, a few hidden implications of different choices.
|
||||
|
||||
Pure style is an exact replication of [Pure Zsh theme](https://github.com/sindresorhus/pure). It
|
||||
exists to ease the migration for users of this theme. Unless you are one of them, choose Lean
|
||||
style over Pure.
|
||||
|
||||
If you want to confine prompt colors to the selected terminal color palette (say, _Solarized Dark_),
|
||||
use _Rainbow_, _Lean_ → _8 colors_ or _Pure_ → _Original_. Other styles use fixed colors and thus
|
||||
look the same in any terminal color palette.
|
||||
|
||||
All styles except Pure have an option to use _ASCII_ charset. Prompt will look less pretty but will
|
||||
render correctly with all fonts and in all locales.
|
||||
|
||||
If you enable transient prompt, take advantage of two-line prompt. You'll get the benefit of
|
||||
extra space for typing commands without the usual drawback of reduced scrollback density. Having
|
||||
all commands start from the same offset is also nice.
|
||||
|
||||
Similarly, if you enable transient prompt, sparse prompt (with an empty line before prompt) is a
|
||||
great choice.
|
||||
|
||||
If you are using vi keymap, choose prompt with `prompt_char` in it (shown as green `❯` in the
|
||||
wizard). This symbol changes depending on vi mode: `❯`, `❮`, `V`, `▶` for insert, command, visual
|
||||
and replace mode respectively. When a command fails, the symbol turns red. _Lean_ style always has
|
||||
`prompt_char` in it. _Rainbow_ and _Classic_ styles have it only in the two-line configuration
|
||||
without left frame.
|
||||
|
||||
If you value horizontal space or prefer minimalist aesthetics:
|
||||
|
||||
- Use a monospace font, such as [the recommended font](#recommended-font-meslo-nerd-font-patched-for-powerlevel10k).
|
||||
Non-monospace fonts require extra space after icons that are larger than a single column.
|
||||
- Use Lean style. Compared to Classic and Rainbow, it saves two characters per prompt segment.
|
||||
- Disable _current time_ and _frame_.
|
||||
- Use _few icons_. The extra icons enabled by the _many icons_ option primarily serve decorative
|
||||
function. Informative icons, such as background job indicator, will be shown either way.
|
||||
|
||||
_Note_: You can run configuration wizard as many times as you like. Type `p10k configure` to try new
|
||||
prompt style.
|
||||
|
||||
## How to make Powerlevel10k look like robbyrussell Oh My Zsh theme?
|
||||
|
||||
Use [this config](https://github.com/romkatv/powerlevel10k/blob/master/config/p10k-robbyrussell.zsh).
|
||||
|
||||
You can either download it, save as `~/.p10k.zsh` and `source ~/.p10k.zsh` from `~/.zshrc`, or
|
||||
source `p10k-robbyrussell.zsh` directly from your cloned `powerlevel10k` repository.
|
||||
|
||||
## Can prompts for completed commands display error status for _those_ commands instead of the commands preceding them?
|
||||
|
||||
No. When you hit _ENTER_ and the command you've typed starts running, its error status isn't yet
|
||||
known, so it cannot be shown in prompt. When the command completes, the error status gets known but
|
||||
it's no longer possible to update prompt for _that_ command. This is why the error status for every
|
||||
command is reflected in the _next_ prompt.
|
||||
|
||||
For details, see [this post on /r/zsh](https://www.reddit.com/r/zsh/comments/eg49ff/powerlevel10k_prompt_history_exit_code_colors/fc5huku).
|
||||
|
||||
## What is the minimum supported Zsh version?
|
||||
|
||||
Zsh 5.1 or newer should work. Fast startup requires Zsh >= 5.4.
|
||||
|
||||
## How were these screenshots and animated gifs created?
|
||||
|
||||
All screenshots and animated gifs were recorded in GNOME Terminal with
|
||||
[the recommended font](#recommended-font-meslo-nerd-font-patched-for-powerlevel10k) and Tango Dark color palette with
|
||||
custom background color (`#171A1B` instead of `#2E3436` -- twice as dark).
|
||||
|
||||

|
||||
|
||||
Syntax highlighting, where present, was provided by [zsh-syntax-highlighting](https://github.com/zsh-users/zsh-syntax-highlighting).
|
||||
|
||||
## How was the recommended font created?
|
||||
|
||||
[The recommended font](#recommended-font-meslo-nerd-font-patched-for-powerlevel10k) is the product of many
|
||||
individuals. Its origin is _Bitstream Vera Sans Mono_, which has given birth to _Menlo_, which in
|
||||
turn has spawned _Meslo_. Finally, extra glyphs have been added to _Meslo_ with scripts forked
|
||||
from Nerd Fonts. The final font is released under the terms of
|
||||
[Apache License](https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20License.txt).
|
||||
|
||||
```zsh
|
||||
git clone --depth=1 https://github.com/romkatv/nerd-fonts.git
|
||||
cd nerd-fonts
|
||||
./build 'Meslo/S/*'
|
||||
```
|
||||
|
||||
MesloLGS NF font can be recreated with the following command (requires `git` and `docker`) 👉:
|
||||
|
||||
If everything goes well, four `ttf` files will appear in `./out`.
|
||||
|
||||
## How to package Powerlevel10k for distribution?
|
||||
|
||||
It's currently neither easy nor recommended to package and distribute Powerlevel10k. There are no
|
||||
instructions you can follow that would allow you to easily update your package when new versions of
|
||||
Powerlevel10k are released. This may change in the future but not soon.
|
||||
301
docs/source/includes/features.md
Normal file
301
docs/source/includes/features.md
Normal file
|
|
@ -0,0 +1,301 @@
|
|||
# Features
|
||||
|
||||
## Configuration Wizard
|
||||
|
||||
```zsh
|
||||
p10k configure
|
||||
```
|
||||
|
||||

|
||||
|
||||
Type `p10k configure` to access the builtin configuration wizard right from your terminal.
|
||||
|
||||
All styles except [Pure](#pure-compatibility) are functionally equivalent. They display the same
|
||||
information and differ only in presentation.
|
||||
|
||||
Configuration wizard creates `~/.p10k.zsh` based on your preferences. Additional prompt
|
||||
customization can be done by editing this file. It has plenty of comments to help you navigate
|
||||
through configuration options.
|
||||
|
||||
_Tip_: Install [the recommended font](../#recommended-font-meslo-nerd-font-patched-for-powerlevel10k) before
|
||||
running `p10k configure` to unlock all prompt styles.
|
||||
|
||||
_FAQ:_
|
||||
|
||||
- [What is the best prompt style in the configuration wizard?](#what-is-the-best-prompt-style-in-the-configuration-wizard)
|
||||
- [What do different symbols in Git status mean?](#what-do-different-symbols-in-git-status-mean)
|
||||
- [How do I change prompt colors?](#how-do-i-change-prompt-colors)
|
||||
|
||||
_Troubleshooting_:
|
||||
|
||||
- [Some prompt styles are missing from the configuration wizard](#some-prompt-styles-are-missing-from-the-configuration-wizard).
|
||||
- [Question mark in prompt](#question-mark-in-prompt).
|
||||
- [Icons, glyphs or powerline symbols don't render](#icons-glyphs-or-powerline-symbols-don-39-t-render).
|
||||
- [Sub-pixel imperfections around powerline symbols](#sub-pixel-imperfections-around-powerline-symbols).
|
||||
- [Directory is difficult to see in prompt when using Rainbow style](#directory-is-difficult-to-see-in-prompt-when-using-rainbow-style).
|
||||
|
||||
## Uncomprising Performance
|
||||
|
||||
When you hit _ENTER_, the next prompt appears instantly. With Powerlevel10k there is no prompt lag.
|
||||
If you install Cygwin on Raspberry Pi, `cd` into a Linux Git repository and activate enough prompt
|
||||
segments to fill four prompt lines on both sides of the screen... wait, that's just crazy and no
|
||||
one ever does that. Probably impossible, too. The point is, Powerlevel10k prompt is always fast, no
|
||||
matter what you do!
|
||||
|
||||

|
||||
|
||||
Note how the effect of every command is instantly reflected by the very next prompt.
|
||||
|
||||
```zsh
|
||||
timew start hack linux
|
||||
```
|
||||
|
||||
```zsh
|
||||
touch x y
|
||||
```
|
||||
|
||||
```zsh
|
||||
rm COPYING
|
||||
```
|
||||
|
||||
```zsh
|
||||
echo 3.7.3 >.python-version
|
||||
```
|
||||
|
||||
| Command | Prompt Indicator | Meaning |
|
||||
| ----------------------------- | :--------------: | --------------------------------------------------------------------: |
|
||||
| `timew start hack linux` | `🛡️ hack linux` | time tracking enabled in [timewarrior](https://timewarrior.net/) |
|
||||
| `touch x y` | `?2` | 2 untracked files in the Git repo |
|
||||
| `rm COPYING` | `!1` | 1 unstaged change in the Git repo |
|
||||
| `echo 3.7.3 >.python-version` | `🐍 3.7.3` | the current python version in [pyenv](https://github.com/pyenv/pyenv) |
|
||||
|
||||
Other Zsh themes capable of displaying the same information either produce prompt lag or print
|
||||
prompt that doesn't reflect the current state of the system and then refresh it later. With
|
||||
Powerlevel10k you get fast prompt _and_ up-to-date information.
|
||||
|
||||
_FAQ_: [Is it really fast?](#is-it-really-fast)
|
||||
|
||||
## Powerlevel9k compatibility
|
||||
|
||||
Powerlevel10k understands all [Powerlevel9k](https://github.com/Powerlevel9k/powerlevel9k)
|
||||
configuration parameters.
|
||||
|
||||

|
||||
|
||||
[Migration](#installation) from Powerlevel9k to Powerlevel10k is a straightforward process. All
|
||||
your `POWERLEVEL9K` configuration parameters will still work. Prompt will look the same as before
|
||||
([almost](#does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config))
|
||||
but it will be [much faster](#uncomprising-performance) ([certainly](#is-it-really-fast)).
|
||||
|
||||
_FAQ_:
|
||||
|
||||
- [I'm using Powerlevel9k with Oh My Zsh. How do I migrate?](#i-39-m-using-powerlevel9k-with-oh-my-zsh-how-do-i-migrate)
|
||||
- [Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config?](#does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config)
|
||||
- [What is the relationship between Powerlevel9k and Powerlevel10k?](#What-is-the-relationship-between-powerlevel9k-and-powerlevel10k)
|
||||
|
||||
## Pure compatibility
|
||||
|
||||
Powerlevel10k can produce the same prompt as [Pure](https://github.com/sindresorhus/pure). Type
|
||||
`p10k configure` and select _Pure_ style.
|
||||
|
||||

|
||||
|
||||
You can still use Powerlevel10k features such as [transient prompt](#transient-prompt) or
|
||||
[instant prompt](#instant-prompt) when sporting Pure style.
|
||||
|
||||
To customize prompt, edit `~/.p10k.zsh`. Powerlevel10k doesn't recognize Pure configuration
|
||||
parameters, so you'll need to use `POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3` instead of
|
||||
`PURE_CMD_MAX_EXEC_TIME=3`, etc. All relevant parameters are in `~/.p10k.zsh`. This file has
|
||||
plenty of comments to help you navigate through it.
|
||||
|
||||
_FAQ:_ [What is the best prompt style in the configuration wizard?](#what-is-the-best-prompt-style-in-the-configuration-wizard)
|
||||
|
||||
## Instant prompt
|
||||
|
||||
If your `~/.zshrc` loads many plugins, or perhaps just a few slow ones
|
||||
(for example, [pyenv](https://github.com/pyenv/pyenv) or [nvm](https://github.com/nvm-sh/nvm)), you
|
||||
may have noticed that it takes some time for Zsh to start.
|
||||
|
||||

|
||||
|
||||
Powerlevel10k can remove Zsh startup lag **even if it's not caused by a theme**.
|
||||
|
||||

|
||||
|
||||
This feature is called _Instant Prompt_. You need to explicitly enable it through `p10k configure`
|
||||
or [manually](../#how-do-i-enable-instant-prompt). It does what it says on the tin -- prints prompt
|
||||
instantly upon Zsh startup allowing you to start typing while plugins are still loading.
|
||||
|
||||
Other themes _increase_ Zsh startup lag -- some by a lot, others by a just a little. Powerlevel10k
|
||||
_removes_ it outright.
|
||||
|
||||
_FAQ:_ [How do I enable instant prompt?](#how-do-i-enable-instant-prompt)
|
||||
|
||||
## Show on command
|
||||
|
||||
The behavior of some commands depends on global environment. For example, `kubectl run ...` runs an
|
||||
image on the cluster defined by the current kubernetes context. If you frequently change context
|
||||
between "prod" and "testing", you might want to display the current context in Zsh prompt. If you do
|
||||
likewise for AWS, Azure and Google Cloud credentials, prompt will get pretty crowded.
|
||||
|
||||
Enter _Show On Command_. This feature makes prompt segments appear only when they are relevant to
|
||||
the command you are currently typing.
|
||||
|
||||
```zsh
|
||||
# Show prompt segment "kubecontext" only when the command you are typing
|
||||
# invokes kubectl, helm, kubens, kubectx, oc, istioctl, kogito, k9s or helmfile.
|
||||
typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile'
|
||||
```
|
||||
|
||||

|
||||
|
||||
Configs created by `p10k configure` enable show on command for several prompt segments by default.
|
||||
Here's the relevant parameter for kubernetes context:
|
||||
|
||||
|
||||
To customize when different prompt segments are shown, open `~/.p10k.zsh`, search for
|
||||
`SHOW_ON_COMMAND` and either remove these parameters to display affected segments unconditionally,
|
||||
or change their values.
|
||||
|
||||
## Transient prompt
|
||||
|
||||
When _Transient Prompt_ is enabled through `p10k configure`, Powerlevel10k will trim down every
|
||||
prompt when accepting a command line.
|
||||
|
||||

|
||||
|
||||
Transient prompt makes it much easier to copy-paste series of commands from the terminal scrollback.
|
||||
|
||||
_Tip_: If you enable transient prompt, take advantage of two-line prompt. You'll get the benefit of
|
||||
extra space for typing commands without the usual drawback of reduced scrollback density. Sparse
|
||||
prompt (with an empty line before prompt) also works great in combination with transient prompt.
|
||||
|
||||
## Current directory that just works
|
||||
|
||||
The current working directory is perhaps the most important prompt segment. Powerlevel10k goes to
|
||||
great length to highlight its important parts and to truncate it with the least loss of information
|
||||
when horizontal space gets scarce.
|
||||
|
||||

|
||||
|
||||
When the full directory doesn't fit, the leftmost segment gets truncated to its shortest unique
|
||||
prefix. In the screencast, `~/work` becomes `~/wo`. It couldn't be truncated to `~/w` because it
|
||||
would be ambiguous (there was `~/wireguard` when the session was recorded). The next segment --
|
||||
`projects` -- turns into `p` as there was nothing else that started with `p` in `~/work/`.
|
||||
|
||||
Directory segments are shown in one of three colors:
|
||||
|
||||
- Truncated segments are bleak.
|
||||
- Important segments are bright and never truncated. These include the first and the last segment,
|
||||
roots of Git repositories, etc.
|
||||
- Regular segments (not truncated but can be) use in-between color.
|
||||
|
||||
_Tip_: If you copy-paste a truncated directory and hit _TAB_, it'll complete to the original.
|
||||
|
||||
_Troubleshooting_: [Directory is difficult to see in prompt when using Rainbow style.](#directory-is-difficult-to-see-in-prompt-when-using-rainbow-style)
|
||||
|
||||
## Extremely customizable
|
||||
|
||||
Powerlevel10k can be configured to look like any other Zsh theme out there.
|
||||
|
||||

|
||||
|
||||
[Pure](#pure-compatibility), [Powerlevel9k](p9k_compatibility.md) and [robbyrussell](#how-to-make-powerlevel10k-look-like-robbyrussell-oh-my-zsh-theme) emulations are built-in.
|
||||
To emulate the appearance of other themes, you'll need to write a suitable configuration file. The
|
||||
best way to go about it is to run `p10k configure`, select the style that is the closest to your
|
||||
goal and then edit `~/.p10k.zsh`.
|
||||
|
||||
The full range of Powerlevel10k appearance spans from spartan:
|
||||
|
||||

|
||||
|
||||
To ~~ridiculous~~ extravagant:
|
||||
|
||||

|
||||
|
||||
## Batteries included
|
||||
|
||||
Powerlevel10k comes with dozens of built-in high quality segments. When you run `p10k configure`
|
||||
and choose any style except [Pure](#pure-compatibility), many of these segments get enabled by
|
||||
default while others be manually enabled by opening `~/.p10k.zsh` and uncommenting them. You can
|
||||
enable as many segments as you like. It won't slow down your prompt or Zsh startup.
|
||||
|
||||
| Segment | Meaning |
|
||||
| -----------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `os_icon` | your OS logo (apple for macOS, swirl for debian, etc.) |
|
||||
| `dir` | current working directory |
|
||||
| `vcs` | Git repository status |
|
||||
| `prompt_char` | multi-functional prompt symbol; changes depending on vi mode: `❯`, `❮`, `V`, `▶` for insert, command, visual and replace mode respectively; turns red on error |
|
||||
| `context` | user@hostname |
|
||||
| `status` | exit code of the last command |
|
||||
| `command_execution_time` | duration (wall time) of the last command |
|
||||
| `background_jobs` | presence of background jobs |
|
||||
| `time` | current time |
|
||||
| `direnv` | [direnv](https://direnv.net/) status |
|
||||
| `asdf` | tool versions from [asdf](https://github.com/asdf-vm/asdf) |
|
||||
| `virtualenv` | python environment from [venv](https://docs.python.org/3/library/venv.html) |
|
||||
| `anaconda` | virtual environment from [conda](https://conda.io/) |
|
||||
| `pyenv` | python environment from [pyenv](https://github.com/pyenv/pyenv) |
|
||||
| `goenv` | go environment from [goenv](https://github.com/syndbg/goenv) |
|
||||
| `nodenv` | node.js environment from [nodenv](https://github.com/nodenv/nodenv) |
|
||||
| `nvm` | node.js environment from [nvm](https://github.com/nvm-sh/nvm) |
|
||||
| `nodeenv` | node.js environment from [nodeenv](https://github.com/ekalinin/nodeenv) |
|
||||
| `rbenv` | ruby environment from [rbenv](https://github.com/rbenv/rbenv) |
|
||||
| `rvm` | ruby environment from [rvm](https://rvm.io) |
|
||||
| `fvm` | flutter environment from [fvm](https://github.com/leoafarias/fvm) |
|
||||
| `luaenv` | lua environment from [luaenv](https://github.com/cehoffman/luaenv) |
|
||||
| `jenv` | java environment from [jenv](https://github.com/jenv/jenv) |
|
||||
| `plenv` | perl environment from [plenv](https://github.com/tokuhirom/plenv) |
|
||||
| `phpenv` | php environment from [phpenv](https://github.com/phpenv/phpenv) |
|
||||
| `haskell_stack` | haskell version from [stack](https://haskellstack.org/) |
|
||||
| `node_version` | [node.js](https://nodejs.org/) version |
|
||||
| `go_version` | [go](https://golang.org) version |
|
||||
| `rust_version` | [rustc](https://www.rust-lang.org) version |
|
||||
| `dotnet_version` | [dotnet](https://dotnet.microsoft.com) version |
|
||||
| `php_version` | [php](https://www.php.net/) version |
|
||||
| `laravel_version` | [laravel php framework](https://laravel.com/) version |
|
||||
| `java_version` | [java](https://www.java.com/) version |
|
||||
| `package` | `name@version` from [package.json](https://docs.npmjs.com/files/package.json) |
|
||||
| `kubecontext` | current [kubernetes](https://kubernetes.io/) context |
|
||||
| `terraform` | [terraform](https://www.terraform.io) workspace |
|
||||
| `aws` | [aws profile](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) |
|
||||
| `aws_eb_env` | [aws elastic beanstalk](https://aws.amazon.com/elasticbeanstalk/) environment |
|
||||
| `azure` | [azure](https://docs.microsoft.com/en-us/cli/azure) account name |
|
||||
| `gcloud` | [google cloud](https://cloud.google.com/) cli account and project |
|
||||
| `google_app_cred` | [google application credentials](https://cloud.google.com/docs/authentication/production) |
|
||||
| `nordvpn` | [nordvpn](https://nordvpn.com/) connection status |
|
||||
| `ranger` | [ranger](https://github.com/ranger/ranger) shell |
|
||||
| `nnn` | [nnn](https://github.com/jarun/nnn) shell |
|
||||
| `vim_shell` | [vim](https://www.vim.org/) shell (`:sh`) |
|
||||
| `midnight_commander` | [midnight commander](https://midnight-commander.org/) shell |
|
||||
| `nix_shell` | [nix shell](https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) indicator |
|
||||
| `todo` | [todo](https://github.com/todotxt/todo.txt-cli) items |
|
||||
| `timewarrior` | [timewarrior](https://timewarrior.net/) tracking status |
|
||||
| `taskwarrior` | [taskwarrior](https://taskwarrior.org/) task count |
|
||||
| `vpn_ip` | virtual private network indicator |
|
||||
| `ip` | IP address and bandwidth usage for a specified network interface |
|
||||
| `load` | CPU load |
|
||||
| `disk_usage` | disk usage |
|
||||
| `ram` | free RAM |
|
||||
| `swap` | used swap |
|
||||
| `public_ip` | public IP address |
|
||||
| `proxy` | system-wide http/https/ftp proxy |
|
||||
| `wifi` | WiFi speed |
|
||||
| `battery` | internal battery state and charge level (yep, batteries _literally_ included) |
|
||||
|
||||
## Extensible
|
||||
|
||||
If there is no prompt segment that does what you need, implement your own. Powerlevel10k provides
|
||||
public API for defining segments that are as fast and as flexible as built-in ones.
|
||||
|
||||

|
||||
|
||||
On Linux you can fetch current CPU temperature by reading `/sys/class/thermal/thermal_zone0/temp`.
|
||||
The screencast shows how to define a prompt segment to display this value. Once the segment is
|
||||
defined, you can use it like any other segment. All standard customization parameters will work for
|
||||
it out of the box.
|
||||
|
||||
Type `p10k help segment` for reference.
|
||||
|
||||
_Tip_: Prefix names of your own segments with `my_` to avoid clashes with future versions of
|
||||
Powerlevel10k.
|
||||
82
docs/source/includes/font.md
Normal file
82
docs/source/includes/font.md
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
# Recommended font: Meslo Nerd Font patched for Powerlevel10k
|
||||
|
||||
Gorgeous monospace font designed by Jim Lyles for Bitstream, customized by the same for Apple,
|
||||
further customized by André Berg, and finally patched by yours truly with customized scripts
|
||||
originally developed by Ryan L McIntyre of Nerd Fonts. Contains all glyphs and symbols that
|
||||
Powerlevel10k may need. Battle-tested in dozens of different terminals on all major operating
|
||||
systems.
|
||||
|
||||
_FAQ_: [How was the recommended font created?](#how-was-the-recommended-font-created)
|
||||
|
||||
## Automatic font installation
|
||||
|
||||
If you are using iTerm2 or Termux, `p10k configure` can install the recommended font for you.
|
||||
Simply answer `Yes` when asked whether to install _Meslo Nerd Font_.
|
||||
|
||||
If you are using a different terminal, proceed with manual font installation. 👇
|
||||
|
||||
## Manual font installation
|
||||
|
||||
Download these four ttf files:
|
||||
|
||||
- [MesloLGS NF Regular.ttf](https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf)
|
||||
- [MesloLGS NF Bold.ttf](https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold.ttf)
|
||||
- [MesloLGS NF Italic.ttf](https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Italic.ttf)
|
||||
- [MesloLGS NF Bold Italic.ttf](https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold%20Italic.ttf)
|
||||
|
||||
Double-click on each file and click "Install". This will make `MesloLGS NF` font available to all
|
||||
applications on your system. Configure your terminal to use this font:
|
||||
|
||||
- **iTerm2**: Open _iTerm2 → Preferences → Profiles → Text_ and set _Font_ to `MesloLGS NF`.
|
||||
Alternatively, type `p10k configure` and answer `Yes` when asked whether to install
|
||||
_Meslo Nerd Font_.
|
||||
- **Apple Terminal** Open _Terminal → Preferences → Profiles → Text_, click _Change_ under _Font_
|
||||
and select `MesloLGS NF` family.
|
||||
- **Hyper**: Open _Hyper → Edit → Preferences_ and change the value of `fontFamily` under
|
||||
`module.exports.config` to `MesloLGS NF`.
|
||||
- **Visual Studio Code**: Open _File → Preferences → Settings_, enter
|
||||
`terminal.integrated.fontFamily` in the search box and set the value to `MesloLGS NF`.
|
||||
- **GNOME Terminal** (the default Ubuntu terminal): Open _Terminal → Preferences_ and click on the
|
||||
selected profile under _Profiles_. Check _Custom font_ under _Text Appearance_ and select
|
||||
`MesloLGS NF Regular`.
|
||||
- **Konsole**: Open _Settings → Edit Current Profile → Appearance_, click _Select Font_ and select
|
||||
`MesloLGS NF Regular`.
|
||||
- **Tilix**: Open _Tilix → Preferences_ and click on the selected profile under _Profiles_. Check
|
||||
_Custom font_ under _Text Appearance_ and select `MesloLGS NF Regular`.
|
||||
- **Windows Console Host** (the old thing): Click the icon in the top left corner, then
|
||||
_Properties → Font_ and set _Font_ to `MesloLGS NF`.
|
||||
- **Windows Terminal** (the new thing): Open _Settings_ (`Ctrl+,`), search for `fontFace` and set
|
||||
value to `MesloLGS NF` for every profile.
|
||||
- **Termux**: Type `p10k configure` and answer `Yes` when asked whether to install
|
||||
_Meslo Nerd Font_.
|
||||
- **Blink** Type `config`, go to _Appearance_, tap _Add a new font_, tap _Open Gallery_, select
|
||||
_MesloLGS NF.css_, tap _import_ and type `exit` in the home view to reload the font.
|
||||
- **Terminus**: Open _Settings → Appearance_ and set _Font_ to `MesloLGS NF`.
|
||||
- **Terminator**: Open _Preferences_ using the context menu. Under _Profiles_ select the _General_
|
||||
tab (should be selected already), uncheck _Use the system fixed width font_ (if not already)
|
||||
and select `MesloLGS NF Regular`. Exit the Preferences dialog by clicking _Close_.
|
||||
- **Guake**: Right Click on an open terminal and open _Preferences_. Under _Appearance_
|
||||
tab, uncheck _Use the system fixed width font_ (if not already) and select `MesloLGS NF Regular`.
|
||||
Exit the Preferences dialog by clicking _Close_.
|
||||
- **Alacritty**: Create or open `~/.config/alacritty/alacritty.yml` and add the following section
|
||||
to it:
|
||||
|
||||
```yaml
|
||||
font:
|
||||
normal:
|
||||
family: 'MesloLGS NF'
|
||||
```
|
||||
|
||||
- **Kitty**: Create or open `~/.config/kitty/kitty.conf` and add the following line to it:
|
||||
|
||||
```text
|
||||
font_family MesloLGS NF
|
||||
```
|
||||
|
||||
Restart Kitty by closing all sessions and opening a new session.
|
||||
|
||||
**IMPORTANT:** Run `p10k configure` after changing terminal font. The old `~/.p10k.zsh` may work
|
||||
incorrectly with the new font.
|
||||
|
||||
_Using a different terminal and know how to set the font for it? Share your knowledge by sending a
|
||||
PR to expand the list!_
|
||||
112
docs/source/includes/installation.md
Normal file
112
docs/source/includes/installation.md
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
# Installation
|
||||
|
||||
1. Install [the recommended font](#recommended-font-meslo-nerd-font-patched-for-powerlevel10k). _Optional but highly
|
||||
recommended._
|
||||
2. Install Powerlevel10k for your plugin manager.
|
||||
- [Manual](#manual) 👈 **choose this if confused or uncertain**
|
||||
- [Oh My Zsh](#oh-my-zsh)
|
||||
- [Prezto](#prezto)
|
||||
- [Zim](#zim)
|
||||
- [Antibody](#antibody)
|
||||
- [Antigen](#antigen)
|
||||
- [Zplug](#zplug)
|
||||
- [Zgen](#zgen)
|
||||
- [Zplugin](#zplugin)
|
||||
- [Zinit](#zinit)
|
||||
- [Homebrew](#homebrew)
|
||||
- [Arch Linux](#arch-linux)
|
||||
3. Restart Zsh.
|
||||
4. Type `p10k configure` if the configuration wizard doesn't start automatically.
|
||||
|
||||
## Manual
|
||||
|
||||
```zsh
|
||||
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
|
||||
echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc
|
||||
```
|
||||
|
||||
Users in mainland China can use the official mirror on gitee.com for faster download.<br>
|
||||
中国大陆用户可以使用 gitee.com 上的官方镜像加速下载.
|
||||
|
||||
```zsh
|
||||
git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ~/powerlevel10k
|
||||
echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc
|
||||
```
|
||||
|
||||
This is the simplest kind of installation and it works even if you are using a plugin manager. Just
|
||||
make sure to disable the current theme in your plugin manager. See
|
||||
[troubleshooting](#cannot-make-powerlevel10k-work-with-my-plugin-manager) for help.
|
||||
|
||||
## Oh My Zsh
|
||||
|
||||
```zsh
|
||||
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
|
||||
```
|
||||
|
||||
Users in mainland China can use the official mirror on gitee.com for faster download.<br>
|
||||
中国大陆用户可以使用 gitee.com 上的官方镜像加速下载.
|
||||
|
||||
```zsh
|
||||
git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
|
||||
```
|
||||
|
||||
Set `ZSH_THEME="powerlevel10k/powerlevel10k"` in `~/.zshrc`.
|
||||
|
||||
## Prezto
|
||||
|
||||
Add `zstyle :prezto:module:prompt theme powerlevel10k` to `~/.zpreztorc`.
|
||||
|
||||
## Zim
|
||||
|
||||
Add `zmodule romkatv/powerlevel10k` to `~/.zimrc` and run `zimfw install`.
|
||||
|
||||
## Antibody
|
||||
|
||||
Add `antibody bundle romkatv/powerlevel10k` to `~/.zshrc`.
|
||||
|
||||
## Antigen
|
||||
|
||||
Add `antigen theme romkatv/powerlevel10k` to `~/.zshrc`. Make sure you have `antigen apply`
|
||||
somewhere after it.
|
||||
|
||||
## Zplug
|
||||
|
||||
Add `zplug romkatv/powerlevel10k, as:theme, depth:1` to `~/.zshrc`.
|
||||
|
||||
## Zgen
|
||||
|
||||
Add `zgen load romkatv/powerlevel10k powerlevel10k` to `~/.zshrc`.
|
||||
|
||||
## Zplugin
|
||||
|
||||
Add `zplugin ice depth=1; zplugin light romkatv/powerlevel10k` to `~/.zshrc`.
|
||||
|
||||
The use of `depth=1` ice is optional. Other types of ice are neither recommended nor officially
|
||||
supported by Powerlevel10k.
|
||||
|
||||
## Zinit
|
||||
|
||||
Add `zinit ice depth=1; zinit light romkatv/powerlevel10k` to `~/.zshrc`.
|
||||
|
||||
The use of `depth=1` ice is optional. Other types of ice are neither recommended nor officially
|
||||
supported by Powerlevel10k.
|
||||
|
||||
## Homebrew
|
||||
|
||||
```zsh
|
||||
brew install romkatv/powerlevel10k/powerlevel10k
|
||||
echo 'source /usr/local/opt/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc
|
||||
```
|
||||
|
||||
## Arch Linux
|
||||
|
||||
```zsh
|
||||
yay -S --noconfirm zsh-theme-powerlevel10k-git
|
||||
echo 'source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc
|
||||
```
|
||||
|
||||
[zsh-theme-powerlevel10k-git](https://aur.archlinux.org/packages/zsh-theme-powerlevel10k-git/)
|
||||
referenced above is the official Powerlevel10k package.
|
||||
|
||||
There is also [zsh-theme-powerlevel10k](https://www.archlinux.org/packages/community/x86_64/zsh-theme-powerlevel10k/) community package.
|
||||
Historicaly, [it has been breaking often and for extended periods of time](https://github.com/romkatv/powerlevel10k/pull/786). **Do not use it.**
|
||||
483
docs/source/includes/troubleshooting.md
Normal file
483
docs/source/includes/troubleshooting.md
Normal file
|
|
@ -0,0 +1,483 @@
|
|||
# Troubleshooting
|
||||
|
||||
## Question mark in prompt
|
||||
|
||||
If it looks like a regular `?`, that's normal. It means you have untracked files in the current Git
|
||||
repository. Type `git status` to see these files. You can change this symbol or disable the display
|
||||
of untracked files altogether. Search for `untracked files` in `~/.p10k.zsh`.
|
||||
|
||||
_FAQ_: [What do different symbols in Git status mean?](#what-do-different-symbols-in-git-status-mean)
|
||||
|
||||
You can also get a weird-looking question mark in your prompt if your terminal's font is missing
|
||||
some glyphs. See [icons, glyphs or powerline symbols don't render](#icons-glyphs-or-powerline-symbols-don-39-t-render).
|
||||
|
||||
## Icons, glyphs or powerline symbols don't render
|
||||
|
||||
Restart your terminal, [install the recommended font](#recommended-font-meslo-nerd-font-patched-for-powerlevel10k)
|
||||
and run `p10k configure`.
|
||||
|
||||
## Sub-pixel imperfections around powerline symbols
|
||||
|
||||

|
||||
|
||||
There are three imperfections on the screenshot. From left to right:
|
||||
|
||||
1. A thin blue line (a sub-pixel gap) between the content of a prompt segment and the following
|
||||
powerline connection.
|
||||
1. Incorrect alignment of a powerline connection and the following prompt segment. The connection
|
||||
appears shifted to the right.
|
||||
1. A thin red line below a powerline connection. The connection appears shifted up.
|
||||
|
||||
Zsh themes don't have down-to-pixel control over the terminal content. Everything you see on the
|
||||
screen is made of monospace characters. A white powerline prompt segment is made of text on white
|
||||
background followed by U+E0B0 (a right-pointing triangle).
|
||||
|
||||

|
||||
|
||||
If Powerlevel10k prompt has imperfections around powerline symbols, you'll see exactly the same
|
||||
imperfections with all powerline themes (Agnoster, Powerlevel9k, Powerline, etc.)
|
||||
|
||||
There are several things you can try to deal with these imperfections:
|
||||
|
||||
- Try [the recommended font](#recommended-font-meslo-nerd-font-patched-for-powerlevel10k). If you are already using
|
||||
it, switching to another font may help but is unlikely.
|
||||
- Change terminal font size one point up or down. For example, in iTerm2 powerline prompt looks
|
||||
perfect at font sizes 11 and 13 but breaks down at 12.
|
||||
- Enable builtin powerline glyphs in terminal settings if your terminal supports it (iTerm2 does).
|
||||
- Change font hinting and/or anti-aliasing mode in the terminal settings.
|
||||
- Shift all text one pixel up/down/left/right if your terminal has an option to do so.
|
||||
- Try a different terminal.
|
||||
|
||||
A more radical solution is to switch to prompt style without background. Type `p10k configure` and
|
||||
select _Lean_. This style has a modern lightweight look. As a bonus, it doesn't suffer from
|
||||
rendering imperfections that afflict powerline-style prompt.
|
||||
|
||||
## Error: character not in range
|
||||
|
||||
Type `echo '\u276F'`. If you get an error saying "zsh: character not in range", your locale
|
||||
doesn't support UTF-8. You need to fix it. If you are running Zsh over SSH, see
|
||||
[this](https://github.com/romkatv/powerlevel10k/issues/153#issuecomment-518347833). If you are
|
||||
running Zsh locally, Google "set UTF-8 locale in _your OS_".
|
||||
|
||||
## Cursor is in the wrong place
|
||||
|
||||
Type `echo '\u276F'`. If you get an error saying "zsh: character not in range", see the
|
||||
[previous section](#error-character-not-in-range).
|
||||
|
||||
If the `echo` command prints `❯` but the cursor is still in the wrong place, install
|
||||
[the recommended font](#recommended-font-meslo-nerd-font-patched-for-powerlevel10k) and run
|
||||
`p10k configure`.
|
||||
|
||||
If this doesn't help, add `unset ZLE_RPROMPT_INDENT` at the bottom of `~/.zshrc`.
|
||||
|
||||
Still having issues? Run the following command to diagnose the problem:
|
||||
|
||||
```zsh
|
||||
() {
|
||||
emulate -L zsh
|
||||
setopt err_return no_unset
|
||||
local text
|
||||
print -rl -- 'Select a part of your prompt from the terminal window and paste it below.' ''
|
||||
read -r '?Prompt: ' text
|
||||
local -i len=${(m)#text}
|
||||
local frame="+-${(pl.$len..-.):-}-+"
|
||||
print -lr -- $frame "| $text |" $frame
|
||||
}
|
||||
```
|
||||
|
||||
### If the prompt line aligns with the frame
|
||||
|
||||
```text
|
||||
+------------------------------+
|
||||
| romka@adam ✓ ~/powerlevel10k |
|
||||
+------------------------------+
|
||||
```
|
||||
|
||||
If the output of the command is aligned for every part of your prompt (left and right), this
|
||||
indicates a bug in the theme or your config. Use this command to diagnose it:
|
||||
|
||||
```zsh
|
||||
print -rl -- ${(eq+)PROMPT} ${(eq+)RPROMPT}
|
||||
```
|
||||
|
||||
Look for `%{...%}` and backslash escapes in the output. If there are any, they are the likely
|
||||
culprits. Open an issue if you get stuck.
|
||||
|
||||
### If the prompt line is longer than the frame
|
||||
|
||||
```text
|
||||
+-----------------------------+
|
||||
| romka@adam ✓ ~/powerlevel10k |
|
||||
+-----------------------------+
|
||||
```
|
||||
|
||||
This is usually caused by a terminal bug or misconfiguration that makes it print ambiguous-width
|
||||
characters as double-width instead of single width. For example,
|
||||
[this issue](https://github.com/romkatv/powerlevel10k/issues/165).
|
||||
|
||||
### If the prompt line is shorter than the frame and is mangled
|
||||
|
||||
```text
|
||||
+------------------------------+
|
||||
| romka@adam ✓~/powerlevel10k |
|
||||
+------------------------------+
|
||||
```
|
||||
|
||||
Note that this prompt is different from the original as it's missing a space after the check mark.
|
||||
|
||||
This can be caused by a low-level bug in macOS. See
|
||||
[this issue](https://github.com/romkatv/powerlevel10k/issues/241).
|
||||
|
||||
This can also happen if prompt contains glyphs designated as "wide" in the Unicode standard and your
|
||||
terminal incorrectly displays them as non-wide. Terminals suffering from this limitation include
|
||||
Konsole, Hyper and the integrated VSCode Terminal. The solution is to use a different terminal or
|
||||
remove all wide glyphs from prompt.
|
||||
|
||||
### If the prompt line is shorter than the frame and is not mangled
|
||||
|
||||
```text
|
||||
+--------------------------------+
|
||||
| romka@adam ✓ ~/powerlevel10k |
|
||||
+--------------------------------+
|
||||
```
|
||||
|
||||
This can be caused by misconfigured locale. See
|
||||
[this issue](https://github.com/romkatv/powerlevel10k/issues/251).
|
||||
|
||||
## Prompt wrapping around in a weird way
|
||||
|
||||
See [cursor is in the wrong place](#cursor-is-in-the-wrong-place).
|
||||
|
||||
## Right prompt is in the wrong place
|
||||
|
||||
See [cursor is in the wrong place](#cursor-is-in-the-wrong-place).
|
||||
|
||||
## Configuration wizard runs automatically every time Zsh is started
|
||||
|
||||
When Powerlevel10k starts, it automatically runs `p10k configure` if no `POWERLEVEL9K_*`
|
||||
parameters are defined. Based on your prompt style choices, the configuration wizard creates
|
||||
`~/.p10k.zsh` with a bunch of `POWERLEVEL9K_*` parameters in it and adds a line to `~/.zshrc` to
|
||||
source this file. The next time you start Zsh, the configuration wizard shouldn't run automatically.
|
||||
If it does, this means the evaluation of `~/.zshrc` terminates prematurely before it reaches the
|
||||
line that sources `~/.p10k.zsh`. This most often happens due to syntax errors in `~/.zshrc`. These
|
||||
errors get hidden by the configuration wizard screen, so you don't notice them. When you exit
|
||||
configuration wizard, look for error messages. You can also use
|
||||
`POWERLEVEL9K_DISABLE_CONFIGURATION_WIZARD=true zsh` to start Zsh without automatically running the
|
||||
configuration wizard. Once you can see the errors, fix `~/.zshrc` to get rid of them.
|
||||
|
||||
## Some prompt styles are missing from the configuration wizard
|
||||
|
||||
If Zsh version is below 5.7.1 or `COLORTERM` environment variable is neither `24bit` nor
|
||||
`truecolor`, configuration wizard won't offer Pure style with Snazzy color scheme. _Fix_: Install
|
||||
Zsh >= 5.7.1 and use a terminal with truecolor support. Verify with `print -P '%F{#ff0000}red%f'`.
|
||||
|
||||
If the terminal can display fewer than 256 colors, configuration wizard preselects Lean style with
|
||||
8 colors. All other styles require at least 256 colors. _Fix_: Use a terminal with 256 color support
|
||||
and make sure that `TERM` environment variable is set correctly. Verify with
|
||||
`print $terminfo[colors]`.
|
||||
|
||||
If there is no UTF-8 locale on the system, configuration wizard won't offer prompt styles that use
|
||||
Unicode characters. _Fix_: Install a UTF-8 locale. Verify with `locale -a`.
|
||||
|
||||
When a UTF-8 locale is available, the first few questions asked by the configuration wizard assess
|
||||
capabilities of the terminal font. If your answers indicate that some glyphs don't render correctly,
|
||||
configuration wizard won't offer prompt styles that use them. _Fix_: Restart your terminal and
|
||||
install [the recommended font](#recommended-font-meslo-nerd-font-patched-for-powerlevel10k). Verify by running
|
||||
`p10k configure` and checking that all glyphs render correctly.
|
||||
|
||||
## Cannot install the recommended font
|
||||
|
||||
Once you download [the recommended font](#recommended-font-meslo-nerd-font-patched-for-powerlevel10k),
|
||||
you can install it just like any other font. Google "how to install fonts on _your OS_".
|
||||
|
||||
## Extra or missing spaces in prompt compared to Powerlevel9k
|
||||
|
||||
tl;dr: Add `ZLE_RPROMPT_INDENT=0` and `POWERLEVEL9K_LEGACY_ICON_SPACING=true` to `~/.zshrc` to get
|
||||
the same prompt spacing as in Powerlevel9k.
|
||||
|
||||
When using Powerlevel10k with a Powerlevel9k config, you might get additional spaces in prompt here
|
||||
and there. These come in two flavors.
|
||||
|
||||
### Extra space without background on the right side of right prompt
|
||||
|
||||
tl;dr: Add `ZLE_RPROMPT_INDENT=0` to `~/.zshrc` to get rid of that space.
|
||||
|
||||
From [Zsh documentation](http://zsh.sourceforge.net/Doc/Release/Parameters.html#index-ZLE_005fRPROMPT_005fINDENT):
|
||||
|
||||
> `ZLE_RPROMPT_INDENT <S>`
|
||||
>
|
||||
> If set, used to give the indentation between the right hand side of the right prompt in the line
|
||||
> editor as given by `RPS1` or `RPROMPT` and the right hand side of the screen. If not set, the
|
||||
> value `1` is used.
|
||||
>
|
||||
> Typically this will be used to set the value to `0` so that the prompt appears flush with the
|
||||
> right hand side of the screen.
|
||||
|
||||
Powerlevel10k respects this parameter. If you set `ZLE_RPROMPT_INDENT=1` (or leave it unset, which
|
||||
is the same thing as setting it to `1`), you'll get an empty space to the right of right prompt. If
|
||||
you set `ZLE_RPROMPT_INDENT=0`, your prompt will go to the edge of the terminal. This is how it
|
||||
works in every theme except Powerlevel9k.
|
||||
|
||||

|
||||
|
||||
Powerlevel9k issue: [powerlevel9k#1292](https://github.com/Powerlevel9k/powerlevel9k/issues/1292).
|
||||
It's been fixed in the development branch of Powerlevel9k but the fix hasn't yet made it to
|
||||
`master`.
|
||||
|
||||
Add `ZLE_RPROMPT_INDENT=0` to `~/.zshrc` to get the same spacing on the right edge of prompt as in
|
||||
Powerlevel9k.
|
||||
|
||||
_Note:_ Several versions of Zsh have bugs that get triggered when you set `ZLE_RPROMPT_INDENT=0`.
|
||||
Powerlevel10k can work around these bugs when using powerline prompt style. If you notice visual
|
||||
artifacts in prompt, or wrong cursor position, try removing `ZLE_RPROMPT_INDENT` from `~/.zshrc`.
|
||||
|
||||
### Extra or missing spaces around icons
|
||||
|
||||
tl;dr: Add `POWERLEVEL9K_LEGACY_ICON_SPACING=true` to `~/.zshrc` to get the same spacing around
|
||||
icons as in Powerlevel9k.
|
||||
|
||||
Spacing around icons in Powerlevel9k is inconsistent.
|
||||
|
||||

|
||||
|
||||
This inconsistency is a constant source of annoyance, so it was fixed in Powerlevel10k. You can add
|
||||
`POWERLEVEL9K_LEGACY_ICON_SPACING=true` to `~/.zshrc` to get the same spacing around icons as in
|
||||
Powerlevel9k.
|
||||
|
||||
_Note:_ It's not a good idea to define `POWERLEVEL9K_LEGACY_ICON_SPACING` when using
|
||||
`p10k configure`.
|
||||
|
||||
## Weird things happen after typing `source ~/.zshrc`
|
||||
|
||||
It's almost always a bad idea to run `source ~/.zshrc`, whether you are using Powerlevel10k or not.
|
||||
This command may result in random errors, misbehaving code and progressive slowdown of Zsh.
|
||||
|
||||
If you've made changes to `~/.zshrc` or to files sourced by it, restart Zsh to apply them. The most
|
||||
reliable way to do this is to type `exit` and then start a new Zsh session. You can also use
|
||||
`exec zsh`. While not exactly equivalent to complete Zsh restart, this command is much more reliable
|
||||
than `source ~/.zshrc`.
|
||||
|
||||
## Transient prompt stops working after some time
|
||||
|
||||
See [weird things happen after typing `source ~/.zshrc`](#weird-things-happen-after-typing-source-zshrc).
|
||||
|
||||
## Cannot make Powerlevel10k work with my plugin manager
|
||||
|
||||
If the [installation instructions](#installation) didn't work for you, try disabling your current
|
||||
theme (so that you end up with no theme) and then installing Powerlevel10k manually.
|
||||
|
||||
First: Disable the current theme in your framework / plugin manager.
|
||||
|
||||
- **oh-my-zsh:** Open `~/.zshrc` and remove the line that sets `ZSH_THEME`. It might look like this:
|
||||
`ZSH_THEME="powerlevel9k/powerlevel9k"`.
|
||||
- **zplug:** Open `~/.zshrc` and remove the `zplug` command that refers to your current theme. For
|
||||
example, if you are currently using Powerlevel9k, look for
|
||||
`zplug bhilburn/powerlevel9k, use:powerlevel9k.zsh-theme`.
|
||||
- **prezto:** Open `~/.zpreztorc` and put `zstyle :prezto:module:prompt theme off` in it. Remove
|
||||
any other command that sets `theme` such as `zstyle :prezto:module:prompt theme powerlevel9k`.
|
||||
- **antigen:** Open `~/.zshrc` and remove the line that sets `antigen theme`. It might look like
|
||||
this: `antigen theme powerlevel9k/powerlevel9k`.
|
||||
|
||||
```zsh
|
||||
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
|
||||
echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc
|
||||
```
|
||||
|
||||
Second: Install Powerlevel10k manually 👉
|
||||
|
||||
This method of installation won't make anything slower or otherwise sub-par.
|
||||
|
||||
## Directory is difficult to see in prompt when using Rainbow style
|
||||
|
||||
In Rainbow style the current working directory is shown with bright white text on blue background.
|
||||
The white is fixed and always looks the same but the appearance of "blue" is defined by your
|
||||
terminal color palette. If it's very light, it may be difficult to see white text on it.
|
||||
|
||||
There are several ways to fix this.
|
||||
|
||||
- Type `p10k configure` and choose a more readable prompt style.
|
||||
- [Change terminal color palette](#change-the-color-palette-used-by-your-terminal). Try Tango Dark
|
||||
or Solarized Dark, or change just the "blue" color.
|
||||
- [Change directory background and/or foreground color](#set-colors-through-powerlevel10k-configuration-parameters).
|
||||
The parameters you are looking for are called `POWERLEVEL9K_DIR_BACKGROUND`,
|
||||
`POWERLEVEL9K_DIR_FOREGROUND`, `POWERLEVEL9K_DIR_SHORTENED_FOREGROUND`,
|
||||
`POWERLEVEL9K_DIR_ANCHOR_FOREGROUND` and `POWERLEVEL9K_DIR_ANCHOR_BOLD`. You can find them in
|
||||
in `~/.p10k.zsh`.
|
||||
|
||||
## Horrific mess when resizing terminal window
|
||||
|
||||
When you resize terminal window horizontally back and forth a few times, you might see this ugly
|
||||
picture.
|
||||
|
||||

|
||||
|
||||
tl;dr: This is a bug in Zsh that isn't specific to Powerlevel10k. See [mitigation](#mitigation).
|
||||
|
||||
### Zsh bug
|
||||
|
||||
This issue is caused by a bug in Zsh that gets triggered when the vertical distance between the
|
||||
start of the current prompt and the cursor (henceforth `VD`) changes when the terminal window is
|
||||
resized. This bug is not specific to Powerlevel10k.
|
||||
|
||||
When a terminal window gets shrunk horizontally, there are two ways for a terminal to handle long
|
||||
lines that no longer fit: _reflow_ or _truncate_.
|
||||
|
||||
Terminal content before shrinking:
|
||||
|
||||

|
||||
|
||||
Terminal reflows text when shrinking:
|
||||
|
||||

|
||||
|
||||
Terminal truncates text when shrinking:
|
||||
|
||||

|
||||
|
||||
Reflowing strategy can change the height of terminal content. If such content happens to be between
|
||||
the start of the current prompt and the cursor, Zsh will print prompt on the wrong line. Truncation
|
||||
strategy never changes the height of terminal content, so it doesn't trigger this bug in Zsh.
|
||||
|
||||
Let's see how the bug plays out in slow motion. We'll start by launching `zsh -df` and pasting
|
||||
the following code:
|
||||
|
||||
```zsh
|
||||
function pause() { read -s }
|
||||
functions -M pause 0
|
||||
|
||||
reset
|
||||
print -l {1..3}
|
||||
setopt prompt_subst
|
||||
PROMPT=$'${$((pause()))+}left>${(pl.$((COLUMNS-12))..-.)}<right\n> '
|
||||
```
|
||||
|
||||
When `PROMPT` gets expanded, it calls `pause` to let us observe the state of the terminal. Here's
|
||||
the initial state:
|
||||
|
||||

|
||||
|
||||
Zsh keeps track of the cursor position relative to the start of the current prompt. In this case it
|
||||
knows that the cursor is one line below. When we shrink the terminal window, it looks like this:
|
||||
|
||||

|
||||
|
||||
At this point the terminal sends `SIGWINCH` to Zsh to notify it about changes in the terminal
|
||||
dimensions. Note that this signal is sent _after_ the content of the terminal has been reflown.
|
||||
|
||||
When Zsh receives `SIGWINCH`, it attempts to erase the current prompt and print it anew. It goes to
|
||||
the position where it _thinks_ the current prompt is -- one line above the cursor (!) -- erases all
|
||||
terminal content that follows and prints reexpanded prompt there. However, after resizing prompt is
|
||||
no longer one line above the cursor. It's two lines above! Zsh ends up printing new prompt one line
|
||||
too low.
|
||||
|
||||

|
||||
|
||||
In this case we ended up with unwanted junk content because `VD` has _increased_. When you make
|
||||
terminal window wider, `VD` can also _decrease_, which would result in the new prompt being printed
|
||||
higher than intended, potentially erasing useful content in the process.
|
||||
|
||||
Here are a few more examples where shrinking terminal window increased `VD`.
|
||||
|
||||
Simple one-line left prompt with right prompt. No `prompt_subst`. Note that the cursor is below the
|
||||
prompt line (hit _ESC-ENTER_ to get it there).
|
||||
|
||||

|
||||
|
||||
Simple one-line left prompt. No `prompt_subst`, no right prompt. Here `VD` is bound to increase
|
||||
upon terminal shrinking due to the command line wrapping around.
|
||||
|
||||

|
||||
|
||||
### Zsh patch
|
||||
|
||||
The bug described above has been partially fixed (only for some terminals) in [this branch](https://github.com/romkatv/zsh/tree/fix-winchanged). The idea behind the fix is to use `sc` (save
|
||||
cursor) terminal capability before printing prompt and `rc` (restore cursor) to move cursor back
|
||||
to the original position when prompt needs to be refreshed.
|
||||
|
||||
The patch works only on terminals that reflow saved cursor position together with text when the
|
||||
terminal window is resized. The patch has no observable effect on terminals that don't reflow text
|
||||
on resize (both patched and unpatched Zsh behave correctly) and on terminals that reflow text but
|
||||
not saved cursor position (both patched and unpatched Zsh redraw prompt at the same incorrect
|
||||
position). In other words, the patch fixes the resizing issue on some terminals while keeping the
|
||||
behavior unchanged on others.
|
||||
|
||||
There are two alternative approaches to fixing the bug that may seem to work at first glance but in
|
||||
fact don't:
|
||||
|
||||
- Instead of `sc`, use `u7` terminal capability to query the current cursor position and then `cup`
|
||||
to go back to it. This doesn't work because the absolute position of the start of the current
|
||||
prompt changes when text gets reflown.
|
||||
- Recompute `VD` based on new terminal dimensions before attempting to refresh prompt. This doesn't
|
||||
work because Zsh doesn't know whether terminal reflows text or truncates it. If Zsh could somehow
|
||||
know that the terminal reflows text, this approach still wouldn't work on terminals that
|
||||
continuously reflow text and rapid-fire `SIGWINCH` when the window is being resized. In such
|
||||
environment real terminal dimensions go out of sync with what Zsh thinks the dimensions are.
|
||||
|
||||
There is no ETA for the patch making its way into upstream Zsh. See [discussion](https://www.zsh.org/mla/workers//2019/msg00561.html).
|
||||
|
||||
### Mitigation
|
||||
|
||||
There are a few mitigation options for this issue.
|
||||
|
||||
- Apply [the patch](#zsh-patch) and [rebuild Zsh from source](https://github.com/zsh-users/zsh/blob/master/INSTALL). It won't help if you are using Alacritty,
|
||||
Kitty or some other terminal that reflows text on resize but doesn't reflow saved cursor position.
|
||||
On such terminals the patch will have no visible effect.
|
||||
- Disable text reflowing on window resize in terminal settings. If your terminal doesn't have this
|
||||
setting, try a different terminal.
|
||||
- Avoid long lines between the start of prompt and cursor.
|
||||
1. Disable ruler with `POWERLEVEL9K_SHOW_RULER=false`.
|
||||
2. Disable prompt connection with `POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' '`.
|
||||
3. Disable right frame with `POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX=''`,
|
||||
`POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX=''` and
|
||||
`POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX=''`.
|
||||
4. Set `POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=()`. Right prompt on the last prompt line will cause
|
||||
resizing issues only when the cursor is below it. This isn't very common, so you might want to
|
||||
keep some elements in `POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS` provided that none of them are
|
||||
succeeded by `newline`.
|
||||
|
||||
## Icons cut off in Konsole
|
||||
|
||||
When using Konsole with a non-monospace font, icons may be cut off on the right side. Here
|
||||
"non-monospace" refers to any font with glyphs wider than a single column, or wider than two columns
|
||||
for glyphs designated as "wide" in the Unicode standard.
|
||||
|
||||

|
||||
|
||||
The last line on the screenshot shows a cut off Arch Linux logo.
|
||||
|
||||
There are several mitigation options for this issue.
|
||||
|
||||
```zsh
|
||||
typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='${P9K_CONTENT} ' # extra space at the end
|
||||
```
|
||||
|
||||
```zsh
|
||||
typeset -g POWERLEVEL9K_LINUX_ARCH_ICON='Arch' # plain "Arch" in place of a logo
|
||||
```
|
||||
1. Use a different terminal. Konsole is the only terminal that exhibits this behavior.
|
||||
2. Use a monospace font.
|
||||
3. Manually add an extra space after the icon that gets cut off. For example, if the content of
|
||||
`os_icon` prompt segment gets cut off, open `~/.p10k.zsh`, search for
|
||||
`POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION` and change it as follows 👉:
|
||||
4. Use a different icon that is monospace. For example, if Arch Linux logo gets cut off, add
|
||||
the following parameter to `~/.p10k.zsh` 👉:
|
||||
5. Disable the display of the icon that gets cut off. For example, if the content of
|
||||
`os_icon` prompt segment gets cut off, open `~/.p10k.zsh` and remove `os_icon` from
|
||||
`POWERLEVEL9K_LEFT_PROMPT_ELEMENTS` and `POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS`.
|
||||
|
||||
_Note_: [Non-monospace fonts are not officially supported by Konsole](https://bugs.kde.org/show_bug.cgi?id=418553#c5).
|
||||
|
||||
## Arch Linux logo has a dot in the bottom right corner
|
||||
|
||||

|
||||
|
||||
Some fonts have this incorrect dotted icon in bold typeface. There are two ways to fix this issue.
|
||||
|
||||
```zsh
|
||||
typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='${P9K_CONTENT}' # not bold
|
||||
```
|
||||
|
||||
1. Use a font with a correct Arch Linux logo in bold typeface. For example,
|
||||
[the recommended Powerlevel10k font](#recommended-font-meslo-nerd-font-patched-for-powerlevel10k).
|
||||
2. Display the icon in regular (non-bold) typeface. To do this, open `~/.p10k.zsh`, search for
|
||||
`POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION` and remove `%B` from its value.
|
||||
19
docs/source/includes/try_docker.md
Normal file
19
docs/source/includes/try_docker.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Try it in Docker
|
||||
|
||||
```zsh
|
||||
docker run -e TERM -e COLORTERM -it --rm alpine sh -uec '
|
||||
apk update
|
||||
apk add git zsh nano vim
|
||||
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
|
||||
echo "source ~/powerlevel10k/powerlevel10k.zsh-theme" >>~/.zshrc
|
||||
cd ~/powerlevel10k
|
||||
exec zsh'
|
||||
```
|
||||
|
||||
Try Powerlevel10k in Docker. You can safely make any changes to the file system while trying out
|
||||
the theme. Once you exit Zsh, the image is deleted.
|
||||
|
||||
_Tip_: Install [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k) before
|
||||
running the Docker command to get access to all prompt styles.
|
||||
|
||||
_Tip_: Run `p10k configure` while in Docker to try a different prompt style.
|
||||
31
docs/source/index.html.md
Normal file
31
docs/source/index.html.md
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
---
|
||||
title: Powerlevel10k Documentation
|
||||
|
||||
toc_footers:
|
||||
- <a href='https://gitter.im/powerlevel10k/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge'><img src='https://badges.gitter.im/powerlevel10k/community.svg' /></a>
|
||||
- <a href='https://github.com/slatedocs/slate'>Documentation Powered by Slate</a>
|
||||
|
||||
includes:
|
||||
- installation
|
||||
- configuration
|
||||
- try_docker
|
||||
- features
|
||||
- font
|
||||
- faq
|
||||
- troubleshooting
|
||||
|
||||
search: true
|
||||
|
||||
code_clipboard: true
|
||||
---
|
||||
|
||||
# Introduction
|
||||
|
||||
Powerlevel10k is a theme for Zsh. It emphasizes [speed](#uncomprising-performance),
|
||||
[flexibility](#extremely-customizable) and [out-of-the-box experience](#configuration-wizard).
|
||||
|
||||

|
||||
|
||||
You can't find what you were looking for?
|
||||
Then reach out our [](
|
||||
https://gitter.im/powerlevel10k/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge).
|
||||
2
docs/source/javascripts/all.js
Normal file
2
docs/source/javascripts/all.js
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
//= require ./all_nosearch
|
||||
//= require ./app/_search
|
||||
27
docs/source/javascripts/all_nosearch.js
Normal file
27
docs/source/javascripts/all_nosearch.js
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
//= require ./lib/_energize
|
||||
//= require ./app/_copy
|
||||
//= require ./app/_toc
|
||||
//= require ./app/_lang
|
||||
|
||||
function adjustLanguageSelectorWidth() {
|
||||
const elem = $('.dark-box > .lang-selector');
|
||||
elem.width(elem.parent().width());
|
||||
}
|
||||
|
||||
$(function() {
|
||||
loadToc($('#toc'), '.toc-link', '.toc-list-h2', 10);
|
||||
setupLanguages($('body').data('languages'));
|
||||
$('.content').imagesLoaded( function() {
|
||||
window.recacheHeights();
|
||||
window.refreshToc();
|
||||
});
|
||||
|
||||
$(window).resize(function() {
|
||||
adjustLanguageSelectorWidth();
|
||||
});
|
||||
adjustLanguageSelectorWidth();
|
||||
});
|
||||
|
||||
window.onpopstate = function() {
|
||||
activateLanguage(getLanguageFromQueryString());
|
||||
};
|
||||
15
docs/source/javascripts/app/_copy.js
Normal file
15
docs/source/javascripts/app/_copy.js
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
function copyToClipboard(container) {
|
||||
const el = document.createElement('textarea');
|
||||
el.value = container.textContent.replace(/\n$/, '');
|
||||
document.body.appendChild(el);
|
||||
el.select();
|
||||
document.execCommand('copy');
|
||||
document.body.removeChild(el);
|
||||
}
|
||||
|
||||
function setupCodeCopy() {
|
||||
$('pre.highlight').prepend('<div class="copy-clipboard"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>Copy to Clipboard</title><path d="M18 6v-6h-18v18h6v6h18v-18h-6zm-12 10h-4v-14h14v4h-10v10zm16 6h-14v-14h14v14z"></path></svg></div>');
|
||||
$('.copy-clipboard').on('click', function() {
|
||||
copyToClipboard(this.parentNode.children[1]);
|
||||
});
|
||||
}
|
||||
164
docs/source/javascripts/app/_lang.js
Normal file
164
docs/source/javascripts/app/_lang.js
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
//= require ../lib/_jquery
|
||||
|
||||
/*
|
||||
Copyright 2008-2013 Concur Technologies, Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
;(function () {
|
||||
'use strict';
|
||||
|
||||
var languages = [];
|
||||
|
||||
window.setupLanguages = setupLanguages;
|
||||
window.activateLanguage = activateLanguage;
|
||||
window.getLanguageFromQueryString = getLanguageFromQueryString;
|
||||
|
||||
function activateLanguage(language) {
|
||||
if (!language) return;
|
||||
if (language === "") return;
|
||||
|
||||
$(".lang-selector a").removeClass('active');
|
||||
$(".lang-selector a[data-language-name='" + language + "']").addClass('active');
|
||||
for (var i=0; i < languages.length; i++) {
|
||||
$(".highlight.tab-" + languages[i]).hide();
|
||||
$(".lang-specific." + languages[i]).hide();
|
||||
}
|
||||
$(".highlight.tab-" + language).show();
|
||||
$(".lang-specific." + language).show();
|
||||
|
||||
window.recacheHeights();
|
||||
|
||||
// scroll to the new location of the position
|
||||
if ($(window.location.hash).get(0)) {
|
||||
$(window.location.hash).get(0).scrollIntoView(true);
|
||||
}
|
||||
}
|
||||
|
||||
// parseURL and stringifyURL are from https://github.com/sindresorhus/query-string
|
||||
// MIT licensed
|
||||
// https://github.com/sindresorhus/query-string/blob/7bee64c16f2da1a326579e96977b9227bf6da9e6/license
|
||||
function parseURL(str) {
|
||||
if (typeof str !== 'string') {
|
||||
return {};
|
||||
}
|
||||
|
||||
str = str.trim().replace(/^(\?|#|&)/, '');
|
||||
|
||||
if (!str) {
|
||||
return {};
|
||||
}
|
||||
|
||||
return str.split('&').reduce(function (ret, param) {
|
||||
var parts = param.replace(/\+/g, ' ').split('=');
|
||||
var key = parts[0];
|
||||
var val = parts[1];
|
||||
|
||||
key = decodeURIComponent(key);
|
||||
// missing `=` should be `null`:
|
||||
// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters
|
||||
val = val === undefined ? null : decodeURIComponent(val);
|
||||
|
||||
if (!ret.hasOwnProperty(key)) {
|
||||
ret[key] = val;
|
||||
} else if (Array.isArray(ret[key])) {
|
||||
ret[key].push(val);
|
||||
} else {
|
||||
ret[key] = [ret[key], val];
|
||||
}
|
||||
|
||||
return ret;
|
||||
}, {});
|
||||
};
|
||||
|
||||
function stringifyURL(obj) {
|
||||
return obj ? Object.keys(obj).sort().map(function (key) {
|
||||
var val = obj[key];
|
||||
|
||||
if (Array.isArray(val)) {
|
||||
return val.sort().map(function (val2) {
|
||||
return encodeURIComponent(key) + '=' + encodeURIComponent(val2);
|
||||
}).join('&');
|
||||
}
|
||||
|
||||
return encodeURIComponent(key) + '=' + encodeURIComponent(val);
|
||||
}).join('&') : '';
|
||||
};
|
||||
|
||||
// gets the language set in the query string
|
||||
function getLanguageFromQueryString() {
|
||||
if (location.search.length >= 1) {
|
||||
var language = parseURL(location.search).language;
|
||||
if (language) {
|
||||
return language;
|
||||
} else if (jQuery.inArray(location.search.substr(1), languages) != -1) {
|
||||
return location.search.substr(1);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// returns a new query string with the new language in it
|
||||
function generateNewQueryString(language) {
|
||||
var url = parseURL(location.search);
|
||||
if (url.language) {
|
||||
url.language = language;
|
||||
return stringifyURL(url);
|
||||
}
|
||||
return language;
|
||||
}
|
||||
|
||||
// if a button is clicked, add the state to the history
|
||||
function pushURL(language) {
|
||||
if (!history) { return; }
|
||||
var hash = window.location.hash;
|
||||
if (hash) {
|
||||
hash = hash.replace(/^#+/, '');
|
||||
}
|
||||
history.pushState({}, '', '?' + generateNewQueryString(language) + '#' + hash);
|
||||
|
||||
// save language as next default
|
||||
localStorage.setItem("language", language);
|
||||
}
|
||||
|
||||
function setupLanguages(l) {
|
||||
var defaultLanguage = localStorage.getItem("language");
|
||||
|
||||
languages = l;
|
||||
|
||||
var presetLanguage = getLanguageFromQueryString();
|
||||
if (presetLanguage) {
|
||||
// the language is in the URL, so use that language!
|
||||
activateLanguage(presetLanguage);
|
||||
|
||||
localStorage.setItem("language", presetLanguage);
|
||||
} else if ((defaultLanguage !== null) && (jQuery.inArray(defaultLanguage, languages) != -1)) {
|
||||
// the language was the last selected one saved in localstorage, so use that language!
|
||||
activateLanguage(defaultLanguage);
|
||||
} else {
|
||||
// no language selected, so use the default
|
||||
activateLanguage(languages[0]);
|
||||
}
|
||||
}
|
||||
|
||||
// if we click on a language tab, activate that language
|
||||
$(function() {
|
||||
$(".lang-selector a").on("click", function() {
|
||||
var language = $(this).data("language-name");
|
||||
pushURL(language);
|
||||
activateLanguage(language);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
})();
|
||||
102
docs/source/javascripts/app/_search.js
Normal file
102
docs/source/javascripts/app/_search.js
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
//= require ../lib/_lunr
|
||||
//= require ../lib/_jquery
|
||||
//= require ../lib/_jquery.highlight
|
||||
;(function () {
|
||||
'use strict';
|
||||
|
||||
var content, searchResults;
|
||||
var highlightOpts = { element: 'span', className: 'search-highlight' };
|
||||
var searchDelay = 0;
|
||||
var timeoutHandle = 0;
|
||||
var index;
|
||||
|
||||
function populate() {
|
||||
index = lunr(function(){
|
||||
|
||||
this.ref('id');
|
||||
this.field('title', { boost: 10 });
|
||||
this.field('body');
|
||||
this.pipeline.add(lunr.trimmer, lunr.stopWordFilter);
|
||||
var lunrConfig = this;
|
||||
|
||||
$('h1, h2').each(function() {
|
||||
var title = $(this);
|
||||
var body = title.nextUntil('h1, h2');
|
||||
lunrConfig.add({
|
||||
id: title.prop('id'),
|
||||
title: title.text(),
|
||||
body: body.text()
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
determineSearchDelay();
|
||||
}
|
||||
|
||||
$(populate);
|
||||
$(bind);
|
||||
|
||||
function determineSearchDelay() {
|
||||
if (index.tokenSet.toArray().length>5000) {
|
||||
searchDelay = 300;
|
||||
}
|
||||
}
|
||||
|
||||
function bind() {
|
||||
content = $('.content');
|
||||
searchResults = $('.search-results');
|
||||
|
||||
$('#input-search').on('keyup',function(e) {
|
||||
var wait = function() {
|
||||
return function(executingFunction, waitTime){
|
||||
clearTimeout(timeoutHandle);
|
||||
timeoutHandle = setTimeout(executingFunction, waitTime);
|
||||
};
|
||||
}();
|
||||
wait(function(){
|
||||
search(e);
|
||||
}, searchDelay);
|
||||
});
|
||||
}
|
||||
|
||||
function search(event) {
|
||||
|
||||
var searchInput = $('#input-search')[0];
|
||||
|
||||
unhighlight();
|
||||
searchResults.addClass('visible');
|
||||
|
||||
// ESC clears the field
|
||||
if (event.keyCode === 27) searchInput.value = '';
|
||||
|
||||
if (searchInput.value) {
|
||||
var results = index.search(searchInput.value).filter(function(r) {
|
||||
return r.score > 0.0001;
|
||||
});
|
||||
|
||||
if (results.length) {
|
||||
searchResults.empty();
|
||||
$.each(results, function (index, result) {
|
||||
var elem = document.getElementById(result.ref);
|
||||
searchResults.append("<li><a href='#" + result.ref + "'>" + $(elem).text() + "</a></li>");
|
||||
});
|
||||
highlight.call(searchInput);
|
||||
} else {
|
||||
searchResults.html('<li></li>');
|
||||
$('.search-results li').text('No Results Found for "' + searchInput.value + '"');
|
||||
}
|
||||
} else {
|
||||
unhighlight();
|
||||
searchResults.removeClass('visible');
|
||||
}
|
||||
}
|
||||
|
||||
function highlight() {
|
||||
if (this.value) content.highlight(this.value, highlightOpts);
|
||||
}
|
||||
|
||||
function unhighlight() {
|
||||
content.unhighlight(highlightOpts);
|
||||
}
|
||||
})();
|
||||
|
||||
122
docs/source/javascripts/app/_toc.js
Normal file
122
docs/source/javascripts/app/_toc.js
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
//= require ../lib/_jquery
|
||||
//= require ../lib/_imagesloaded.min
|
||||
;(function () {
|
||||
'use strict';
|
||||
|
||||
var htmlPattern = /<[^>]*>/g;
|
||||
var loaded = false;
|
||||
|
||||
var debounce = function(func, waitTime) {
|
||||
var timeout = false;
|
||||
return function() {
|
||||
if (timeout === false) {
|
||||
setTimeout(function() {
|
||||
func();
|
||||
timeout = false;
|
||||
}, waitTime);
|
||||
timeout = true;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
var closeToc = function() {
|
||||
$(".toc-wrapper").removeClass('open');
|
||||
$("#nav-button").removeClass('open');
|
||||
};
|
||||
|
||||
function loadToc($toc, tocLinkSelector, tocListSelector, scrollOffset) {
|
||||
var headerHeights = {};
|
||||
var pageHeight = 0;
|
||||
var windowHeight = 0;
|
||||
var originalTitle = document.title;
|
||||
|
||||
var recacheHeights = function() {
|
||||
headerHeights = {};
|
||||
pageHeight = $(document).height();
|
||||
windowHeight = $(window).height();
|
||||
|
||||
$toc.find(tocLinkSelector).each(function() {
|
||||
var targetId = $(this).attr('href');
|
||||
if (targetId[0] === "#") {
|
||||
headerHeights[targetId] = $("#" + $.escapeSelector(targetId.substring(1))).offset().top;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
var refreshToc = function() {
|
||||
var currentTop = $(document).scrollTop() + scrollOffset;
|
||||
|
||||
if (currentTop + windowHeight >= pageHeight) {
|
||||
// at bottom of page, so just select last header by making currentTop very large
|
||||
// this fixes the problem where the last header won't ever show as active if its content
|
||||
// is shorter than the window height
|
||||
currentTop = pageHeight + 1000;
|
||||
}
|
||||
|
||||
var best = null;
|
||||
for (var name in headerHeights) {
|
||||
if ((headerHeights[name] < currentTop && headerHeights[name] > headerHeights[best]) || best === null) {
|
||||
best = name;
|
||||
}
|
||||
}
|
||||
|
||||
// Catch the initial load case
|
||||
if (currentTop == scrollOffset && !loaded) {
|
||||
best = window.location.hash;
|
||||
loaded = true;
|
||||
}
|
||||
|
||||
var $best = $toc.find("[href='" + best + "']").first();
|
||||
if (!$best.hasClass("active")) {
|
||||
// .active is applied to the ToC link we're currently on, and its parent <ul>s selected by tocListSelector
|
||||
// .active-expanded is applied to the ToC links that are parents of this one
|
||||
$toc.find(".active").removeClass("active");
|
||||
$toc.find(".active-parent").removeClass("active-parent");
|
||||
$best.addClass("active");
|
||||
$best.parents(tocListSelector).addClass("active").siblings(tocLinkSelector).addClass('active-parent');
|
||||
$best.siblings(tocListSelector).addClass("active");
|
||||
$toc.find(tocListSelector).filter(":not(.active)").slideUp(150);
|
||||
$toc.find(tocListSelector).filter(".active").slideDown(150);
|
||||
if (window.history.replaceState) {
|
||||
window.history.replaceState(null, "", best);
|
||||
}
|
||||
var thisTitle = $best.data("title");
|
||||
if (thisTitle !== undefined && thisTitle.length > 0) {
|
||||
document.title = thisTitle.replace(htmlPattern, "") + " – " + originalTitle;
|
||||
} else {
|
||||
document.title = originalTitle;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var makeToc = function() {
|
||||
recacheHeights();
|
||||
refreshToc();
|
||||
|
||||
$("#nav-button").click(function() {
|
||||
$(".toc-wrapper").toggleClass('open');
|
||||
$("#nav-button").toggleClass('open');
|
||||
return false;
|
||||
});
|
||||
$(".page-wrapper").click(closeToc);
|
||||
$(".toc-link").click(closeToc);
|
||||
|
||||
// reload immediately after scrolling on toc click
|
||||
$toc.find(tocLinkSelector).click(function() {
|
||||
setTimeout(function() {
|
||||
refreshToc();
|
||||
}, 0);
|
||||
});
|
||||
|
||||
$(window).scroll(debounce(refreshToc, 200));
|
||||
$(window).resize(debounce(recacheHeights, 200));
|
||||
};
|
||||
|
||||
makeToc();
|
||||
|
||||
window.recacheHeights = recacheHeights;
|
||||
window.refreshToc = refreshToc;
|
||||
}
|
||||
|
||||
window.loadToc = loadToc;
|
||||
})();
|
||||
169
docs/source/javascripts/lib/_energize.js
vendored
Normal file
169
docs/source/javascripts/lib/_energize.js
vendored
Normal file
|
|
@ -0,0 +1,169 @@
|
|||
/**
|
||||
* energize.js v0.1.0
|
||||
*
|
||||
* Speeds up click events on mobile devices.
|
||||
* https://github.com/davidcalhoun/energize.js
|
||||
*/
|
||||
|
||||
(function() { // Sandbox
|
||||
/**
|
||||
* Don't add to non-touch devices, which don't need to be sped up
|
||||
*/
|
||||
if(!('ontouchstart' in window)) return;
|
||||
|
||||
var lastClick = {},
|
||||
isThresholdReached, touchstart, touchmove, touchend,
|
||||
click, closest;
|
||||
|
||||
/**
|
||||
* isThresholdReached
|
||||
*
|
||||
* Compare touchstart with touchend xy coordinates,
|
||||
* and only fire simulated click event if the coordinates
|
||||
* are nearby. (don't want clicking to be confused with a swipe)
|
||||
*/
|
||||
isThresholdReached = function(startXY, xy) {
|
||||
return Math.abs(startXY[0] - xy[0]) > 5 || Math.abs(startXY[1] - xy[1]) > 5;
|
||||
};
|
||||
|
||||
/**
|
||||
* touchstart
|
||||
*
|
||||
* Save xy coordinates when the user starts touching the screen
|
||||
*/
|
||||
touchstart = function(e) {
|
||||
this.startXY = [e.touches[0].clientX, e.touches[0].clientY];
|
||||
this.threshold = false;
|
||||
};
|
||||
|
||||
/**
|
||||
* touchmove
|
||||
*
|
||||
* Check if the user is scrolling past the threshold.
|
||||
* Have to check here because touchend will not always fire
|
||||
* on some tested devices (Kindle Fire?)
|
||||
*/
|
||||
touchmove = function(e) {
|
||||
// NOOP if the threshold has already been reached
|
||||
if(this.threshold) return false;
|
||||
|
||||
this.threshold = isThresholdReached(this.startXY, [e.touches[0].clientX, e.touches[0].clientY]);
|
||||
};
|
||||
|
||||
/**
|
||||
* touchend
|
||||
*
|
||||
* If the user didn't scroll past the threshold between
|
||||
* touchstart and touchend, fire a simulated click.
|
||||
*
|
||||
* (This will fire before a native click)
|
||||
*/
|
||||
touchend = function(e) {
|
||||
// Don't fire a click if the user scrolled past the threshold
|
||||
if(this.threshold || isThresholdReached(this.startXY, [e.changedTouches[0].clientX, e.changedTouches[0].clientY])) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create and fire a click event on the target element
|
||||
* https://developer.mozilla.org/en/DOM/event.initMouseEvent
|
||||
*/
|
||||
var touch = e.changedTouches[0],
|
||||
evt = document.createEvent('MouseEvents');
|
||||
evt.initMouseEvent('click', true, true, window, 0, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);
|
||||
evt.simulated = true; // distinguish from a normal (nonsimulated) click
|
||||
e.target.dispatchEvent(evt);
|
||||
};
|
||||
|
||||
/**
|
||||
* click
|
||||
*
|
||||
* Because we've already fired a click event in touchend,
|
||||
* we need to listed for all native click events here
|
||||
* and suppress them as necessary.
|
||||
*/
|
||||
click = function(e) {
|
||||
/**
|
||||
* Prevent ghost clicks by only allowing clicks we created
|
||||
* in the click event we fired (look for e.simulated)
|
||||
*/
|
||||
var time = Date.now(),
|
||||
timeDiff = time - lastClick.time,
|
||||
x = e.clientX,
|
||||
y = e.clientY,
|
||||
xyDiff = [Math.abs(lastClick.x - x), Math.abs(lastClick.y - y)],
|
||||
target = closest(e.target, 'A') || e.target, // needed for standalone apps
|
||||
nodeName = target.nodeName,
|
||||
isLink = nodeName === 'A',
|
||||
standAlone = window.navigator.standalone && isLink && e.target.getAttribute("href");
|
||||
|
||||
lastClick.time = time;
|
||||
lastClick.x = x;
|
||||
lastClick.y = y;
|
||||
|
||||
/**
|
||||
* Unfortunately Android sometimes fires click events without touch events (seen on Kindle Fire),
|
||||
* so we have to add more logic to determine the time of the last click. Not perfect...
|
||||
*
|
||||
* Older, simpler check: if((!e.simulated) || standAlone)
|
||||
*/
|
||||
if((!e.simulated && (timeDiff < 500 || (timeDiff < 1500 && xyDiff[0] < 50 && xyDiff[1] < 50))) || standAlone) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
if(!standAlone) return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Special logic for standalone web apps
|
||||
* See http://stackoverflow.com/questions/2898740/iphone-safari-web-app-opens-links-in-new-window
|
||||
*/
|
||||
if(standAlone) {
|
||||
window.location = target.getAttribute("href");
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an energize-focus class to the targeted link (mimics :focus behavior)
|
||||
* TODO: test and/or remove? Does this work?
|
||||
*/
|
||||
if(!target || !target.classList) return;
|
||||
target.classList.add("energize-focus");
|
||||
window.setTimeout(function(){
|
||||
target.classList.remove("energize-focus");
|
||||
}, 150);
|
||||
};
|
||||
|
||||
/**
|
||||
* closest
|
||||
* @param {HTMLElement} node current node to start searching from.
|
||||
* @param {string} tagName the (uppercase) name of the tag you're looking for.
|
||||
*
|
||||
* Find the closest ancestor tag of a given node.
|
||||
*
|
||||
* Starts at node and goes up the DOM tree looking for a
|
||||
* matching nodeName, continuing until hitting document.body
|
||||
*/
|
||||
closest = function(node, tagName){
|
||||
var curNode = node;
|
||||
|
||||
while(curNode !== document.body) { // go up the dom until we find the tag we're after
|
||||
if(!curNode || curNode.nodeName === tagName) { return curNode; } // found
|
||||
curNode = curNode.parentNode; // not found, so keep going up
|
||||
}
|
||||
|
||||
return null; // not found
|
||||
};
|
||||
|
||||
/**
|
||||
* Add all delegated event listeners
|
||||
*
|
||||
* All the events we care about bubble up to document,
|
||||
* so we can take advantage of event delegation.
|
||||
*
|
||||
* Note: no need to wait for DOMContentLoaded here
|
||||
*/
|
||||
document.addEventListener('touchstart', touchstart, false);
|
||||
document.addEventListener('touchmove', touchmove, false);
|
||||
document.addEventListener('touchend', touchend, false);
|
||||
document.addEventListener('click', click, true); // TODO: why does this use capture?
|
||||
|
||||
})();
|
||||
7
docs/source/javascripts/lib/_imagesloaded.min.js
vendored
Normal file
7
docs/source/javascripts/lib/_imagesloaded.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
108
docs/source/javascripts/lib/_jquery.highlight.js
vendored
Normal file
108
docs/source/javascripts/lib/_jquery.highlight.js
vendored
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
/*
|
||||
* jQuery Highlight plugin
|
||||
*
|
||||
* Based on highlight v3 by Johann Burkard
|
||||
* http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html
|
||||
*
|
||||
* Code a little bit refactored and cleaned (in my humble opinion).
|
||||
* Most important changes:
|
||||
* - has an option to highlight only entire words (wordsOnly - false by default),
|
||||
* - has an option to be case sensitive (caseSensitive - false by default)
|
||||
* - highlight element tag and class names can be specified in options
|
||||
*
|
||||
* Usage:
|
||||
* // wrap every occurrance of text 'lorem' in content
|
||||
* // with <span class='highlight'> (default options)
|
||||
* $('#content').highlight('lorem');
|
||||
*
|
||||
* // search for and highlight more terms at once
|
||||
* // so you can save some time on traversing DOM
|
||||
* $('#content').highlight(['lorem', 'ipsum']);
|
||||
* $('#content').highlight('lorem ipsum');
|
||||
*
|
||||
* // search only for entire word 'lorem'
|
||||
* $('#content').highlight('lorem', { wordsOnly: true });
|
||||
*
|
||||
* // don't ignore case during search of term 'lorem'
|
||||
* $('#content').highlight('lorem', { caseSensitive: true });
|
||||
*
|
||||
* // wrap every occurrance of term 'ipsum' in content
|
||||
* // with <em class='important'>
|
||||
* $('#content').highlight('ipsum', { element: 'em', className: 'important' });
|
||||
*
|
||||
* // remove default highlight
|
||||
* $('#content').unhighlight();
|
||||
*
|
||||
* // remove custom highlight
|
||||
* $('#content').unhighlight({ element: 'em', className: 'important' });
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2009 Bartek Szopka
|
||||
*
|
||||
* Licensed under MIT license.
|
||||
*
|
||||
*/
|
||||
|
||||
jQuery.extend({
|
||||
highlight: function (node, re, nodeName, className) {
|
||||
if (node.nodeType === 3) {
|
||||
var match = node.data.match(re);
|
||||
if (match) {
|
||||
var highlight = document.createElement(nodeName || 'span');
|
||||
highlight.className = className || 'highlight';
|
||||
var wordNode = node.splitText(match.index);
|
||||
wordNode.splitText(match[0].length);
|
||||
var wordClone = wordNode.cloneNode(true);
|
||||
highlight.appendChild(wordClone);
|
||||
wordNode.parentNode.replaceChild(highlight, wordNode);
|
||||
return 1; //skip added node in parent
|
||||
}
|
||||
} else if ((node.nodeType === 1 && node.childNodes) && // only element nodes that have children
|
||||
!/(script|style)/i.test(node.tagName) && // ignore script and style nodes
|
||||
!(node.tagName === nodeName.toUpperCase() && node.className === className)) { // skip if already highlighted
|
||||
for (var i = 0; i < node.childNodes.length; i++) {
|
||||
i += jQuery.highlight(node.childNodes[i], re, nodeName, className);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
|
||||
jQuery.fn.unhighlight = function (options) {
|
||||
var settings = { className: 'highlight', element: 'span' };
|
||||
jQuery.extend(settings, options);
|
||||
|
||||
return this.find(settings.element + "." + settings.className).each(function () {
|
||||
var parent = this.parentNode;
|
||||
parent.replaceChild(this.firstChild, this);
|
||||
parent.normalize();
|
||||
}).end();
|
||||
};
|
||||
|
||||
jQuery.fn.highlight = function (words, options) {
|
||||
var settings = { className: 'highlight', element: 'span', caseSensitive: false, wordsOnly: false };
|
||||
jQuery.extend(settings, options);
|
||||
|
||||
if (words.constructor === String) {
|
||||
words = [words];
|
||||
}
|
||||
words = jQuery.grep(words, function(word, i){
|
||||
return word != '';
|
||||
});
|
||||
words = jQuery.map(words, function(word, i) {
|
||||
return word.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
|
||||
});
|
||||
if (words.length == 0) { return this; };
|
||||
|
||||
var flag = settings.caseSensitive ? "" : "i";
|
||||
var pattern = "(" + words.join("|") + ")";
|
||||
if (settings.wordsOnly) {
|
||||
pattern = "\\b" + pattern + "\\b";
|
||||
}
|
||||
var re = new RegExp(pattern, flag);
|
||||
|
||||
return this.each(function () {
|
||||
jQuery.highlight(this, re, settings.element, settings.className);
|
||||
});
|
||||
};
|
||||
|
||||
10872
docs/source/javascripts/lib/_jquery.js
vendored
Normal file
10872
docs/source/javascripts/lib/_jquery.js
vendored
Normal file
File diff suppressed because it is too large
Load diff
3475
docs/source/javascripts/lib/_lunr.js
vendored
Normal file
3475
docs/source/javascripts/lib/_lunr.js
vendored
Normal file
File diff suppressed because it is too large
Load diff
128
docs/source/layouts/layout.erb
Normal file
128
docs/source/layouts/layout.erb
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
<%#
|
||||
Copyright 2008-2013 Concur Technologies, Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
%>
|
||||
<% language_tabs = current_page.data.language_tabs || [] %>
|
||||
<% page_content = yield %>
|
||||
<%
|
||||
if current_page.data.includes
|
||||
current_page.data.includes.each do |include|
|
||||
page_content += partial("includes/#{include}")
|
||||
end
|
||||
end
|
||||
%>
|
||||
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title><%= current_page.data.title || "API Documentation" %></title>
|
||||
|
||||
<style media="screen">
|
||||
<%= Rouge::Themes::MonokaiSublimeSlate.render(:scope => '.highlight') %>
|
||||
</style>
|
||||
<style media="print">
|
||||
* {
|
||||
transition:none!important;
|
||||
}
|
||||
<%= Rouge::Themes::Base16::Solarized.render(:scope => '.highlight') %>
|
||||
</style>
|
||||
<%= stylesheet_link_tag :screen, media: :screen %>
|
||||
<%= stylesheet_link_tag :print, media: :print %>
|
||||
<% if current_page.data.search %>
|
||||
<%= javascript_include_tag "all" %>
|
||||
<% else %>
|
||||
<%= javascript_include_tag "all_nosearch" %>
|
||||
<% end %>
|
||||
|
||||
<% if current_page.data.code_clipboard %>
|
||||
<script>
|
||||
$(function() { setupCodeCopy(); });
|
||||
</script>
|
||||
<% end %>
|
||||
</head>
|
||||
|
||||
<body class="<%= page_classes %>" data-languages="<%=h language_tabs.map{ |lang| lang.is_a?(Hash) ? lang.keys.first : lang }.to_json %>">
|
||||
<a href="#" id="nav-button">
|
||||
<span>
|
||||
NAV
|
||||
<%= image_tag('navbar.png') %>
|
||||
</span>
|
||||
</a>
|
||||
<div class="toc-wrapper">
|
||||
<%= image_tag "logo.png", class: 'logo' %>
|
||||
<% if language_tabs.any? %>
|
||||
<div class="lang-selector">
|
||||
<% language_tabs.each do |lang| %>
|
||||
<% if lang.is_a? Hash %>
|
||||
<a href="#" data-language-name="<%= lang.keys.first %>"><%= lang.values.first %></a>
|
||||
<% else %>
|
||||
<a href="#" data-language-name="<%= lang %>"><%= lang %></a>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% if current_page.data.search %>
|
||||
<div class="search">
|
||||
<input type="text" class="search" id="input-search" placeholder="Search">
|
||||
</div>
|
||||
<ul class="search-results"></ul>
|
||||
<% end %>
|
||||
<ul id="toc" class="toc-list-h1">
|
||||
<% toc_data(page_content).each do |h1| %>
|
||||
<li>
|
||||
<a href="#<%= h1[:id] %>" class="toc-h1 toc-link" data-title="<%= h1[:title] %>"><%= h1[:content] %></a>
|
||||
<% if h1[:children].length > 0 %>
|
||||
<ul class="toc-list-h2">
|
||||
<% h1[:children].each do |h2| %>
|
||||
<li>
|
||||
<a href="#<%= h2[:id] %>" class="toc-h2 toc-link" data-title="<%= h2[:title] %>"><%= h2[:content] %></a>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<% end %>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<% if current_page.data.toc_footers %>
|
||||
<ul class="toc-footer">
|
||||
<% current_page.data.toc_footers.each do |footer| %>
|
||||
<li><%= footer %></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<%= page_content %>
|
||||
</div>
|
||||
<div class="dark-box">
|
||||
<% if language_tabs.any? %>
|
||||
<div class="lang-selector">
|
||||
<% language_tabs.each do |lang| %>
|
||||
<% if lang.is_a? Hash %>
|
||||
<a href="#" data-language-name="<%= lang.keys.first %>"><%= lang.values.first %></a>
|
||||
<% else %>
|
||||
<a href="#" data-language-name="<%= lang %>"><%= lang %></a>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
45
docs/source/stylesheets/_icon-font.scss
Normal file
45
docs/source/stylesheets/_icon-font.scss
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
@font-face {
|
||||
font-family: 'slate';
|
||||
src:font-url('slate.eot?-syv14m');
|
||||
src:font-url('slate.eot?#iefix-syv14m') format('embedded-opentype'),
|
||||
font-url('slate.woff2?-syv14m') format('woff2'),
|
||||
font-url('slate.woff?-syv14m') format('woff'),
|
||||
font-url('slate.ttf?-syv14m') format('truetype'),
|
||||
font-url('slate.svg?-syv14m#slate') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Meslo";
|
||||
font-style: normal;
|
||||
font-weight: 200;
|
||||
src:font-url('MesloLGS-NF-Regular.woff') format('woff'),
|
||||
}
|
||||
|
||||
%icon {
|
||||
font-family: 'slate';
|
||||
speak: none;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
%icon-exclamation-sign {
|
||||
@extend %icon;
|
||||
content: "\e600";
|
||||
}
|
||||
%icon-info-sign {
|
||||
@extend %icon;
|
||||
content: "\e602";
|
||||
}
|
||||
%icon-ok-sign {
|
||||
@extend %icon;
|
||||
content: "\e606";
|
||||
}
|
||||
%icon-search {
|
||||
@extend %icon;
|
||||
content: "\e607";
|
||||
}
|
||||
427
docs/source/stylesheets/_normalize.scss
Normal file
427
docs/source/stylesheets/_normalize.scss
Normal file
|
|
@ -0,0 +1,427 @@
|
|||
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
|
||||
|
||||
/**
|
||||
* 1. Set default font family to sans-serif.
|
||||
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
||||
* user zoom.
|
||||
*/
|
||||
|
||||
html {
|
||||
font-family: sans-serif; /* 1 */
|
||||
-ms-text-size-adjust: 100%; /* 2 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default margin.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* HTML5 display definitions
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Correct `block` display not defined for any HTML5 element in IE 8/9.
|
||||
* Correct `block` display not defined for `details` or `summary` in IE 10/11
|
||||
* and Firefox.
|
||||
* Correct `block` display not defined for `main` in IE 11.
|
||||
*/
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
main,
|
||||
menu,
|
||||
nav,
|
||||
section,
|
||||
summary {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `inline-block` display not defined in IE 8/9.
|
||||
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
|
||||
*/
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
progress,
|
||||
video {
|
||||
display: inline-block; /* 1 */
|
||||
vertical-align: baseline; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent modern browsers from displaying `audio` without controls.
|
||||
* Remove excess height in iOS 5 devices.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `[hidden]` styling not present in IE 8/9/10.
|
||||
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
|
||||
*/
|
||||
|
||||
[hidden],
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Links
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the gray background color from active links in IE 10.
|
||||
*/
|
||||
|
||||
a {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability when focused and also mouse hovered in all browsers.
|
||||
*/
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* Text-level semantics
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in Safari and Chrome.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address variable `h1` font-size and margin within `section` and `article`
|
||||
* contexts in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9.
|
||||
*/
|
||||
|
||||
mark {
|
||||
background: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent and variable font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
/* Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove border when inside `a` element in IE 8/9/10.
|
||||
*/
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct overflow not hidden in IE 9/10/11.
|
||||
*/
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Grouping content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address margin not present in IE 8/9 and Safari.
|
||||
*/
|
||||
|
||||
figure {
|
||||
margin: 1em 40px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address differences between Firefox and other browsers.
|
||||
*/
|
||||
|
||||
hr {
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Contain overflow in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address odd `em`-unit font size rendering in all browsers.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
/* Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Known limitation: by default, Chrome and Safari on OS X allow very limited
|
||||
* styling of `select`, unless a `border` property is set.
|
||||
*/
|
||||
|
||||
/**
|
||||
* 1. Correct color not being inherited.
|
||||
* Known issue: affects color of disabled elements.
|
||||
* 2. Correct font properties not being inherited.
|
||||
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
optgroup,
|
||||
select,
|
||||
textarea {
|
||||
color: inherit; /* 1 */
|
||||
font: inherit; /* 2 */
|
||||
margin: 0; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `overflow` set to `hidden` in IE 8/9/10/11.
|
||||
*/
|
||||
|
||||
button {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
* All other form control elements do not inherit `text-transform` values.
|
||||
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
|
||||
* Correct `select` style inheritance in Firefox.
|
||||
*/
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
* and `video` controls.
|
||||
* 2. Correct inability to style clickable `input` types in iOS.
|
||||
* 3. Improve usability and consistency of cursor style between image-type
|
||||
* `input` and others.
|
||||
*/
|
||||
|
||||
button,
|
||||
html input[type="button"], /* 1 */
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
-webkit-appearance: button; /* 2 */
|
||||
cursor: pointer; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-set default cursor for disabled elements.
|
||||
*/
|
||||
|
||||
button[disabled],
|
||||
html input[disabled] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and border in Firefox 4+.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||
* the UA stylesheet.
|
||||
*/
|
||||
|
||||
input {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* It's recommended that you don't attempt to style these elements.
|
||||
* Firefox's implementation doesn't respect box-sizing, padding, or width.
|
||||
*
|
||||
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||
* 2. Remove excess padding in IE 8/9/10.
|
||||
*/
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
|
||||
* `font-size` values of the `input`, it causes the cursor style of the
|
||||
* decrement button to change from `default` to `text`.
|
||||
*/
|
||||
|
||||
input[type="number"]::-webkit-inner-spin-button,
|
||||
input[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
|
||||
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
|
||||
* (include `-moz` to future-proof).
|
||||
*/
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
-moz-box-sizing: content-box;
|
||||
-webkit-box-sizing: content-box; /* 2 */
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
|
||||
* Safari (but not Chrome) clips the cancel button when the search input has
|
||||
* padding (and `textfield` appearance).
|
||||
*/
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define consistent border, margin, and padding.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `color` not being inherited in IE 8/9/10/11.
|
||||
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
*/
|
||||
|
||||
legend {
|
||||
border: 0; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default vertical scrollbar in IE 8/9/10/11.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Don't inherit the `font-weight` (applied by a rule above).
|
||||
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
|
||||
*/
|
||||
|
||||
optgroup {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Tables
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove most spacing between table cells.
|
||||
*/
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
td,
|
||||
th {
|
||||
padding: 0;
|
||||
}
|
||||
140
docs/source/stylesheets/_rtl.scss
Normal file
140
docs/source/stylesheets/_rtl.scss
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
// RTL Styles Variables
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
$default: auto;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// TABLE OF CONTENTS
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#toc>ul>li>a>span {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.toc-wrapper {
|
||||
transition: right 0.3s ease-in-out !important;
|
||||
left: $default !important;
|
||||
#{right}: 0;
|
||||
}
|
||||
|
||||
.toc-h2 {
|
||||
padding-#{right}: $nav-padding + $nav-indent;
|
||||
}
|
||||
|
||||
#nav-button {
|
||||
#{right}: 0;
|
||||
transition: right 0.3s ease-in-out;
|
||||
&.open {
|
||||
right: $nav-width
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// PAGE LAYOUT AND CODE SAMPLE BACKGROUND
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
.page-wrapper {
|
||||
margin-#{left}: $default !important;
|
||||
margin-#{right}: $nav-width;
|
||||
.dark-box {
|
||||
#{right}: $default;
|
||||
#{left}: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.lang-selector {
|
||||
width: $default !important;
|
||||
a {
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// CODE SAMPLE STYLES
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
.content {
|
||||
&>h1,
|
||||
&>h2,
|
||||
&>h3,
|
||||
&>h4,
|
||||
&>h5,
|
||||
&>h6,
|
||||
&>p,
|
||||
&>table,
|
||||
&>ul,
|
||||
&>ol,
|
||||
&>aside,
|
||||
&>dl {
|
||||
margin-#{left}: $examples-width;
|
||||
margin-#{right}: $default !important;
|
||||
}
|
||||
&>ul,
|
||||
&>ol {
|
||||
padding-#{right}: $main-padding + 15px;
|
||||
}
|
||||
table {
|
||||
th,
|
||||
td {
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
dd {
|
||||
margin-#{right}: 15px;
|
||||
}
|
||||
aside {
|
||||
aside:before {
|
||||
padding-#{left}: 0.5em;
|
||||
}
|
||||
.search-highlight {
|
||||
background: linear-gradient(to top right, #F7E633 0%, #F1D32F 100%);
|
||||
}
|
||||
}
|
||||
pre,
|
||||
blockquote {
|
||||
float: left !important;
|
||||
clear: left !important;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// TYPOGRAPHY
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
p,
|
||||
aside {
|
||||
text-align: right;
|
||||
direction: rtl;
|
||||
}
|
||||
|
||||
.toc-wrapper {
|
||||
text-align: right;
|
||||
direction: rtl;
|
||||
font-weight: 100 !important;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// RESPONSIVE DESIGN
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@media (max-width: $tablet-width) {
|
||||
.toc-wrapper {
|
||||
#{right}: -$nav-width;
|
||||
&.open {
|
||||
#{right}: 0;
|
||||
}
|
||||
}
|
||||
.page-wrapper {
|
||||
margin-#{right}: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: $phone-width) {
|
||||
%left-col {
|
||||
margin-#{left}: 0;
|
||||
}
|
||||
}
|
||||
103
docs/source/stylesheets/_variables.scss
Normal file
103
docs/source/stylesheets/_variables.scss
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
/*
|
||||
Copyright 2008-2013 Concur Technologies, Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// CUSTOMIZE SLATE
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Use these settings to help adjust the appearance of Slate
|
||||
|
||||
|
||||
// BACKGROUND COLORS
|
||||
////////////////////
|
||||
$nav-bg: #2E3336 !default;
|
||||
$examples-bg: #2E3336 !default;
|
||||
$code-bg: #1E2224 !default;
|
||||
$code-annotation-bg: #191D1F !default;
|
||||
$nav-subitem-bg: #1E2224 !default;
|
||||
$nav-active-bg: #0F75D4 !default;
|
||||
$nav-active-parent-bg: #1E2224 !default; // parent links of the current section
|
||||
$lang-select-border: #000 !default;
|
||||
$lang-select-bg: #1E2224 !default;
|
||||
$lang-select-active-bg: $examples-bg !default; // feel free to change this to blue or something
|
||||
$lang-select-pressed-bg: #111 !default; // color of language tab bg when mouse is pressed
|
||||
$main-bg: #F3F7F9 !default;
|
||||
$aside-notice-bg: #8fbcd4 !default;
|
||||
$aside-warning-bg: #c97a7e !default;
|
||||
$aside-success-bg: #6ac174 !default;
|
||||
$search-notice-bg: #c97a7e !default;
|
||||
|
||||
|
||||
// TEXT COLORS
|
||||
////////////////////
|
||||
$main-text: #333 !default; // main content text color
|
||||
$nav-text: #fff !default;
|
||||
$nav-active-text: #fff !default;
|
||||
$nav-active-parent-text: #fff !default; // parent links of the current section
|
||||
$lang-select-text: #fff !default; // color of unselected language tab text
|
||||
$lang-select-active-text: #fff !default; // color of selected language tab text
|
||||
$lang-select-pressed-text: #fff !default; // color of language tab text when mouse is pressed
|
||||
|
||||
|
||||
// SIZES
|
||||
////////////////////
|
||||
$nav-width: 230px !default; // width of the navbar
|
||||
$examples-width: 50% !default; // portion of the screen taken up by code examples
|
||||
$logo-margin: 0px !default; // margin below logo
|
||||
$main-padding: 28px !default; // padding to left and right of content & examples
|
||||
$nav-padding: 15px !default; // padding to left and right of navbar
|
||||
$nav-v-padding: 10px !default; // padding used vertically around search boxes and results
|
||||
$nav-indent: 10px !default; // extra padding for ToC subitems
|
||||
$code-annotation-padding: 13px !default; // padding inside code annotations
|
||||
$h1-margin-bottom: 21px !default; // padding under the largest header tags
|
||||
$tablet-width: 930px !default; // min width before reverting to tablet size
|
||||
$phone-width: $tablet-width - $nav-width !default; // min width before reverting to mobile size
|
||||
|
||||
|
||||
// FONTS
|
||||
////////////////////
|
||||
%default-font {
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
%header-font {
|
||||
@extend %default-font;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
%code-font {
|
||||
font-family: "Meslo", Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, serif;
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
|
||||
// OTHER
|
||||
////////////////////
|
||||
$nav-footer-border-color: #666 !default;
|
||||
$search-box-border-color: #666 !default;
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// INTERNAL
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// These settings are probably best left alone.
|
||||
|
||||
%break-words {
|
||||
word-break: break-all;
|
||||
hyphens: auto;
|
||||
}
|
||||
153
docs/source/stylesheets/print.css.scss
Normal file
153
docs/source/stylesheets/print.css.scss
Normal file
|
|
@ -0,0 +1,153 @@
|
|||
@charset "utf-8";
|
||||
@import 'normalize';
|
||||
@import 'variables';
|
||||
@import 'icon-font';
|
||||
|
||||
/*
|
||||
Copyright 2008-2013 Concur Technologies, Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
$print-color: #999;
|
||||
$print-color-light: #ccc;
|
||||
$print-font-size: 12px;
|
||||
|
||||
body {
|
||||
@extend %default-font;
|
||||
}
|
||||
|
||||
.tocify, .toc-footer, .lang-selector, .search, #nav-button {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.tocify-wrapper>img {
|
||||
margin: 0 auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.content {
|
||||
font-size: 12px;
|
||||
|
||||
pre, code {
|
||||
@extend %code-font;
|
||||
@extend %break-words;
|
||||
border: 1px solid $print-color;
|
||||
border-radius: 5px;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
pre {
|
||||
code {
|
||||
border: 0;
|
||||
}
|
||||
}
|
||||
|
||||
pre {
|
||||
padding: 1.3em;
|
||||
}
|
||||
|
||||
code {
|
||||
padding: 0.2em;
|
||||
}
|
||||
|
||||
table {
|
||||
border: 1px solid $print-color;
|
||||
tr {
|
||||
border-bottom: 1px solid $print-color;
|
||||
}
|
||||
td,th {
|
||||
padding: 0.7em;
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
h1 {
|
||||
@extend %header-font;
|
||||
font-size: 2.5em;
|
||||
padding-top: 0.5em;
|
||||
padding-bottom: 0.5em;
|
||||
margin-top: 1em;
|
||||
margin-bottom: $h1-margin-bottom;
|
||||
border: 2px solid $print-color-light;
|
||||
border-width: 2px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
h2 {
|
||||
@extend %header-font;
|
||||
font-size: 1.8em;
|
||||
margin-top: 2em;
|
||||
border-top: 2px solid $print-color-light;
|
||||
padding-top: 0.8em;
|
||||
}
|
||||
|
||||
h1+h2, h1+div+h2 {
|
||||
border-top: none;
|
||||
padding-top: 0;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
h3, h4 {
|
||||
@extend %header-font;
|
||||
font-size: 0.8em;
|
||||
margin-top: 1.5em;
|
||||
margin-bottom: 0.8em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
h5, h6 {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
aside {
|
||||
padding: 1em;
|
||||
border: 1px solid $print-color-light;
|
||||
border-radius: 5px;
|
||||
margin-top: 1.5em;
|
||||
margin-bottom: 1.5em;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
aside:before {
|
||||
vertical-align: middle;
|
||||
padding-right: 0.5em;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
aside.notice:before {
|
||||
@extend %icon-info-sign;
|
||||
}
|
||||
|
||||
aside.warning:before {
|
||||
@extend %icon-exclamation-sign;
|
||||
}
|
||||
|
||||
aside.success:before {
|
||||
@extend %icon-ok-sign;
|
||||
}
|
||||
}
|
||||
|
||||
.copy-clipboard {
|
||||
@media print {
|
||||
display: none
|
||||
}
|
||||
}
|
||||
633
docs/source/stylesheets/screen.css.scss
Normal file
633
docs/source/stylesheets/screen.css.scss
Normal file
|
|
@ -0,0 +1,633 @@
|
|||
@charset "utf-8";
|
||||
@import 'normalize';
|
||||
@import 'variables';
|
||||
@import 'icon-font';
|
||||
// @import 'rtl'; // uncomment to switch to RTL format
|
||||
|
||||
/*
|
||||
Copyright 2008-2013 Concur Technologies, Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// GENERAL STUFF
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
html, body {
|
||||
color: $main-text;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
@extend %default-font;
|
||||
background-color: $main-bg;
|
||||
height: 100%;
|
||||
-webkit-text-size-adjust: none; /* Never autoresize text */
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// TABLE OF CONTENTS
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#toc > ul > li > a > span {
|
||||
float: right;
|
||||
background-color: #2484FF;
|
||||
border-radius: 40px;
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
.toc-wrapper {
|
||||
transition: left 0.3s ease-in-out;
|
||||
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
position: fixed;
|
||||
z-index: 30;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: $nav-width;
|
||||
background-color: $nav-bg;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
|
||||
// language selector for mobile devices
|
||||
.lang-selector {
|
||||
display: none;
|
||||
a {
|
||||
padding-top: 0.5em;
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
}
|
||||
|
||||
// This is the logo at the top of the ToC
|
||||
.logo {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
padding: 0 15px 0 15px;
|
||||
}
|
||||
|
||||
&>.search {
|
||||
position: relative;
|
||||
|
||||
input {
|
||||
background: $nav-bg;
|
||||
border-width: 0 0 1px 0;
|
||||
border-color: $search-box-border-color;
|
||||
padding: 6px 0 6px 20px;
|
||||
box-sizing: border-box;
|
||||
margin: $nav-v-padding $nav-padding;
|
||||
width: $nav-width - ($nav-padding*2);
|
||||
outline: none;
|
||||
color: $nav-text;
|
||||
border-radius: 0; /* ios has a default border radius */
|
||||
}
|
||||
|
||||
&:before {
|
||||
position: absolute;
|
||||
top: 17px;
|
||||
left: $nav-padding;
|
||||
color: $nav-text;
|
||||
@extend %icon-search;
|
||||
}
|
||||
}
|
||||
|
||||
.search-results {
|
||||
margin-top: 0;
|
||||
box-sizing: border-box;
|
||||
height: 0;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
transition-property: height, margin;
|
||||
transition-duration: 180ms;
|
||||
transition-timing-function: ease-in-out;
|
||||
background: $nav-subitem-bg;
|
||||
&.visible {
|
||||
height: 30%;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
li {
|
||||
margin: 1em $nav-padding;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
a {
|
||||
color: $nav-text;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// The Table of Contents is composed of multiple nested
|
||||
// unordered lists. These styles remove the default
|
||||
// styling of an unordered list because it is ugly.
|
||||
ul, li {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
line-height: 28px;
|
||||
}
|
||||
|
||||
li {
|
||||
color: $nav-text;
|
||||
transition-property: background;
|
||||
transition-timing-function: linear;
|
||||
transition-duration: 200ms;
|
||||
}
|
||||
|
||||
// This is the currently selected ToC entry
|
||||
.toc-link.active {
|
||||
background-color: $nav-active-bg;
|
||||
color: $nav-active-text;
|
||||
}
|
||||
|
||||
// this is parent links of the currently selected ToC entry
|
||||
.toc-link.active-parent {
|
||||
background-color: $nav-active-parent-bg;
|
||||
color: $nav-active-parent-text;
|
||||
}
|
||||
|
||||
.toc-list-h2 {
|
||||
display: none;
|
||||
background-color: $nav-subitem-bg;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.toc-h2 {
|
||||
padding-left: $nav-padding + $nav-indent;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.toc-footer {
|
||||
padding: 1em 0;
|
||||
margin-top: 1em;
|
||||
border-top: 1px dashed $nav-footer-border-color;
|
||||
|
||||
li,a {
|
||||
color: $nav-text;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
li {
|
||||
font-size: 0.8em;
|
||||
line-height: 1.7;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.toc-link, .toc-footer li {
|
||||
padding: 0 $nav-padding 0 $nav-padding;
|
||||
display: block;
|
||||
overflow-x: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
text-decoration: none;
|
||||
color: $nav-text;
|
||||
transition-property: background;
|
||||
transition-timing-function: linear;
|
||||
transition-duration: 130ms;
|
||||
}
|
||||
|
||||
// button to show navigation on mobile devices
|
||||
#nav-button {
|
||||
span {
|
||||
display: block;
|
||||
$side-pad: $main-padding / 2 - 8px;
|
||||
padding: $side-pad $side-pad $side-pad;
|
||||
background-color: rgba($main-bg, 0.7);
|
||||
transform-origin: 0 0;
|
||||
transform: rotate(-90deg) translate(-100%, 0);
|
||||
border-radius: 0 0 0 5px;
|
||||
}
|
||||
padding: 0 1.5em 5em 0; // increase touch size area
|
||||
display: none;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 100;
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
opacity: 0.7;
|
||||
line-height: 16px;
|
||||
img {
|
||||
height: 16px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
transition: left 0.3s ease-in-out;
|
||||
|
||||
&:hover { opacity: 1; }
|
||||
&.open {left: $nav-width}
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// PAGE LAYOUT AND CODE SAMPLE BACKGROUND
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
.page-wrapper {
|
||||
margin-left: $nav-width;
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
background-color: $main-bg;
|
||||
min-height: 100%;
|
||||
|
||||
padding-bottom: 1px; // prevent margin overflow
|
||||
|
||||
// The dark box is what gives the code samples their dark background.
|
||||
// It sits essentially under the actual content block, which has a
|
||||
// transparent background.
|
||||
// I know, it's hackish, but it's the simplist way to make the left
|
||||
// half of the content always this background color.
|
||||
.dark-box {
|
||||
width: $examples-width;
|
||||
background-color: $examples-bg;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.lang-selector {
|
||||
position: fixed;
|
||||
z-index: 50;
|
||||
border-bottom: 5px solid $lang-select-active-bg;
|
||||
}
|
||||
}
|
||||
|
||||
.lang-selector {
|
||||
display: flex;
|
||||
background-color: $lang-select-bg;
|
||||
width: 100%;
|
||||
font-weight: bold;
|
||||
overflow-x: auto;
|
||||
a {
|
||||
display: inline;
|
||||
color: $lang-select-text;
|
||||
text-decoration: none;
|
||||
padding: 0 10px;
|
||||
line-height: 30px;
|
||||
outline: 0;
|
||||
|
||||
&:active, &:focus {
|
||||
background-color: $lang-select-pressed-bg;
|
||||
color: $lang-select-pressed-text;
|
||||
}
|
||||
|
||||
&.active {
|
||||
background-color: $lang-select-active-bg;
|
||||
color: $lang-select-active-text;
|
||||
}
|
||||
}
|
||||
|
||||
&:after {
|
||||
content: '';
|
||||
clear: both;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// CONTENT STYLES
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// This is all the stuff with the light background in the left half of the page
|
||||
|
||||
.content {
|
||||
// fixes webkit rendering bug for some: see #538
|
||||
-webkit-transform: translateZ(0);
|
||||
// to place content above the dark box
|
||||
position: relative;
|
||||
z-index: 30;
|
||||
|
||||
&:after {
|
||||
content: '';
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
&>h1, &>h2, &>h3, &>h4, &>h5, &>h6, &>p, &>table, &>ul, &>ol, &>aside, &>dl {
|
||||
margin-right: $examples-width;
|
||||
padding: 0 $main-padding;
|
||||
box-sizing: border-box;
|
||||
display: block;
|
||||
|
||||
@extend %left-col;
|
||||
}
|
||||
|
||||
&>ul, &>ol {
|
||||
padding-left: $main-padding + 15px;
|
||||
}
|
||||
|
||||
// the div is the tocify hidden div for placeholding stuff
|
||||
&>h1, &>h2, &>div {
|
||||
clear:both;
|
||||
}
|
||||
|
||||
h1 {
|
||||
@extend %header-font;
|
||||
font-size: 25px;
|
||||
padding-top: 0.5em;
|
||||
padding-bottom: 0.5em;
|
||||
margin-bottom: $h1-margin-bottom;
|
||||
margin-top: 2em;
|
||||
border-top: 1px solid #ccc;
|
||||
border-bottom: 1px solid #ccc;
|
||||
background-color: #fdfdfd;
|
||||
}
|
||||
|
||||
h1:first-child, div:first-child + h1 {
|
||||
border-top-width: 0;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
@extend %header-font;
|
||||
font-size: 19px;
|
||||
margin-top: 4em;
|
||||
margin-bottom: 0;
|
||||
border-top: 1px solid #ccc;
|
||||
padding-top: 1.2em;
|
||||
padding-bottom: 1.2em;
|
||||
background-image: linear-gradient(to bottom, rgba(#fff, 0.2), rgba(#fff, 0));
|
||||
}
|
||||
|
||||
// h2s right after h1s should bump right up
|
||||
// against the h1s.
|
||||
h1 + h2, h1 + div + h2 {
|
||||
margin-top: $h1-margin-bottom * -1;
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
h3, h4, h5, h6 {
|
||||
@extend %header-font;
|
||||
font-size: 15px;
|
||||
margin-top: 2.5em;
|
||||
margin-bottom: 0.8em;
|
||||
}
|
||||
|
||||
h4, h5, h6 {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: 2em 0;
|
||||
border-top: 2px solid $examples-bg;
|
||||
border-bottom: 2px solid $main-bg;
|
||||
}
|
||||
|
||||
table {
|
||||
margin-bottom: 1em;
|
||||
overflow: auto;
|
||||
th,td {
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
line-height: 1.6;
|
||||
code {
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
|
||||
th {
|
||||
padding: 5px 10px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
td {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
tr:last-child {
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
|
||||
tr:nth-child(odd)>td {
|
||||
background-color: lighten($main-bg,4.2%);
|
||||
}
|
||||
|
||||
tr:nth-child(even)>td {
|
||||
background-color: lighten($main-bg,2.4%);
|
||||
}
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
p, li, dt, dd {
|
||||
line-height: 1.6;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
code {
|
||||
background-color: rgba(0,0,0,0.05);
|
||||
padding: 3px;
|
||||
border-radius: 3px;
|
||||
@extend %break-words;
|
||||
@extend %code-font;
|
||||
}
|
||||
|
||||
pre>code {
|
||||
background-color: transparent;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
aside {
|
||||
padding-top: 1em;
|
||||
padding-bottom: 1em;
|
||||
margin-top: 1.5em;
|
||||
margin-bottom: 1.5em;
|
||||
background: $aside-notice-bg;
|
||||
line-height: 1.6;
|
||||
|
||||
&.warning {
|
||||
background-color: $aside-warning-bg;
|
||||
}
|
||||
|
||||
&.success {
|
||||
background-color: $aside-success-bg;
|
||||
}
|
||||
}
|
||||
|
||||
aside:before {
|
||||
vertical-align: middle;
|
||||
padding-right: 0.5em;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
aside.notice:before {
|
||||
@extend %icon-info-sign;
|
||||
}
|
||||
|
||||
aside.warning:before {
|
||||
@extend %icon-exclamation-sign;
|
||||
}
|
||||
|
||||
aside.success:before {
|
||||
@extend %icon-ok-sign;
|
||||
}
|
||||
|
||||
.search-highlight {
|
||||
padding: 2px;
|
||||
margin: -3px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #F7E633;
|
||||
background: linear-gradient(to top left, #F7E633 0%, #F1D32F 100%);
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// CODE SAMPLE STYLES
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// This is all the stuff that appears in the right half of the page
|
||||
|
||||
.content {
|
||||
&>div.highlight {
|
||||
clear:none;
|
||||
}
|
||||
|
||||
pre, blockquote {
|
||||
background-color: $code-bg;
|
||||
color: #fff;
|
||||
|
||||
margin: 0;
|
||||
width: $examples-width;
|
||||
|
||||
float:right;
|
||||
clear:right;
|
||||
|
||||
box-sizing: border-box;
|
||||
|
||||
@extend %right-col;
|
||||
|
||||
&>p { margin: 0; }
|
||||
|
||||
a {
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
border-bottom: dashed 1px #ccc;
|
||||
}
|
||||
}
|
||||
|
||||
pre {
|
||||
@extend %code-font;
|
||||
padding-top: 2em;
|
||||
padding-bottom: 2em;
|
||||
padding: 2em $main-padding;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
&>p {
|
||||
background-color: $code-annotation-bg;
|
||||
padding: $code-annotation-padding 2em;
|
||||
color: #eee;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// RESPONSIVE DESIGN
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// These are the styles for phones and tablets
|
||||
// There are also a couple styles disperesed
|
||||
|
||||
@media (max-width: $tablet-width) {
|
||||
.toc-wrapper {
|
||||
left: -$nav-width;
|
||||
|
||||
&.open {
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.page-wrapper {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
#nav-button {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.toc-link {
|
||||
padding-top: 0.3em;
|
||||
padding-bottom: 0.3em;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: $phone-width) {
|
||||
.dark-box {
|
||||
display: none;
|
||||
}
|
||||
|
||||
%left-col {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.toc-wrapper .lang-selector {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.page-wrapper .lang-selector {
|
||||
display: none;
|
||||
}
|
||||
|
||||
%right-col {
|
||||
width: auto;
|
||||
float: none;
|
||||
}
|
||||
|
||||
%right-col + %left-col {
|
||||
margin-top: $main-padding;
|
||||
}
|
||||
}
|
||||
|
||||
.highlight .c, .highlight .cm, .highlight .c1, .highlight .cs {
|
||||
color: #909090;
|
||||
}
|
||||
|
||||
.highlight, .highlight .w {
|
||||
background-color: $code-bg;
|
||||
}
|
||||
|
||||
.copy-clipboard {
|
||||
float: right;
|
||||
fill: #9DAAB6;
|
||||
cursor: pointer;
|
||||
opacity: 0.4;
|
||||
height: 18px;
|
||||
width: 18px;
|
||||
}
|
||||
|
||||
.copy-clipboard:hover {
|
||||
opacity: 0.8;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue