Prompt curto no Bash e ZSH
Eu procuro deixar meus arquivos bem organizados para que seja fácil encontrar algum arquivo quando eu precisar; uma das consequências dessa organização é que, às vezes, é necessário navegar por vários subdiretórios até chegar onde quero.
Por exemplo, para um simples acesso a um livro, eu tenho que executar os seguintes comandos:
julio@julio-acer ~ $ cd /media/externo/Documentos/Ebooks/Programacao/Lisp/Peter Seibel/Practical Common Lisp/
julio@julio-acer /media/externo/Documentos/Ebooks/Programacao/Lisp/Peter Seibel/Practical Common Lisp $ okular Practical Common Lisp.pdf &
Encontrar e navegar até a pasta correta não é nada complicado combinando tab completion
,
autojump
plugins (ex.: fasd
) e aliases no meu ~/.bashrc
que me levam direto para a pasta
desejada:
alias docs='cd /media/externo/Documentos'
O problema aqui é que o prompt da linha de comando exibe o caminho completo da pasta onde estou; nesse caso são apenas 8 diretórios com nomes curtos, mas, em muitos casos, é preciso entrar em pastas ainda mais profundas e com nomes longos, o que faz com que só o caminho para a pasta ocupe toda a tela.
Bash
Existe uma variável de sistema que “apara” a exibição desse caminho, limitando-o a um número máximo
de diretórios mostrados. Essa variável é a PROMPT_DIRTRIM
. Basta exportá-la igualada ao valor
máximo de pastas a serem exibidas (3 é um bom número) que o restante do caminho será substituído por
...
.
Exemplo:
julio@julio-acer ~ $ cd /media/externo/Documentos/Ebooks/Programacao/Lisp/Peter Seibel/Practical Common Lisp/
julio@julio-acer /media/externo/Documentos/Ebooks/Programacao/Lisp/Peter Seibel/Practical Common Lisp $ export PROMPT_DIRTRIM=3
julio@julio-acer .../Lisp/Peter Seibel/Practical Common Lisp $ pwd
/media/externo/Documentos/Ebooks/Programacao/Lisp/Peter Seibel/Practical Common Lisp
julio@julio-acer .../Lisp/Peter Seibel/Practical Common Lisp $
Para tonar essa alteração permanente, adicione a seguinte linha ao ~/.bashrc
:
export PROMPT_DIRTRIM=3
ZSH
Para o ZSH não existe uma variável $PROMPT_DIRTRIM
igual ao BASH, mas podemos conseguir um
resultado parecido editando a variável do próprio $PROMPT
(=$PS1
):
julio@julio-acer /media/externo/Documentos/Programacao/Web/comp/www/projetos/Sites/gera_curriculo> pwd
/media/externo/Documentos/Programacao/Web/comp/www/projetos/Sites/gera_curriculo
julio@julio-acer /media/externo/Documentos/Programacao/Web/comp/www/projetos/Sites/gera_curriculo> PROMPT='%n@%m %{$fg[$user_color]%}%3c%{$reset_color%}%(!.#.>) '
julio@julio-acer projetos/Sites/gera_curriculo> pwd
/media/externo/Documentos/Programacao/Web/comp/www/projetos/Sites/gera_curriculo
O segredo está no %3c
, que faz com que apenas os 3 últimos diretórios sejam exibidos.
Para tornar essa mudança padrão, basta exportar essa variável no ~/.zshrc
:
export PROMPT='%n@%m %{$fg[$user_color]%}%3c%{$reset_color%}%(!.#.>) '
O arquivo que utilizei como exemplo é um dos melhores livros introdutórios para aprender Common Lisp e pode ser consultado gratuitamente em http://gigamonkeys.com/book/