Último caractere de tabulador (tab) que não está pulando para a próxima linha no terminal

0

Eu me deparei com um problema. No meu caso, era um programa Lua imprimindo uma série de números. Lua usa abas como separadores, e a saída saiu assim no meu terminal de 80 colunas:

1       2       3       4       5       6       7       8       9       10      1
1      12

Observe como o número 11 é truncado, com o primeiro 1 na coluna 79 e o segundo 1 na coluna 0 do próximo ine. Eu esperava que o número 11 completo aparecesse na próxima linha.

Não é específico de Lua e é facilmente reproduzível com este one-liner:

printf '1\t2\t3\t4\t5\t6\t7\t8\t9\t10\t11\t12'

Eu li esta pergunta e a resposta aceita: Por que há 11 tabstops em um console de 80 colunas? que me fez entender por que isso está acontecendo. A questão é, existe uma maneira de sobrescrever esse comportamento, para fazer a última aba pular para a coluna 0 na próxima linha, ao invés da última coluna na linha atual?

    
por Pedro Gimeno 14.02.2016 / 12:57

1 resposta

2

Não, você não pode fazer isso funcionar automaticamente, ou seja, sem filtrar a saída do seu programa para interpretar a guia na margem direita como quebra automática. Isso ocorre porque o wrapper estilo VT100 chega até a margem direita e não será não , a menos que você escreva um caractere imprimível . As guias não podem ser impressas.

A maioria dos terminais é configurada para usar guias flexíveis (já expandidas para espaços). Você pode verificar suas configurações de stty para ver se isso é assim. A saída é obscura, mas tab0 significa que ela tenta usar guias, enquanto tab3 diz que não.

Para ver a configuração:

stty -a

Para desativar as guias de hardware:

stty -tabs

Lua pode substituir essa configuração, mas se isso não acontecer, é uma possibilidade, já que espaço é um caractere imprimível.

Leitura adicional:

por 14.02.2016 / 14:31

Tags