Красивый и полезный генератор подсказок для Bash, ZSH, Fish и tcsh:
Сгенерированные подсказки напоминают Powerline, но в остальном этот проект не имеет никакого отношения к Powerline.
Оглавление, созданное с помощью DocToc
Все системы контроля версий, поддерживаемые оболочкой Powerline, позволяют быстро просмотреть состояние вашего репозитория:
⇡
или ⇣
указывающими, ожидается ли git push или pull.Если файлы изменены или конфликтуют, ситуация обозначается следующими символами:
✎
— файл был изменен (но не подготовлен для фиксации в git)✔
— файл подготовлен для фиксации (git) или добавлен для отслеживания.✼
-- файл имеет конфликты?
-- файл не отслеживаетсяРядом с каждым из них будет указан номер, если совпадает более одного файла.
Сегмент может начинаться с символа, обозначающего используемую систему контроля версий. Чтобы отобразить этот символ, в файле конфигурации должна быть переменная vcs
с опцией show_symbol
установленной в true
(см. Конфигурация сегмента).
Этот скрипт использует цветовые коды ANSI для отображения цветов в терминале. Они, как известно, непереносимы, поэтому могут не работать сразу после установки, но попробуйте установить для $TERM значение xterm-256color
.
Исправьте шрифт, который вы используете для своего терминала: см. Powerline-fonts.
Установите с помощью pip:
pip install powerline-shell
( Если хотите, вы можете использовать опцию --user
для установки только для вашего пользователя. Но вам, возможно, придется повозиться с PATH
, чтобы это работало правильно. )
git clone https://github.com/b-ryan/powerline-shell
cd powerline-shell
python setup.py install
Добавьте следующее в ваш файл .bashrc
:
function _update_ps1() {
PS1=$(powerline-shell $?)
}
if [[ $TERM != linux && ! $PROMPT_COMMAND =~ _update_ps1 ]]; then
PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND"
fi
Примечание. В macOS необходимо добавить это в один из .bash_profile
, .bash_login
или .profile
. macOS выполнит файлы в вышеупомянутом порядке и остановит выполнение при первом найденном файле. Дополнительную информацию о порядке приоритета см. в разделе INVOCATION в man bash
.
Добавьте в свой .zshrc
следующее:
function powerline_precmd() {
PS1="$(powerline-shell --shell zsh $?)"
}
function install_powerline_precmd() {
for s in "${precmd_functions[@]}"; do
if [ "$s" = "powerline_precmd" ]; then
return
fi
done
precmd_functions+=(powerline_precmd)
}
if [ "$TERM" != "linux" -a -x "$(command -v powerline-shell)" ]; then
install_powerline_precmd
fi
Переопределите fish_prompt
в ~/.config/fish/config.fish:
function fish_prompt
powerline-shell --shell bare $status
end
Добавьте в свой .tcshrc
следующее:
alias precmd 'set prompt="`powerline-shell --shell tcsh $?`"'
Powerline-shell настраивается с помощью файла конфигурации. Ожидается, что этот файл будет расположен по адресу ~/.config/powerline-shell/config.json
. Вы можете сгенерировать конфигурацию по умолчанию в этом месте, используя:
mkdir -p ~/.config/powerline-shell &&
powerline-shell --generate-config > ~/.config/powerline-shell/config.json
(В качестве примера мой файл конфигурации находится здесь: здесь)
После того как вы создали файл конфигурации, вы можете начать добавлять или удалять «сегменты» — строительные блоки вашей оболочки. Список доступных сегментов можно увидеть здесь.
Вы также можете создавать собственные сегменты. Начните с копирования существующего сегмента следующим образом. Обязательно измените относительный импорт на абсолютный. Т.е. изменить такие вещи, как:
from .. utils import BasicSegment
к
from powerline_shell . utils import BasicSegment
Затем измените функцию add_to_powerline
, чтобы она делала то, что вы хотите. Затем вы можете использовать этот сегмент в своей конфигурации, указав путь к вашему сегменту в разделе сегментов, например:
"segments" : [
" ~/path/to/segment.py "
]
Доступны два специальных сегмента. stdout
принимает произвольную команду, и вывод команды будет помещен в ваше приглашение. env
принимает переменную среды, и значение этой переменной будет установлено в вашем приглашении. Например, ваша конфигурация может выглядеть так:
{
"segments": [
"cwd",
"git",
{
"type": "stdout",
"command": ["echo", "hi"],
"fg_color": 22,
"bg_color": 161
},
{
"type": "env",
"var": "DOCKER_MACHINE_NAME"
},
]
}
По умолчанию для разделения каждого сегмента используется символ Юникода (напоминающий символ >). Это можно изменить, изменив параметр «mode» в файле конфигурации. Доступные режимы:
patched
— значение по умолчанию.compatible
— пытается использовать символы, которые уже могут быть доступны в выбранном вами шрифте.flat
— между сегментами не используется разделитель, что придает каждому сегменту прямоугольный вид (а также экономит пространство). В каталоге powerline_shell/themes
хранятся темы для вашего приглашения, которые по сути представляют собой значения цвета, используемые сегментами. В default.py
определяется тема по умолчанию, которую можно использовать отдельно, и любая другая тема возвращается к ней, если в каких-либо сегментах отсутствуют цвета.
Если вы хотите создать собственную тему, начните с копирования одной из существующих тем, например базовой. и обновите ~/.config/powerline-shell/config.json
, установив в качестве "theme"
путь к файлу. Например, ваша конфигурация может иметь:
"theme": "~/mythemes/my-great-theme.py"
Затем вы можете изменить цветовые коды по своему вкусу. Цвета темы задаются с использованием цветовых кодов Xterm-256.
Сценарий для тестирования цветовых комбинаций доступен на colortest.py
. Обратите внимание, что цвета, которые вы видите, могут различаться в зависимости от вашего терминала. При разработке темы протестируйте ее на нескольких терминалах, особенно с настройками по умолчанию.
Некоторые сегменты поддерживают дополнительную настройку. Параметры сегмента вложены под именем самого сегмента. Например, все параметры сегмента cwd
заданы в ~/.config/powerline-shell/config.json
следующим образом:
{
"segments": [...],
"cwd": {
options go here
}
"theme": "theme-name",
"vcs": {
options go here
}
}
Варианты сегмента cwd
:
mode
: если plain
, то для отображения cwd будет использоваться простой текст. Если dironly
, будет показан только текущий каталог. В противном случае cwd разворачивается на отдельные каталоги.max_depth
: Максимальное количество каталогов, отображаемых в пути.max_dir_size
: Максимальное количество символов, отображаемых для каждого каталога в пути.full_cwd
: если true, последний каталог не будет сокращаться при использовании max_dir_size
. Сегмент hostname
предоставляет один вариант:
colorize
: если true, имя хоста будет раскрашено на основе его хэша. Сегмент vcs
предоставляет один вариант:
show_symbol
: Если true
, сегмент системы контроля версий будет начинаться с символа, обозначающего конкретную систему контроля версий, используемую в текущем каталоге. Варианты для battery
сегмента:
always_show_percentage
: Если установлено значение true, показывать процент при полной зарядке от сети переменного тока.low_threshold
: Пороговый процент для цвета индикатора низкого заряда батареи. Варианты time
сегмента:
format
: строка формата, используемая функцией strftime, например %H:%M
. Каталог powerline_shell/segments
содержит скрипты Python, которые вставляются в один файл powerline_shell_base.py
. Каждый сценарий сегмента определяет функцию, которая вставляет в приглашение один или несколько сегментов. Если вы хотите добавить новый сегмент, просто создайте новый файл в каталоге сегментов.
Убедитесь, что ваш сценарий не содержит новых глобальных переменных, которые могут конфликтовать с другими сценариями. Ваш сценарий должен автоматически завершаться сбоем и быстро выполняться в любом сценарии.
Обязательно вводите новые цвета по умолчанию в themes/default.py
для каждого нового создаваемого вами сегмента. Сначала протестируйте свой сегмент с помощью этой темы.
Вам следует как можно лучше добавлять тесты для своего сегмента. Приветствуются как модульные, так и интеграционные тесты. Запустите тесты, запустив скрипт test.sh
Он использует docker
для управления зависимостями и средой. Альтернативно, вы можете запустить команду nosetests
после установки требований в requirements-dev.txt
.
См. часто задаваемые вопросы. Если у вас по-прежнему возникают проблемы, пожалуйста, откройте проблему.