Um gerador de prompt bonito e útil para Bash, ZSH, Fish e tcsh:
Os prompts gerados são projetados para se parecerem com o powerline, mas fora isso este projeto não tem relação com o powerline.
Índice gerado com DocToc
Todos os sistemas de controle de versão suportados pelo shell powerline fornecem uma visão rápida do estado do seu repositório:
⇡
ou ⇣
indicando se um git push ou pull está pendente.Se os arquivos forem modificados ou estiverem em conflito, a situação é resumida com os seguintes símbolos:
✎
-- um arquivo foi modificado (mas não preparado para commit, no git)✔
-- um arquivo é preparado para confirmação (git) ou adicionado para rastreamento✼
-- um arquivo tem conflitos?
-- um arquivo não é rastreadoCada um deles terá um número próximo a ele se mais de um arquivo corresponder.
O segmento pode começar com um símbolo representando o sistema de controle de versão em uso. Para mostrar esse símbolo, o arquivo de configuração deve ter uma variável vcs
com uma opção show_symbol
definida como true
(veja Configuração do Segmento).
Este script usa códigos de cores ANSI para exibir cores em um terminal. Eles são notoriamente não portáteis, então podem não funcionar para você imediatamente, mas tente definir seu $TERM como xterm-256color
.
Corrija a fonte que você usa para o seu terminal: consulte powerline-fonts
Instale usando pip:
pip install powerline-shell
( Você pode usar a opção --user
para instalar apenas para o seu usuário, se desejar. Mas pode ser necessário mexer no seu PATH
para que isso funcione corretamente. )
git clone https://github.com/b-ryan/powerline-shell
cd powerline-shell
python setup.py install
Adicione o seguinte ao seu arquivo .bashrc
:
function _update_ps1() {
PS1=$(powerline-shell $?)
}
if [[ $TERM != linux && ! $PROMPT_COMMAND =~ _update_ps1 ]]; then
PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND"
fi
Observação: no macOS, você deve adicionar isso a .bash_profile
, .bash_login
ou .profile
. O macOS executará os arquivos na ordem mencionada e interromperá a execução no primeiro arquivo que encontrar. Para obter mais informações sobre a ordem de precedência, consulte a seção INVOCATION em man bash
.
Adicione o seguinte ao seu .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
Redefina fish_prompt
em ~/.config/fish/config.fish:
function fish_prompt
powerline-shell --shell bare $status
end
Adicione o seguinte ao seu .tcshrc
:
alias precmd 'set prompt="`powerline-shell --shell tcsh $?`"'
Powerline-shell é personalizável através do uso de um arquivo de configuração. Espera-se que este arquivo esteja localizado em ~/.config/powerline-shell/config.json
. Você pode gerar a configuração padrão neste local usando:
mkdir -p ~/.config/powerline-shell &&
powerline-shell --generate-config > ~/.config/powerline-shell/config.json
(Por exemplo, meu arquivo de configuração está localizado aqui: aqui)
Depois de gerar seu arquivo de configuração, você pode começar a adicionar ou remover "segmentos" - os blocos de construção do seu shell. A lista de segmentos disponíveis pode ser vista aqui.
Você também pode criar segmentos personalizados. Comece copiando um segmento existente como este. Certifique-se de alterar quaisquer importações relativas para importações absolutas. Ou seja. mude coisas como:
from .. utils import BasicSegment
para
from powerline_shell . utils import BasicSegment
Em seguida, altere a função add_to_powerline
para fazer o que quiser. Você pode então usar esse segmento em sua configuração colocando o caminho para seu segmento na seção de segmentos, como:
"segments" : [
" ~/path/to/segment.py "
]
Existem dois segmentos especiais disponíveis. stdout
aceita um comando arbitrário e a saída do comando será colocada em seu prompt. env
pega uma variável de ambiente e o valor da variável será definido no seu prompt. Por exemplo, sua configuração poderia ser assim:
{
"segments": [
"cwd",
"git",
{
"type": "stdout",
"command": ["echo", "hi"],
"fg_color": 22,
"bg_color": 161
},
{
"type": "env",
"var": "DOCKER_MACHINE_NAME"
},
]
}
Por padrão, um caractere Unicode (semelhante ao símbolo >) é usado para separar cada segmento. Isso pode ser alterado alterando a opção “mode” no arquivo de configuração. Os modos disponíveis são:
patched
- O padrão.compatible
- Tenta usar caracteres que já podem estar disponíveis usando a fonte escolhida.flat
- Nenhum separador é usado entre os segmentos, dando a cada segmento uma aparência retangular (e também economiza espaço). O diretório powerline_shell/themes
armazena temas para seu prompt, que são basicamente valores de cores usados por segmentos. O default.py
define um tema padrão que pode ser usado de forma independente, e todos os outros temas voltam a ele se perderem cores em algum segmento.
Se quiser criar um tema personalizado, comece copiando um dos temas existentes, como o básico. e atualize seu ~/.config/powerline-shell/config.json
, definindo o "theme"
para o caminho do arquivo. Por exemplo, sua configuração pode ter:
"theme": "~/mythemes/my-great-theme.py"
Você pode então modificar os códigos de cores de acordo com sua preferência. As cores do tema são especificadas usando códigos de cores Xterm-256.
Um script para testar combinações de cores é fornecido em colortest.py
. Observe que as cores que você vê podem variar dependendo do seu terminal. Ao projetar um tema, teste-o em vários terminais, especialmente com configurações padrão.
Alguns segmentos suportam configuração adicional. As opções do segmento estão aninhadas sob o nome do próprio segmento. Por exemplo, todas as opções para o segmento cwd
são definidas em ~/.config/powerline-shell/config.json
como:
{
"segments": [...],
"cwd": {
options go here
}
"theme": "theme-name",
"vcs": {
options go here
}
}
As opções para o segmento cwd
são:
mode
: Se plain
, então texto simples será usado para mostrar o cwd. Se dironly
, apenas o diretório atual será mostrado. Caso contrário, expande o cwd em diretórios individuais.max_depth
: Número máximo de diretórios para mostrar no caminho.max_dir_size
: Número máximo de caracteres exibidos para cada diretório no caminho.full_cwd
: Se verdadeiro, o último diretório não será encurtado quando max_dir_size
for usado. O segmento hostname
oferece uma opção:
colorize
: se for verdade, o nome do host será colorido com base em um hash dele mesmo. O segmento vcs
oferece uma opção:
show_symbol
: Se true
, o segmento do sistema de controle de versão começará com um símbolo representando o sistema de controle de versão específico em uso no diretório atual. As opções para o segmento battery
são:
always_show_percentage
: Se verdadeiro, mostra a porcentagem quando totalmente carregado em AC.low_threshold
: Porcentagem limite para cor do indicador de bateria fraca. As opções para o segmento time
são:
format
: formata a string conforme usada pela função strftime, por exemplo %H:%M
. O diretório powerline_shell/segments
contém scripts python que são injetados como estão em um único arquivo powerline_shell_base.py
. Cada script de segmento define uma função que insere um ou mais segmentos no prompt. Se você quiser adicionar um novo segmento, basta criar um novo arquivo no diretório de segmentos.
Certifique-se de que seu script não introduza novos globais que possam entrar em conflito com outros scripts. Seu script deve falhar silenciosamente e ser executado rapidamente em qualquer cenário.
Certifique-se de introduzir novas cores padrão em themes/default.py
para cada novo segmento criado. Teste primeiro seu segmento com este tema.
Você deve adicionar testes para o seu segmento da melhor maneira possível. Testes unitários e de integração são bem-vindos. Execute seus testes executando o script test.sh
Ele usa docker
para gerenciar dependências e o ambiente. Como alternativa, você pode executar o comando nosetests
após instalar os requisitos em requirements-dev.txt
.
Consulte as perguntas frequentes. Se você continuar tendo problemas, abra um problema.