Reputation: 1497
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?
Upvotes: 16
Views: 38306
Reputation: 511
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?
Upvotes: 5
Reputation: 799
You can use curses.ascii.ESC
Upvotes: 0
Reputation: 1497
Resolved by:
Upvotes: 10
Reputation: 398
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)
Upvotes: 19