我注意到一些诅咒应用程序(例如 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/