使用(n)curses在终端的右侧或底部打印内容

4

如何使用n/curses在终端窗口的右侧和/或底部打印内容?

这里是一个简单的示意图:

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













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

可以使用 C 或 Python 编写解决方案。

谢谢!

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");

这有点随意,这是我大多数 curses 编程的做法。


我应该在哪里导入 mvprintw - alper
通常在顶部。我认为对于Python来说只需要“import curses”。这已经过去十年了,伙计。 - Philip

1

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

一: 来自ncurses库的move(int row, int col)。但是,如果您在此语句之后要执行某些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");

我相信这个可以运行。

祝你好运!


2
你的第二个程序并不是“使用”ncurses,而是“绕过”ncurses。 - ninjalj
@ninjalj 这可能有点微妙,但这就是它被列为第二的原因。 - Ram
1
你会如何计算 x 和 y? - Aaron Yodaiken

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接