0

<ncurses.h>ターミナルで単純なプログラムにライブラリを使用しています。従来の方法でファイルを文字単位で読み取ります。

FILE* f = fopen(filename, "r");
int c;
while ((c = fgetc(f)) != EOF) { /* process c */ }

文字は、文字の配列内に配置されます。端末画面上の各文字の (y,x) 座標を知る必要があります。そのために、画面上の行の最初と最後の文字を決定するインデックスを別の配列に保持します。ターミナル ウィンドウのサイズが変更されたときに簡単に調整できます。各行はmax_x文字で構成されるか、'\n'.

タブは問題を引き起こします - タブは として認識され'\t'ますが、テキスト インターフェイスの幅と「ピクセル」数が異なります (catターミナルで表示される場合、またはファイルのすべての文字を含む文字列内の連続した文字として表示される場合)。ただし、ファイルの残りの部分から次のように分離されている場合:

if (c == '\t') {...}

違いはありません。また、検出されたタブを印刷して、カーソルの位置を比較して幅を取得しようとしましたが、やはり同じように見えます。

ファイルを読むときにタブの実際の幅を取得する方法は? 幅をスペース数に変換したいと思います。注意とおそらくヒントをありがとう。

4

1 に答える 1

0

もちろん、実際のタブの幅は、画面上での表示方法によって異なります。column8 列ごとの集計である従来のプレゼンテーションでは、タブが発生する番号を追跡する必要があります。その後、次を使用できます。

tab_width = 8 - column % 8

column最初の列の 0 からカウントを開始します。

于 2012-12-26T14:02:13.237 に答える