Execução de recuo resulta em zshell

1

Gostaria de personalizar meu zshell para que o prompt seja colocado contra a borda esquerda como normal. Eu também gostaria de ter todos os resultados de execução indentados por talvez 2 espaços. Existe uma maneira de recuar assim?

Estou experimentando um prompt de duas linhas:

PROMPT='
%{$fg[gray]%}PWD:%{$reset_color%}%{$fg[cyan]%}%~ %{$reset_color%}
%{$fg[red]%}> '

Seria bom fazer isso se destacar em sua própria coluna.

    
por bholben 08.11.2014 / 18:25

1 resposta

1

Eu acho que isso não é tão direto quanto se poderia pensar. Você tem que interceptar STDOUT, como programas externos escrevem diretamente para esse canal.

O seguinte é uma espécie de prova de conceito . Esteja ciente de que isso quebrará muitas coisas, como programas interativos como man , less etc. Portanto, não é utilizável para uso diário, mas para formatar facilmente uma sessão de shell para uma postagem em, por exemplo, SU.

Essa abordagem foi postada por Atom Smasher na lista de discussão zsh-users em Sáb, 16 de maio de 2009 para colorir STDERR . Adotei as suas necessidades:

# ## indent_output.zsh ##

zmodload zsh/terminfo zsh/system
autoload is-at-least

indent_output() {
  while sysread line
  do
    testline=${line//$'\n'/$'\n'   }
    syswrite "   ${testline}"      
  done
}

precmd() { sleep 0 }

## i'm not sure exactly how far back it's safe to go with this
## 4.3.4 works; 4.2.1 hangs.
is-at-least 4.3.4 && exec  > >(indent_output)

A parte complicada é exec > >(indent_output) , que processa a saída completa do shell de substituição através da função indent_output . A definição precmd é necessária para evitar uma condição de corrida, caso contrário, o novo prompt será impresso antes da saída real do comando executado.

Aqui está uma demonstração:

% source indent_output.zsh
% ls /bin | head
   [.exe
   2to3
   2to3-3.2
   411toppm.exe
   7z
   7za
   7zr
   a2p.exe
   aaflip.exe
   aclocal
   %
% date
   Sat, Nov 08, 2014  5:58:29 PM
   %
% cat /usr/share/doc/foo
   cat   :       /usr/share/doc/foo   :    No such file or directory   
   %
% cat /usr/share/doc/zsh-5.0.6/INSTALL| head
                           ++++++++++++++
                           INSTALLING ZSH
                           ++++++++++++++

   This file is divided into two parts:  making and installing the shell, a
   note on the script run to set up the environment for new users, and
   a description of various additional configuration options.  You should
   have a look at the items in the second and third parts before following the
   instructions in the first.

   %
% 

Você pode se livrar do sinal % antes de cada aviso (o que indica que a última linha não termina com CR ) com estas duas opções:

setopt PROMPT_CR NO_PROMPT_SP
    
por 08.11.2014 / 19:02

Tags