区分 curses 中的 ^J 和 <Enter>
Differentiate between ^J and <Enter> in curses
我注意到一些 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>
(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'
我注意到一些 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>
(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'