代码之家  ›  专栏  ›  技术社区  ›  John Zwinck

使用GNU读线;如何在同一计划中添加ncurses?

  •  21
  • John Zwinck  · 技术社区  · 17 年前

    标题比我的实际目标更具体:

    我想为这个程序添加一个功能:为输出添加一个单独的“窗口”。我想用ncurses来做这个。但它似乎是从 ncurses FAQ 这两个库不容易一起使用。

    我可以考虑使用 Editline 或 tecla

    哦,对彩色文本的支持可能会得到额外的分数。我怀疑我可能可以用Readline做到这一点,所以这可能是一个单独的问题,但如果我的问题的解决方案也能让我很容易地在输出中添加一些颜色,那就更好了。

    我正在使用Ubuntu Hardy(Linux 2.6)。

    6 回复  |  直到 17 年前
        1
  •  15
  •   Ulfalizer    11 年前

    我现在在GitHub上编写了一个简单的示例程序: https://github.com/ulfalizer/readline-and-ncurses .

    它支持无缝高效的终端大小调整和多字节/组合/宽字符。代码中有一些有用的注释。

    截图如下:

    Screenshot of program combining ncurses and readline

        2
  •  6
  •   John Zwinck    13 年前

    我找了些东西,看来你运气不好。

    SLang , Newt 和 Turbo Vision . 俚语不仅仅是屏幕处理,因此更重要 处理和是非常简单的,但太简单和单线程模式 为了你的目的,我想。

    Turbo vision是Borland的文本模式图形库,由 他们所有的工具都在80年代末90年代初。博兰公布了消息来源 当这类产品的市场萎缩时,就会出现代码 现在是linux的一个端口(旁注, this project 似乎已经写好了 它自己的turbo vision实现)。那个港口并没有死(没有死) 今年有一些cvs更新编译得很好(旧版本) 没有),但我发现的所有电视示例都不是最新的,我 在放弃其余部分之前,他只编译了其中的一部分。 这有点遗憾,因为电视是一个可爱的使用环境。

    对于readline的替代方案,有 libkinput ,这可能有效

    也许一种选择是在ncurses程序的“外部”运行readline 使用 rlwrap ?

        3
  •  5
  •   Ulfalizer    11 年前

    这让我头痛了几个小时,为了避免人们在谷歌上搜索时感到痛苦:

    如果您使用的是ncurses的内置 SIGWINCH 处理 KEY_RESIZE ,请注意,readline会设置 LINES COLUMNS 默认情况下为环境变量。这些将覆盖任何动态尺寸计算(通常使用 ioctl() TIOCGWINSZ )否则,ncurses就可以了,这意味着即使在调整终端大小之后,您也将继续获得初始终端大小。

    rl_change_environment 到 0 在初始化readline之前。

    更新:

    以下是我从readline来源收集的一些附加信息:

    读线 信号绞车 处理代码(在以下情况下使用) rl_catch_sigwinch 是1)是否更新 线 和 柱 信号绞车 )仅在每次安装期间安装 rl_callback_read_char() rl_回调_读取_字符()

        4
  •  4
  •   Guillaume    13 年前

    因此,gdb同时使用readline和ncurses。如果您对此感兴趣,我建议您检查一下它们的实现: http://sourceware.org/git/?p=gdb.git;a=blob;f=gdb/tui/tui-io.c

        5
  •  3
  •   dpc.pw    16 年前
        6
  •  2
  •   mohan43u    14 年前

    我不确定你试过哪个版本。截至今天(2012.09.14),它非常简单,我们只需要将自定义函数与以下函数指针挂钩。

    rl_getch_function
    rl_redisplay_function
    rl_completion_display_matches_hook
    

    我做了一些合理的事情 here

    推荐文章