TTY
Terminal-UI-Modul für Roh-Eingabeereignisse, formatierte Ausgabe und Layout-Hilfsfunktionen.
local tty = require("tty")Eingabe-Schleife
Abschnitt betitelt „Eingabe-Schleife“Starte den Roh-Eingabe-Reader, abonniere Ereignisse und verarbeite sie in einer Schleife:
local tty = require("tty")local io = require("io")
local function handler() tty.start() local events = tty.events()
while true do local ev = events:receive() if not ev then break end
if ev.type == "key" then if ev.key == "q" or (ev.ctrl and ev.key == "c") then break end io.print("Key: " .. ev.key)
elseif ev.type == "resize" then io.print("Size: " .. ev.width .. "x" .. ev.height) end end
tty.stop()endEingabesteuerung
Abschnitt betitelt „Eingabesteuerung“tty.start()
Abschnitt betitelt „tty.start()“Aktiviert den Roh-Eingabemodus des Terminals. Das Terminal wechselt in den Raw-Modus und beginnt, Ereignisse auszugeben.
local ok, err = tty.start()Rückgabe: boolean, error
tty.stop()
Abschnitt betitelt „tty.stop()“Deaktiviert die Roh-Eingabe und stellt das Terminal in den Normalmodus zurück.
local ok, err = tty.stop()Rückgabe: boolean, error
tty.events()
Abschnitt betitelt „tty.events()“Abonniert Terminal-Ereignisse und gibt einen Channel zurück. Ereignisse werden als Tabellen mit einem type-Feld geliefert.
local events = tty.events()Rückgabe: EventChannel, error
tty.screen_size()
Abschnitt betitelt „tty.screen_size()“Fragt die aktuellen Terminal-Dimensionen ab.
local width, height, err = tty.screen_size()Rückgabe: number, number, error
tty.mouse(enable)
Abschnitt betitelt „tty.mouse(enable)“Aktiviert oder deaktiviert das Maus-Ereignis-Tracking.
local ok, err = tty.mouse(true)| Parameter | Typ | Beschreibung |
|---|---|---|
enable | boolean | true zum Aktivieren, false zum Deaktivieren |
Rückgabe: boolean, error
Ereignistypen
Abschnitt betitelt „Ereignistypen“Ereignisse sind Tabellen mit einem type-Feld, das bestimmt, welche anderen Felder vorhanden sind.
Key-Ereignis
Abschnitt betitelt „Key-Ereignis“{ type = "key", key = "a", -- printable character or key name key_type = "runes", -- "runes" for printable, or special key name action = "press", -- "press" or "release" alt = false, ctrl = false, shift = false}Maus-Ereignis
Abschnitt betitelt „Maus-Ereignis“Erfordert tty.mouse(true).
{ type = "mouse", action = "press", -- "press", "release", "motion", "wheel" button = "left", -- button name x = 10, y = 5, alt = false, ctrl = false, shift = false}Resize-Ereignis
Abschnitt betitelt „Resize-Ereignis“{type = "resize", width = 120, height = 40}Start-Ereignis
Abschnitt betitelt „Start-Ereignis“Wird einmal nach tty.start() mit den initialen Dimensionen ausgegeben.
{type = "start", width = 120, height = 40}Focus-Ereignis
Abschnitt betitelt „Focus-Ereignis“{type = "focus", focused = true}Paste-Ereignis
Abschnitt betitelt „Paste-Ereignis“{type = "paste", text = "pasted content"}Tastenbindungen
Abschnitt betitelt „Tastenbindungen“Erstelle wiederverwendbare Tastenbindungen, die mit Tastenereignissen abgeglichen werden:
local quit = tty.bind({ keys = {"q", "ctrl+c"}, help = {key = "q/ctrl+c", desc = "quit"}})
-- In event loopif quit:matches(ev) then breakendtty.bind(config)
Abschnitt betitelt „tty.bind(config)“| Feld | Typ | Beschreibung |
|---|---|---|
keys | string[] | Zu vergleichende Tastenmuster (z. B. "a", "ctrl+c", "enter") |
help | table | Optional. {key = "...", desc = "..."} für Hilfetext |
Rückgabe: KeyBinding
KeyBinding-Methoden
Abschnitt betitelt „KeyBinding-Methoden“| Methode | Rückgabe | Beschreibung |
|---|---|---|
matches(event) | boolean | Prüft, ob ein Tastenereignis zu dieser Bindung passt |
set_enabled(bool) | self | Aktiviert oder deaktiviert die Bindung |
is_enabled() | boolean | Prüft, ob die Bindung aktiviert ist |
help() | table | Gibt {key, desc}-Hilfeinformationen zurück |
Erstelle formatierte Textausgabe mit lipgloss-basiertem Styling. Alle Stilmethoden geben einen neuen Stil zurück (unveränderlich).
local tty = require("tty")local io = require("io")
local title = tty.style() :bold() :foreground("#FF0000") :padding(0, 1)
local box = tty.style() :border(tty.borders.ROUNDED) :border_foreground("#00FF00") :width(40) :padding(1, 2)
io.print(box:render(title:render("Hello"), "World"))tty.style()
Abschnitt betitelt „tty.style()“Erstellt einen neuen leeren Stil.
Rückgabe: Style
Style-Methoden
Abschnitt betitelt „Style-Methoden“Alle Methoden geben einen neuen Style zurück und können verkettet werden.
Textdekoration
Abschnitt betitelt „Textdekoration“| Methode | Parameter | Beschreibung |
|---|---|---|
foreground(color) | string | Textfarbe (Hex "#FF0000", ANSI "9" oder Name) |
background(color) | string | Hintergrundfarbe |
bold(enable?) | boolean | Fetter Text (Standard: true) |
italic(enable?) | boolean | Kursiver Text |
underline(enable?) | boolean | Unterstrichener Text |
strikethrough(enable?) | boolean | Durchgestrichener Text |
faint(enable?) | boolean | Gedimmter Text |
blink(enable?) | boolean | Blinkender Text |
reverse(enable?) | boolean | Vorder- und Hintergrund tauschen |
| Methode | Parameter | Beschreibung |
|---|---|---|
width(n) | number | Feste Breite |
height(n) | number | Feste Höhe |
max_width(n) | number | Maximale Breite |
max_height(n) | number | Maximale Höhe |
padding(...) | numbers | Padding (CSS-Stil: oben, rechts, unten, links) |
margin(...) | numbers | Margin (CSS-Stil) |
align(pos) | number | Horizontale Ausrichtung |
align_vertical(pos) | number | Vertikale Ausrichtung |
inline(enable?) | boolean | Inline-Rendering-Modus |
| Methode | Parameter | Beschreibung |
|---|---|---|
border(name, ...) | string, booleans | Rahmenstil, optionale Pro-Seiten-Toggles |
border_foreground(...) | strings | Rahmenfarbe(n) |
border_background(...) | strings | Rahmen-Hintergrundfarbe(n) |
Sonstiges
Abschnitt betitelt „Sonstiges“| Methode | Beschreibung |
|---|---|
render(...) | Rendert Strings mit angewendetem Stil |
copy() | Erstellt eine Kopie dieses Stils |
Rahmenkonstanten
Abschnitt betitelt „Rahmenkonstanten“tty.borders.NORMALtty.borders.ROUNDEDtty.borders.THICKtty.borders.DOUBLEtty.borders.HIDDENAusrichtungskonstanten
Abschnitt betitelt „Ausrichtungskonstanten“tty.align.LEFT -- 0tty.align.CENTER -- 0.5tty.align.RIGHT -- 1Text-Hilfsfunktionen
Abschnitt betitelt „Text-Hilfsfunktionen“Layout- und Messfunktionen für formatierten Text. Verfügbar unter tty.text.
Messung
Abschnitt betitelt „Messung“local w = tty.text.width("hello") -- printable width (ANSI-aware)local h = tty.text.height("a\nb\nc") -- line countlocal w, h = tty.text.size("hello\nworld") -- bothVerbinden
Abschnitt betitelt „Verbinden“-- Side-by-side verbinden, oben ausgerichtetlocal row = tty.text.join_horizontal(tty.text.position.TOP, left, right)
-- Vertikal stapeln, zentriertlocal col = tty.text.join_vertical(tty.text.position.CENTER, top, bottom)Maximale Dimensionen
Abschnitt betitelt „Maximale Dimensionen“local w = tty.text.max_width({"short", "a longer string"}) -- breitesteslocal h = tty.text.max_height({"one\ntwo", "single"}) -- höchstesPlatzierung
Abschnitt betitelt „Platzierung“Platziert einen String in einer Box mit gegebenen Dimensionen:
-- Zentrieren in einer 80x24-Boxlocal out = tty.text.place(80, 24, tty.text.position.CENTER, tty.text.position.CENTER, content)
-- Nur horizontallocal out = tty.text.place_horizontal(80, tty.text.position.RIGHT, content)
-- Nur vertikallocal out = tty.text.place_vertical(24, tty.text.position.BOTTOM, content)Positionskonstanten
Abschnitt betitelt „Positionskonstanten“tty.text.position.TOP -- 0tty.text.position.LEFT -- 0tty.text.position.CENTER -- 0.5tty.text.position.BOTTOM -- 1tty.text.position.RIGHT -- 1Siehe auch
Abschnitt betitelt „Siehe auch“- Terminal-I/O — stdin/stdout/stderr-Operationen
- Terminal-Host — Terminal-Host-Konfiguration