Eu tenho este ~/.gitconfig
apelido:
b = "!r() { count=10; git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:bold green)%(committerdate:relative)|%(color:yellow)%(refname:short)|%(color:red)%(objectname:short)%(color:reset)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)' --color=always --count=${count:=10} | column -c 10 -ts '|'; }; r"
Meu problema com essa função é que ela formata a string com base na linha mais longa, ou seja, se eu tiver uma tabela com os seguintes valores ( Esta não é a saída de git branch --format
, apenas um exemplo para ilustrar o column
comportamento ):
a, b, c
x, yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy, z
então vai parecer
a, b , c
x, yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy, z
Este é um bom comportamento que column
é responsável por, no entanto, eu quero cortar o comprimento da string, então, por exemplo, nenhuma coluna será maior > 4:
a, b , c
x, yyyy, z
Consegui adicionar um pipe awk
para fazer algo assim (usei 25 caracteres):
b = "!r() { count=10; git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:bold green)%(committerdate:relative)|%(color:yellow)%(refname:short)|%(color:red)%(objectname:short)%(color:reset)|%(color: blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)' --color=always --count=${count:=10} | column -c 10 -ts '|' | awk '{for(i=1;i<NF;i++){$i=substr($i,1,25)}; print $0}'; }; r"
mas bagunça a mesa :(
Ele também se comporta mal com *
o início da ramificação atual.
Como posso consertar isso?
- Tentei instalar uma versão mais recente
column
que deveria ter uma-c
opção para controlar a largura mas não consegui :( (baixado daqui e tentei./configure && make install
. Não funcionou como esperado). - Tentei formatar a função com
\
e novas linhas - não funcionou. As funções devemgitconfig
parecer tão feias?
$ git --version
git version 2.34.1
Se você não tiver acesso a uma
column
implementação que entenda a limitação de largura de saída, uma maneira seria implementar o algoritmo de "construção de coluna" noawk
. No entanto, implementar a lógica - embora simples - adiciona um pouco ao comprimento da suagitconfig
função:Como você pode ver, este
awk
programa divide a entrada no|
(que é o que você declarou ser a saída real dogit branch
comando).mw
para cada coluna, mas limitada à largura máxima especificada na variávelmaxw
.lines
.lines
buffer e divide a linha novamente|
em um arrayf
. Para cada entrada def
, imprime no máximomaxw
caracteres do campo viaprintf
, onde a largura de campo desejada é retirada domw
array para a respectiva coluna.Para o seu exemplo (mas assumindo a
|
-separação real em vez da,
que você mostrou), a saída seria: