libcurses
Framework and tools for multi-threaded, curses(3)-based, terminal applications.
-
Write to screen from multiple threads.
- Use
libcurses.wrapperinstead ofcurses.wrapper. - Use
libcurses.getkeyinstead ofcurses.getch. - Use
libcurses.getlineinstead ofcurses.getstr. - Preserve the cursor with context manager
libcurses.preserve_cursor.
- Use
-
Register callbacks with
register_fkeyto handle function-keys pressed duringgetkeyandgetlineprocessing. -
Register callbacks with
add_mouse_handlerto handle mouse events duringgetkeyandgetlineprocessing. -
Manage a logger destination,
LogSink, to write to a curses window. -
A
Gridframework.
class Grid
Grid of windows.
A rectangular collection of windows with shared (collapsed) borders that resize the windows to either side (syncronized shrink/expand) when moused upon.
+-------+---+------+ example `Grid`, 9 windows.
| | | |
+-------+---+------+
| | |
+------+----+------+
| | |
+------+--+--------+
| | |
+---------+--------+
Drag and drop an interior border to resize the windows on either side.
Double-click an interior border to enter Resize Mode: * scroll-wheel and arrow-keys move the border, and * click anywhere, Enter and Esc to exit Resize Mode.
Grids also provide a wrapper around curses.newwin that takes positioning
parameters that describe the spatial-relationship to other windows on the
screen, instead of (y,x) coordinates:
+--------+ +--------+
| | | ^ |
| |<------ left2r --| | |
| | | | |
|<---------------- left ---| | |
| | | | |
+--------+ +--|-----+
| | | ^
bottom2t | | bottom top | | top2b
v | | |
+-----|--+ +--------+
| | | | |
| | |-- right ---------------->|
| | | | |
| | |-- right2l ----->| |
| v | | |
+--------+ +--------+
For example, this 3x13 grid with three 3x5 boxes may be described at least three different ways:
+---+---+---+
| a | b | c |
+---+---+---+
grid = Grid(curses.newwin(3, 13))
1) a = grid.box('a', 3, 5)
b = grid.box('b', 3, 5, left2r=a)
c = grid.box('c', 3, 5, left2r=b)
2) c = grid.box('c', 3, 5, right=grid)
b = grid.box('b', 3, 5, right=c)
a = grid.box('a', 3, 5, right=b)
3) a = grid.box('a', 3, 5, left=grid)
c = grid.box('c', 3, 5, right=grid)
b = grid.box('b', 3, 0, left2r=a, right=c)
If two endpoints are given (such as 3b), the length will be calculated to fill the gap between the endpoints.
class LogSink
Logger sink to curses window.
The LogSink class provides a logger destination that writes log
messages to a curses window, and methods that control various
logging features.
class MouseEvent
Wrap curses.getmouse with additional, convenience-properties.
MouseEvent encapsulates the results of curses.getmouse,
x x-coordinate.
y y-coordinate.
bstate bitmask describing the type of event.
and provides these additional properties:
button button number (1-5).
nclicks number of clicks (1-3).
is_pressed True if button is pressed.
is_released True if button was just released.
is_alt True if Alt key is held.
is_ctrl True if Ctrl key is held.
is_shift True if Shift key is held.
is_moving True if mouse is moving.
method add_mouse_handler
Call func with args when mouse event happens at (y, x).
method clear_mouse_handlers
Remove all mouse handlers.
function get_colormap
get_colormap() -> dict[str, int]
Return map of `loguru-level-name` to `curses-color/attr`.
Call after creating all custom levels with `logger.level()`.
Map is build once and cached; repeated calls return same map.
function getkey
getkey(win: _curses.window | None = None, no_mouse: bool = False) -> int | None
Read and return a character from window.
Args:
win: curses window to read from.
no_mouse: ignore mouse events (for internal use).
Return:
-1 when no-input in no-delay mode, or
None on end of file, or
>=0 int character read.
function getline
getline(win: _curses.window) -> str | None
Read and return a line of input from window.
A line is terminated with CR, LF or KEY_ENTER.
Backspace deletes the previous character.
NAK (ctrl-U) kills the line.
Mouse events are handled.
function preserve_cursor
preserve_cursor() -> Iterator[tuple[int, int]]
Context manager to save and restore the cursor.
function register_fkey
register_fkey(func: Callable[[int], NoneType], key: int = 0) -> None
Register `func` to be called when `key` is pressed.
Args:
func: callable, to be called on receipt of `key`.
key: the key to be captured, e.g., `curses.KEY_F1`,
or zero (0) for all keys.
`func` is appended to a list for the `key`;
pass func=None to remove list of funcs for `key` from registry.
function wrapper
wrapper(func: Callable[[_curses.window], NoneType]) -> None
Use instead of `curses.wrapper`.
Release files for rlane-libcurses 1.0.12
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rlane_libcurses-1.0.12.tar.gz | 52.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rlane_libcurses-1.0.12-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 77.6 kB
Release files / rlane_libcurses-1.0.12.tar.gz
| Download URL | rlane_libcurses-1.0.12.tar.gz |
|---|---|
| Size | 52.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
678924aa69c5bc81d796a1226b0c54c41e18cc70d6fb6de6357f923c1ded78f5
|
|
BLAKE2b-256 checksum How to use checksums |
d6465b0de283f9c8fe824a33b2fea1816fe24a0b291ee2537e71087027cb56bd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.13.0
|
Release files / rlane_libcurses-1.0.12-py3-none-any.whl
| Download URL | rlane_libcurses-1.0.12-py3-none-any.whl |
|---|---|
| Size | 25.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
45973c5fec454a02bc1e98e9163dd53b595061651e9ad513f4cf56f2ffaf58ba
|
|
BLAKE2b-256 checksum How to use checksums |
cef007a3ab719304b116ea1c4efee5f565b818cdcb21972fd9ef177dbf7259a1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.13.0
|