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`.
Metadata
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 | Provenance | Actions |
|---|---|---|---|---|
| rlane_libcurses-1.0.12.tar.gz | 52.4 kB | Without provenance | Details for rlane_libcurses-1.0.12.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| rlane_libcurses-1.0.12-py3-none-any.whl | Python 3 | none | any | Details for rlane_libcurses-1.0.12-py3-none-any.whl |
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
|
Security for rlane-libcurses 1.0.12
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.