Configurando a largura da guia na saída do C ++ no bash

6

Eu tenho um programa c++ e uso o caractere de tabulação "\t" para organizar minha saída para colunas legíveis por humanos. No entanto, a coluna de 8 espaços de largura no bash é muito estreita para mim. Como posso aumentá-lo?

Nota: Em fóruns de C ++, as pessoas dizem: "C ++ apenas mostra o caracter e não é responsável pela saída visível" . Nos fóruns do linux as pessoas dizem: "É o programa que você usa para dar saída ao terminal que é responsável por isso, provavelmente less ou mais."

    
por yo' 24.10.2012 / 18:14

4 respostas

3

Você pode alterar as paradas de tabulação no seu terminal usando o banco de dados do terminal, que pode ser acessado de várias maneiras a partir do C ++ (por exemplo, ncurses). Você também pode acessá-lo a partir do shell usando tput .

Você deve começar limpando as guias ( tput tbc ). Em seguida, mova o cursor para cada coluna em que você deseja uma parada de tabulação ( tput hpa 10 para a coluna 10, por exemplo). Finalmente, defina a parada de tabulação ( tput hts ). Repita a configuração de posicionamento e tabulação para cada parada de tabulação desejada. Exemplo:

echo -e '0\t1\t2\t3\t4\t5\t6\t7\t8'
tput tbc
for ((i=0; i<'tput cols'; i+=10)); do
    tput hpa $i
    tput hts
done
tput hpa 0
echo -e '0\t1\t2\t3\t4\t5\t6\t7\t8'
    
por 24.10.2012 / 19:42
4

Assim, o caractere de tabulação impresso é corrigido no código-fonte do programa. Eu não acho que a exibição do caractere de tabulação no bash possa ser editada em uma configuração de shell.

Estou apenas supondo aqui, mas acho que a representação do caractere de tabulação está incorporada no conjunto de codificação de caracteres que o seu programa terminal está usando. O conjunto de caracteres ASCII define o caractere de tabulação, mas o conjunto de caracteres UTF-8 não parece . Eu não acho que qualquer conjunto de codificação de caracteres usa uma largura diferente para o caractere de tabulação, então eu acho que você está sem sorte a menos que você queira escrever seu próprio conjunto de caracteres e usá-lo, mas isso parece uma dor de cabeça esperando para acontecer.

Em vez disso, você já tentou o comando pr ?

PR(1) User Commands PR(1)

NAME pr - convert text files for printing

Para trocar os caracteres de tabulação por 10 espaços, você pode fazer isso: -

./a.out | pr --expand-tabs=10 -t
    
por 24.10.2012 / 19:29
3

C ++ não é responsável pela largura. Eu tive uma resposta mais longa digitada, mas se tornou desnecessária quando eu fiz um teste ...

Basicamente, use tabs (parte do pacote ncurses5) ... por exemplo,

zsh> tabs 4 # 4 space width tabs
zsh> ./a.out

Isto irá formatar a sua largura que você deseja automaticamente. Não há necessidade de canalizar (o que não ajuda se você tiver um trabalho interativo).

    
por 24.10.2012 / 20:56
0

Como ilustrado nas outras respostas, o utilitário tabs é o modo mais simples de As paradas de tabulação especificam para aplicativos (como o shell) que não definem suas próprias paradas de tabulação. POSIX especifica um utilitário tabs , (assim como tput ), mas não tem nada a dizer sobre o terminfo ou o comportamento de tput para este propósito. (X / Open Curses, que é um padrão separado, tem algo a dizer).

Mas, para usar essas paradas de tabulação, você também deve garantir que seu terminal esteja configurado para usar guias de hardware. Se você fizer stty -a , procure tab0 na saída:

speed 38400 baud; rows 40; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

De acordo com o manual stty , você deve conseguir definir tab0 ou tab3 . O POSIX define tab1 e tab2 , mas somente tab0 (guias de hardware) e tab3 (guias de software) são úteis para você.

tab0 tab3
Select tab expansion policy. tab0 disables tab expansion, while tab3 enables it.

Leitura adicional:

por 07.11.2016 / 02:33