Bash에서 C++ 출력의 탭 너비 설정

Bash에서 C++ 출력의 탭 너비 설정

c++탭을 사용하여 "\t"출력을 사람이 읽을 수 있는 열로 구성하는 프로그램이 있습니다 . 그러나 Bash의 8칸 너비 열은 나에게 너무 좁습니다. 어떻게 늘릴 수 있나요?

노트:C++ 포럼에서 사람들은 다음과 같이 말합니다."C++는 문자만 출력하며 눈에 보이는 출력은 책임지지 않습니다.". Linux 포럼에서 사람들은 다음과 같이 말합니다."아마도 터미널에 출력하는 데 사용하는 프로그램이 책임이 있을 것입니다 less."

답변1

C++에서 다양한 방법(예: ncurses)으로 액세스할 수 있는 터미널 데이터베이스를 사용하여 터미널에서 탭 정지를 변경할 수 있습니다. shell 을 사용하여 쉘에서 액세스할 수도 있습니다 tput.

먼저 탭( )을 지워야 합니다 tput tbc. 그런 다음 탭 정지를 추가하려는 각 열( tput hpa 10예: 열 10)로 커서를 이동합니다. 마지막으로 탭 정지( tput hts)를 설정합니다. 필요한 각 탭 정지에 대해 위치 지정 및 탭 정지 설정을 반복합니다. 예:

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'

답변2

따라서 인쇄된 탭 문자는 프로그램의 소스 코드에 고정됩니다. Bash의 탭 표시는 쉘 설정에서 편집할 수 없다고 생각합니다.

여기서는 추측일 뿐이지만 탭 문자의 표현은 터미널 프로그램이 사용하는 문자 인코딩 집합에 내장되어 있다고 생각합니다. ASCII 문자 세트는 탭 문자를 정의하지만 UTF-8 문자 세트는 탭 문자를 정의합니다.아닌 것 같다. 나는 어떤 문자 인코딩 세트도 탭에 대해 다른 너비를 사용하지 않는다고 생각합니다. 따라서 자신만의 문자 세트를 작성하여 사용하지 않는 한 운이 좋지 않다고 생각하지만 그것은 두통처럼 들립니다.

대신 명령을 시도해 보셨나요 pr?

PR(1) 사용자 명령 PR(1)

namepr - 인쇄용 텍스트 파일 변환

탭을 10개의 공백으로 바꾸려면 다음을 수행할 수 있습니다.

./a.out | pr --expand-tabs=10 -t

답변3

C++는 너비에 대해 책임을 지지 않습니다. 길게 답글을 썼는데 테스트해 보니 정말 불필요해졌네요...

기본적으로 tabs(ncurses5 패키지의 일부)를 사용하십시오... 예:

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

그러면 원하는 너비로 자동 형식이 지정됩니다. 배관이 필요하지 않습니다(대화형 작업이 있는 경우에는 도움이 되지 않습니다).

답변4

다른 답변에서 볼 수 있듯이tabs유틸리티가 더 쉬운 방법입니다지정하다탭 정지는 자체 탭 정지를 설정하지 않는 응용 프로그램(예: 셸)을 위한 것입니다. POSIX는 다음을 지정합니다.tabs유틸리티, (및tputtput), 그러나 해당 목적을 위한 terminfo 또는 동작에 대해서는 말할 것도 없습니다. (X/Open Curses는 별도의 표준이므로 할 말이 있습니다).

그러나 이러한 탭 정지를 사용하려면 터미널이 하드웨어 탭 정지를 사용하도록 설정되어 있는지도 확인해야 합니다. 당신이 그렇게한다면stty -atab0, 출력에서 ​​다음을 찾습니다.

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

매뉴얼 에 따르면 또는 를 stty설정할 수 있어야 합니다 . POSIX는 및 을 정의 하지만 (하드웨어 탭) 및 (소프트웨어 탭)만 유용합니다.tab0tab3tab1tab2tab0tab3

tab0 tab3
탭 확장 전략을 선택합니다. tab0동안 탭 확장을 비활성화합니다.tab3활성화하십시오.

추가 자료:

관련 정보