开发者

NCurses and ESC,ALT keys

I have a problem with NCurses... i need to handle all keys like Esc, Alt+F etc. Problem is that the codes are similar... i.e:


Esc - 27


Alt+A - 27 65


As an example there is double code for Alt+[key] combination开发者_运维问答 what similar to Esc key... Any ideas how handle that?


Here is an example for python:

key = self.screen.getch()
if key == ord('q'): # quit
    go = False
elif key == 27: # Esc or Alt
    # Don't wait for another key
    # If it was Alt then curses has already sent the other key
    # otherwise -1 is sent (Escape)
    self.screen.nodelay(True)
    n = self.screen.getch()
    if n == -1:
        # Escape was pressed
        go = False
    # Return to delay
    self.screen.nodelay(False)


Resolved by:

  1. Use noecho or timeout mode
  2. Check for 27(ALT or ESC) code... if pass:
  3. try to read another code
  4. if another code is ERR then.. you have ESC key in other way you have ALT+another code


if you don't care to support users who hit escape and then another key (a holdover from old terminals vt100 era terminals I think), and just want to respond to the physical keys on the pc 101 key-board, you can set this at the start of your (c) code:

ESCDELAY = 10;

the man page explains what's going on in more detail: https://man7.org/linux/man-pages/man3/curs_variables.3x.html

then use keyname() to get an easily strcmp'ed human readable name for what was pressed such as ^c for control+c. See How to get Ctrl, Shift or Alt with getch() ncurses?


You can use curses.ascii.ESC

  • https://docs.python.org/3/library/curses.ascii.html#module-curses.ascii
  • https://github.com/python/cpython/blob/master/Lib/curses/ascii.py
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜