onkeypress
Allows users to make terminal react to keypresses
installation
pip install onkeypress
quickstart
from onkeypress import while_not_exit, onkeypress, Key
def print_up():
print("up is pressed")
def print_down():
print("down is pressed")
while_not_exit(
onkeypress(Key.UP).call(print_up),
onkeypress(Key.DOWN).call(print_down),
exit_key=Key.ENTER,
)
| key pressed | printed text |
|---|---|
| Up | up is pressed |
| Down | down is pressed |
If you hit Enter (or Control-C), the program exits
A slightly harder example using .args(*args) and .kwargs(**kwargs)
from onkeypress import while_not_exit, onkeypress, Key
def myfunc(*args, **kwargs):
print(f"{args=} {kwargs=}")
while_not_exit(
onkeypress(Key.UP).call(myfunc).args("up"),
onkeypress(Key.DOWN).call(myfunc).kwargs(key="down"),
onkeypress("a").call(myfunc).args("a").kwargs(key="a"),
onkeypress("s").call(myfunc).args("s", "s").kwargs(key="s", val="s"),
exit_key=Key.ENTER,
)
| key pressed | printed text |
|---|---|
| Up | args=('up',) kwargs={} |
| Down | args=() kwargs={'key': 'down'} |
| a | args=('a',) kwargs={'key': 'a'} |
| s | args=('s', 's') kwargs={'key': 's', 'val': 's'} |
We can use Key.ALL_OTHERS to match all other keys
from onkeypress import while_not_exit, onkeypress, Key
import random
def print_1_to_5_chars(char: str):
if char.isalnum():
print(char * random.randrange(1, 5), end="")
else:
print(char, end="")
while_not_exit(
onkeypress(Key.ALL_OTHERS).call(print_1_to_5_chars),
exit_key=Key.CONTROL_C,
)
Key.ALL_OTHERS match all other keys which were not declared
^ when we type a letter, it randomly repeats itself 1-5 times
More advanced example: Arrow keys to move "X" around in 6x6 board
from onkeypress import while_not_exit, onkeypress, Key
from copy import deepcopy
from unprint import unprint
BOARD = [["-"]*6 for _ in range(6)]
def print_board(board: list, user_row: int, user_col: int):
board = deepcopy(board)
board[user_row][user_col] = "X"
[print(*row, sep=" ") for row in board]
print()
print_board(BOARD, 0, 0)
state = {"row":0 , "col": 0}
def handle_keypress(row_diff: int, col_diff: int, state: dict):
new_row = state["row"] + row_diff
new_col = state["col"] + col_diff
if new_row not in range(6) or new_col not in range(6):
return
state["row"], state["col"] = new_row, new_col
unprint(7)
print_board(BOARD, new_row, new_col)
while_not_exit(
onkeypress(Key.UP).call(handle_keypress).args(-1, 0, state),
onkeypress(Key.DOWN).call(handle_keypress).args(1, 0, state),
onkeypress(Key.LEFT).call(handle_keypress).args(0, -1, state),
onkeypress(Key.RIGHT).call(handle_keypress).args(0, 1, state),
exit_key=Key.CONTROL_C,
)
Note - try hitting your arrow keys. Notice that your "X" moves around
Release files for onkeypress 0.0.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| onkeypress-0.0.7.tar.gz | 4.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| onkeypress-0.0.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 9.4 kB
Release files / onkeypress-0.0.7.tar.gz
| Download URL | onkeypress-0.0.7.tar.gz |
|---|---|
| Size | 4.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a37438949e8e5414f1bea2d91e4bbc384b9f2b460d1d5da50059eaa69ddff26b
|
|
BLAKE2b-256 checksum How to use checksums |
ff532e77677e47ea71dba0d4066294e3d0050d63a854924ff2dd645732441d3c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.0.1 CPython/3.12.10
|
Release files / onkeypress-0.0.7-py3-none-any.whl
| Download URL | onkeypress-0.0.7-py3-none-any.whl |
|---|---|
| Size | 5.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b13ca34518611c197dd0a8bc35e533ee47872894ae7424c71d3c8ef44ad8a820
|
|
BLAKE2b-256 checksum How to use checksums |
1a344a613ce0d33f3a25f665cb652494ef2ca32d92240b91094f56ee5eb3f626
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.0.1 CPython/3.12.10
|