Read single characters and key-strokes
Project description
See it at:
VERSION |
DOWNLOADS |
TESTS |
COVERAGE |
---|---|---|---|
Library to easily read single chars and key strokes.
Quick Start
from getkey import getkey, keys
key = getkey()
if key == keys.UP:
... # Handle the UP key
elif key == keys.DOWN:
... # Handle the DOWN key
elif key == 'a':
... # Handle the `a` key
elif key == 'Y':
... # Handle `shift-y`
else:
# Handle other text characters
buffer += key
print(buffer)
History
This library seems to have started as a gist by Danny Yoo & made the rounds in various versions until Miguel Ángel García turned it into a portable package for their python-inquirer project. Then K.C.Saff forked it & smashed it into this new form for their own command line input library.
Philosophy
Keys will be returned as strings representing the received key codes, however
as some keys may have multiple possible codes on a platform, the key code will
be canonicalized so you can test key == keys.UP
instead of
key in keys.UP
. This means non-control keys will be returned just as
the text they represent, and you can just as easily test key == 'a'
to
see if the user pressed a
.
In addition, by default we will throw KeyboardInterrupt
for
Ctrl-C
which would otherwise be suppressed. However, it is possible
to disable this if you wish:
from getkey import plaform
my_platform = platform(interrupts={})
my_getkey = my_platform.getkey
Now my_getkey
will be a function returning keys that won’t throw on
Ctrl-C
. Warning! This may make it difficult to exit a running script.
Plans
This library will not hit 1.0 until we can verify it works correctly with unicode & international keyboards. This is not yet tested.
Documentation
Installation
pip install getkey
The getkey
library is compatible with python 2.7, and 3.2+.
Usage
Usage example:
from getkey import getkey, keys
key = getkey()
if key == keys.UP:
... # Handle the UP key
elif key == keys.DOWN:
... # Handle the DOWN key
... # Handle all other desired control keys
else: # Handle text characters
buffer += key
print(buffer)
Please consult tools/keys.txt
for a full list of key names available on
different platforms, or tools/controls.txt
for the abridged version
just containing control (normally non-printing) characters.
API
There is one primary method:
getkey(blocking=True)
Reads the next key-stroke from stdin
, returning it as an string.
A key-stroke can have:
1 character for normal keys: ‘a’, ‘z’, ‘9’…
1 character for certain control combinations: ‘x01’ as Ctrl-A, for example
more for other control keys (system dependent, but with portable names)
check
tools/keys.txt
for keys available on different systems.
Interpreting the keycode response is made easier with the keys
object:
keys
Contains portable names for keys, so that keys.UP
will mean the up
key on both Linux or Windows, even though the actual key codes are
different.
Because the list of key names is generated dynamically, please consult
tools/keys.txt
for a full list of key names. It is not necessary to
use key names for single characters: if the user pushes a the key returned
is very portably just that single character a itself.
keys.name(code)
Returns the canonical name of the key which yields this key code on this
platform. One key code may have multiple aliases, but only the canonical
name will be returned. The canonical names are marked with an
asterisk in tools/keys.txt
.
OS Support
This library has been tested on both Mac & Windows, & the Mac keys should work much the same on Linux. If planning to use more esoteric control keys, please verify compatibility by checking
How to contribute
You can download the code, make some changes with their tests, and make a pull-request.
In order to develop or running the tests, you can do:
Clone the repository.
git clone https://github.com/kcsaff/getkey.git
Create a virtual environment:
virtualenv venv
Enter in the virtual environment
source venv/bin/activate
Install dependencies
pip install -r requirements.txt -r requirements-dev.txt
Run tests
make
Please, Execute the tests before any pull-request. This will avoid invalid builds.
License
Copyright (c) 2014, 2015 Miguel Ángel García (@magmax9).
Copyright (c) 2016 K.C.Saff (@kcsaff)
Based on previous work on gist getch()-like unbuffered character reading from stdin on both Windows and Unix (Python recipe), started by Danny Yoo.
Licensed under the MIT license.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file getkey-0.6.5.tar.gz
.
File metadata
- Download URL: getkey-0.6.5.tar.gz
- Upload date:
- Size: 13.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 68c7c702c3b34deacf427f6c0f1fd66c5c2aa12d7801aa32442fc1a71c8ce059 |
|
MD5 | 1a6ef21e97b9eca4f285acd8396566de |
|
BLAKE2b-256 | 74f23312ea94369f410967667eeca61d261cdf3037df6ea827078ac7c5321150 |