【问题标题】:Displaying text with trailing whitespace in curses在curses中显示带有尾随空格的文本
【发布时间】:2023-03-07 22:37:01
【问题描述】:

我目前正在开发一个文本编辑器,这是我无法弄清楚的奇怪之处之一!

我将从一个减少问题的小演示脚本开始

import curses


def c_main(stdscr):
    lines = (
        'welcome to my simulation!',
        'this line has trailing whitespace:    ',
        'q: quit',
        'r: full redraw (removes trailing ws?)',
        '',
    )
    x = y = 0

    while True:
        # RENDERING
        for i, line in enumerate(lines):
            stdscr.insstr(i, 0, lines[i].ljust(curses.COLS))
        # END RENDERING

        stdscr.move(y, x)

        wch = stdscr.get_wch()
        if wch == curses.KEY_RESIZE:
            curses.update_lines_cols()
        elif wch == curses.KEY_RIGHT:
            x += 1
            if x > len(lines[y]):
                x = 0
                y = min(y + 1, len(lines) - 1)
        elif wch == curses.KEY_LEFT:
            if x != 0 or y != 0:
                x -= 1
                if x < 0:
                    y = max(y - 1, 0)
                    x = len(lines[y])
        elif wch == curses.KEY_DOWN:
            y = min(y + 1, len(lines) - 1)
            x = min(x, len(lines[y]))
        elif wch == curses.KEY_UP:
            y = max(y - 1, 0)
            x = min(x, len(lines[y]))
        elif wch == 'r':
            stdscr.move(0, 0)
            for i in range(len(lines)):
                stdscr.insstr(i, 0, ' ' * curses.COLS)
            stdscr.refresh()
        elif wch == 'q':
            return


if __name__ == '__main__':
    exit(curses.wrapper(c_main))

那里的大部分代码只是为了让您可以左右箭头键来演示问题。实际的渲染代码标有# RENDERING 注释。


演示问题:

  1. python3 demo.py启动脚本
  2. 用鼠标突出显示第二行 -- 注意尾随空格不可突出显示
  3. 将光标导航到第二行的末尾(最短的组合是downdownleft
  4. left,然后按right(不知道为什么,这是制作可重复指令所必需的)
  5. 远离第二行的末尾(最短的组合是 down
  6. 现在注意尾随空格是高亮的
  7. r 触发完全重绘
  8. 再次注意尾随空格不可突出显示

所以问题是,我如何正确呈现尾随空格,以便从终端复制粘贴保留该内容(并且不需要用户在那里导航光标)

【问题讨论】:

  • 诅咒 优化 写入屏幕的文本:您输入的内容仅 看起来 像您要显示的内容,但实际文本可以包括不会产生空白的清除操作,您可以选择(至少对于某些终端)。
  • @ThomasDickey 是的,我知道这一点,这不是我在这里问的——我问的关于其他诅咒实用程序(例如nano

标签: python ncurses python-curses


【解决方案1】:

选择行为取决于终端。我认为你无法在诅咒级别控制它。

【讨论】:

  • 我找不到任何不允许突出显示 echo "foo " 中的空白的终端,所以这充其量只是一个逃避回答,并没有解决问题
猜你喜欢
  • 1970-01-01
  • 2012-06-27
  • 2010-12-17
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 1970-01-01
  • 2018-07-04
相关资源
最近更新 更多