2

私は ncurses をいじっていましたが、ネット上でパッドを扱っている有用な情報はほとんど見つかりませんでした。パッドは画面外の大きなウィンドウのようなものであり、その一部を画面上の小さなウィンドウに印刷できることを理解しています。

パッドのコンテキストを画面に出力するプログラムを作成しました。問題は、プログラムが「行ごと」にしか印刷されないように見え、テキストを折り返さないことです。

プログラムの出力は次のようになります。

abcdefghij

abcdefghij

abcdefghij

しかし、次のようにする必要があります。

abcdefghij

klmnopqrst

uvwxyzabc

後者の場合、複数の行が印刷されるのではなく、同じ行が「ラップ」します。

このラッピング機能を実現する方法を教えてくれる ncurses の達人はいますか? (つまり:魔法?)

詳細、プログラムのソースコードが必要かどうか尋ねる:

#include <unistd.h>
#include <curses.h>

int main()
{
    WINDOW *pad_ptr;
    int x, y;
    int pad_lines;
    int pad_cols;
    char disp_char;

    initscr();

    pad_lines = LINES + 50;
    pad_cols = COLS + 50;

    pad_ptr = newpad(pad_lines, pad_cols);

    disp_char = 'a';
    for(x = 0; x < pad_lines; x++)
    {
            for(y = 0; y < pad_cols; y++)
            {
                    mvwaddch(pad_ptr, x, y, disp_char);
                    if(disp_char == 'z')
                            disp_char = 'a';
                    else
                            disp_char++;
            }
    }

/* We just filled the pad with letters from the alphabet. */

/* Now we will fill part of the main window with a 10x10 section
 * of the pad.
 * Notice that the text does not wrap around. (Where is 'k'?)
 */

    prefresh(pad_ptr, 0, 0, 3, 3, 9+3, 9+3);
    sleep(3000);

//  prefresh(pad_ptr, LINES + 5, COLS + 7, 5, 5, 21, 19);
//  sleep(4);

    delwin(pad_ptr);

    endwin();

    exit(0);
}
4

2 に答える 2

2

パッドの仕組みを誤解しています。

パッドを使用すると、(おそらく物理画面よりも大きい) ウィンドウを作成し、ウィンドウのサブセットを表示できます。prefresh を使用してパッドを表示すると、パッドのサブセットのビューが表示されます。パッドのサブセットを表示しても、コンテンツは変更 (またはラップ) されません。

以下のコードをサンプルに追加すると、キーを押すたびにビューポートが移動するのがわかりますが、パッドの内容は変更されません。

for (x=0; x<10; x++) {
    prefresh(pad_ptr, 0, x, 3, 3, 9+3, 9+3);
    wgetch(pad_ptr);
}
于 2012-04-13T15:40:15.737 に答える
0

pad_lines と pad_cols を 9 に変更して、より満足できるかどうかを確認してください。

システムで LINES と COLS が 100 であるとします。次のようなパッドに 10+k 配列を作成しています。

a-z..a-z..a-z..a-k
l-z..a-z..a-z..a-d  
e-z..a-z..a-z..a-o //etc

次にprefresh()、最初の 9 列 (9 行のうち) を画面に表示します。

于 2012-04-13T00:46:48.067 に答える