4

使用 n/curses 打印到终端窗口右侧和/或底部的标准方法是什么?

这是一个小草图:

Terminal window:
================================================================================
                                                                         [ MSG ]













message number 2                                                   here is more
================================================================================

C 或 Python 中的解决方案很好。

谢谢!

4

3 回答 3

3

我会去:

mvprintw(COLS-length("msg"),1,"msg");
mvprintw(0,LINES-1,"message number 2");
mvprintw(COLS-length("here is more"),LINES-1,"here is more");

这有点不合时宜,这就是我进行大部分诅咒编程的方式。

于 2011-07-14T19:56:38.127 回答
1

我知道有两种方法,但我确定只有一种:

一: move(int row, int col)来自 ncurses 库。但是,如果您要在此语句之后执行一些 I/O,您将​​无法使用相应的“mv”函数。例如,

move(y, x);
addch(ch);

可以替换为

mvaddch(y, x, ch);

注意:我只是这个的负责人,但我自己没有测试过。

二:

printf("\033[%d;%df", y, x);
fflush(stdout);
printf("Hello, I will be placed at (x,y)\n");

我确定这个工作。

祝你好运!

于 2011-07-04T18:45:54.700 回答
0

我写了这段代码来自动解决这个问题。调用它而不是 scr.addstr() 它将负责执行正确的 addstr/insstr 命令以使其工作。

def cwrite(scr, row, col, str, attr=0):
    max = scr.getmaxyx()
    if row < max[0] - 1:
        scr.addstr(row, col, str, attr)
    elif row == max[0] - 1:
        if len(str) + col >= max[1]:
            offset = max[1] - col - 2
            scr.addstr(row, col, str[:offset])
            scr.addstr(row, max[1] - 2, str[offset + 1], attr)
            scr.insstr(row, max[1] - 1, str[offset], attr)
        else:
            scr.addstr(row, col, str, attr)
于 2013-10-22T11:56:09.513 回答