python - 区分curses中的^J和<Enter>

标签 python python-3.x curses

我注意到一些诅咒应用程序(例如 vim )对待 ^J<Enter>作为相同的按键

我还注意到其他人将它们视为单独的键(例如 nano 使用 ^J 表示“Justify”)

在我的特定情况下,我使用 curses通过 python,但是两次按下似乎给出相同的值

这是一个小型演示应用程序:

import curses


def c_main(stdscr):
    wch = ''
    while wch != 'q':
        stdscr.addstr(0, 0, 'Press a key, q to quit: ')
        wch = stdscr.get_wch()
        key = wch if isinstance(wch, int) else ord(wch)
        keyname = curses.keyname(key)
        stdscr.insstr(1, 0, f'> got {wch!r} {key!r} {keyname!r}{" " * 80}')


def main():
    curses.wrapper(c_main)


if __name__ == '__main__':
    exit(main())

对于两者^J (control + J) 和 <enter> (输入 key )我得到以下信息:

Press a key, q to quit: 
> got '\n' 10 b'^J'

如何区分这两者?

最佳答案

设置 curses.nonl() 禁用 <enter> 的翻译'\n'的关键

例如:

import curses


def c_main(stdscr):
    curses.nonl()
    wch = ''
    i = 1
    while wch != 'q':
        stdscr.addstr(0, 0, 'Press a key, q to quit: ')
        stdscr.keypad(False)
        wch = stdscr.get_wch()
        key = wch if isinstance(wch, int) else ord(wch)
        keyname = curses.keyname(key)
        stdscr.insstr(i, 0, f'> got {wch!r} {key!r} {keyname!r}{" " * 80}')
        i += 1


def main():
    curses.wrapper(c_main)

然后发出^J接下来是 <enter> :

Press a key, q to quit: 
> got '\n' 10 b'^J'
> got '\r' 13 b'^M'

关于python - 区分curses中的^J和<Enter>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57742590/

相关文章:

python - 是否可以将 Python 项目的 "venv"文件夹发布到我的 GIT 存储库中?

python - pygame 不显示我的图像

c - ncurses 无法识别箭头键宏

python - 使用 Python 脚本在 Ubuntu 终端中显示 UTF 8 字符串

python - 如何使用 Django Rest Framework 包含相关模型字段?

python-3.x - 将tornado与aiohttp(或其他基于asyncio的库)一起使用

python - 如何删除python中的诅咒窗口并恢复背景窗口?

python - 就地打印并更新矩阵

Python元组字典加法

Python 列表帮助(递增计数、追加)