Ncurses und CDK

Ncurses und CDK
Photo by Florian Olivo / Unsplash

Hey Coder! 🖥️ Textbasierte Interfaces rocken – so baust du sie mit Ncurses, CDK & Urwid

Du hast Bock auf retro-modernes Coding? Textbasierte Benutzeroberflächen (TUIs) sind nicht nur nostalgisch cool, sondern auch superpraktisch für Tools, die im Terminal laufen. Kein Browser-Overhead, keine GUI-Bibliotheken – nur purer Code, der deine Users begeistert. Hier zeig ich dir, wie du mit Ncurses, CDK (in C) und Urwid (in Python) richtig ablieferst. Let’s go!


Warum TUIs?

Stell dir vor: Dein Tool läuft auf jedem Linux-Server, braucht kaum Ressourcen und sieht trotzdem clean aus – mit Menüs, Farben und sogar Mausunterstützung. TUIs sind wie die Ninjas der Benutzeroberflächen: schnell, effizient und verdammt stylisch.


Step 1: Installation – Ncurses & CDK auf Debian

Auf Debian-basierten Systemen geht’s fix:

# Ncurses installieren (Grundlage für alles)
sudo apt-get update
sudo apt-get install libncurses5-dev libncursesw5-dev

# CDK draufpacken (Widgets wie Menüs & Textfelder)
sudo apt-get install libcdk5-dev libcdk5-doc

Checke mit pkg-config --modversion ncurses und pkg-config --modversion cdk, ob alles sitzt. Wenn Versionen wie 6.4 (Ncurses) oder 5.0.20240619 (CDK) erscheinen – alles gut!


Step 2: Dein erstes TUI-Programm in C

CDK liefert Widgets, die an den alten SAA-Standard erinnern – klar, benutzerfreundlich und mit Maussupport. Hier ein Mini-Beispiel für ein Menü + Textfeld:

#include <cdk.h>

int main() {
    // Curses initialisieren
    WINDOW *cursesWin = initscr();
    CDKSCREEN *cdkscreen = initCDKScreen(cursesWin);
    initCDKColor();

    // Menü erstellen
    const char *menulist[3][4] = {
        {"Datei", "Öffnen", "Speichern", "Beenden"},
        {"Bearbeiten", "Ausschneiden", "Kopieren", "Einfügen"},
        {"Hilfe", "Über", "", ""}
    };
    CDKMENU *menu = newCDKMenu(cdkscreen, CENTER, TOP, 0, 0, "Hauptmenü");

    // Textfeld hinzufügen
    CDKENTRY *entry = newCDKEntry(cdkscreen, CENTER, CENTER, "Eingabe:", NULL);

    // Navigation zwischen Menü und Textfeld
    int focus = 0;
    while (1) {
        if (focus == 0) {
            activateCDKMenu(menu, NULL);  // Menü steuern
            focus = 1;  // Bei Tab zum Textfeld
        } else {
            activateCDKEntry(entry, NULL);  // Text eingeben
            focus = 0;  // Zurück zum Menü
        }
    }

    // Aufräumen nicht vergessen!
    destroyCDKEntry(entry);
    destroyCDKMenu(menu);
    endCDK();
    return 0;
}

Kompilieren und ausführen:

gcc -o tui_programm tui_programm.c -lcdk -lncurses
./tui_programm

Features:

  • Maus- und Tastaturnavigation
  • Farben, Untermenüs, Textfelder
  • SAA-ähnliches Design 💫

Step 3: Python? Klar, aber mit Urwid!

Die alte pyCDK-Binding ist verstaubt 😬. Für Python nutzen wir deshalb Urwid – modern, aktiv und mega-flexibel.

Installation von Urwid: Es wird empfohlen als normaler User (nicht als root), eine virtuelle Umgebung zu verwenden, um Abhängigkeitskonflikte zu vermeiden:

python3 -m venv venv
source venv/bin/activate
pip install urwid  # sudo apt install python3-urwid python-urwid-doc
import urwid

def menu_click(button):
    printf("Klick auf {button.get_label()}!")

# Menü erstellen
menu = urwid.Pile([
    urwid.Button("Öffnen", on_press=menu_click),
    urwid.Button("Speichern", on_press=menu_click),
    urwid.Button("Beenden", on_press=urwid.ExitMainLoop),
])

# Textfeld hinzufügen
edit = urwid.Edit("Eingabe: ")

# Alles kombinieren
layout = urwid.Filler(urwid.Pile([menu, edit]))
urwid.MainLoop(layout, palette=[("reversed", "black", "white")]).run()

Features:

  • Tab-Navigation zwischen Widgets
  • Einfache Event-Handling mit Lambdas
  • Custom Styles via Palette 🎨

Warum SAA-Standard?

Der SAA-Standard war in den 80ern der Burner für konsistente Oberflächen. CDK und Urwid holen diesen Spirit ins Heute:

  • Klare Menüs mit Pfeiltasten/Maus
  • Textfelder, die sich wie GUI-Elemente anfühlen
  • Farben & Hervorhebungen für bessere UX

Einschränkungen? Klar, kein Tool ist perfekt

  • C/CDK: Du musst die Navigation zwischen Widgets selbst coden.
  • Python/Urwid: Kein 1:1-SAA-Look – aber nah dran.
  • Maus-Support: Funktioniert, aber bei komplexen Layouts wird’s tricky.

Empfehlungen für deine Projekte

  • C + CDK: Wenn du performante, native TUIs willst.
  • Python + Urwid: Für schnelle Prototypen oder wenn du Python liebst.
  • Docs: Schau bei Urwid.org und der CDK-Doku vorbei.

Fazit: Retro-Charm meets Modern Coding

TUIs sind kein alter Hut – sie sind effizient, ressourcensparend und machen einfach Spaß! Mit CDK (C) oder Urwid (Python) baust du Oberflächen, die deine Users lieben werden. Also: Terminal auf, Code schreiben und die Console rocken lassen! 🚀


Über den Autor
Du willst mehr über TUIs, Linux-Tools oder Coding-Hacks erfahren? Folge recode.at für Tutorials, News und Community-Events! 👨💻


Log dich kostenlos ein und lies den Artikel weiter im Memberbereich: