我正在使用<ncurses.h>
库来获取终端中的简单程序。它以常规方式逐个字符地读取文件:
FILE* f = fopen(filename, "r");
int c;
while ((c = fgetc(f)) != EOF) { /* process c */ }
字符放在一个字符数组中。我需要知道终端屏幕上每个字符的(y,x)坐标。为此,我保留索引,以确定另一个数组中屏幕上的第一个和最后一个char。调整终端窗口大小时,它很容易调整 - 每行包含max_x
个字符,或者如果有'\n'
则包含较少数量的字符。
选项卡会导致问题 - 尽管它们被识别为'\t'
,但它们的宽度以及文本界面中“像素”的数量是不同的(在终端中由cat
显示或作为连续字符显示在包含文件中所有字符的字符串)。但是,当与文件的其余部分分开时:
if (c == '\t') {...}
他们没有区别。我也尝试打印那些检测到的标签并比较光标的位置以获得它们的宽度,但它们看起来又一样。
如何在阅读文件时获取标签的实际宽度?我想将宽度转换为多个空格。感谢您的关注和暗示。
答案 0 :(得分:0)
当然,实际的标签宽度取决于您在屏幕上显示的方式。对于经典演示文稿,即每八列一个列表,您必须跟踪选项卡出现的column
数字。然后您可以使用:
tab_width = 8 - column % 8
column
从第一列的0开始计数。