Was es ist : Eine Bibliothek, die komplexe Tuis auf modernen Terminal -Emulatoren ermöglicht und lebendige Farben, Multimedia, Fäden und Unicode bis hin zu maximal möglichem Grad unterstützt. Die Dinge können mit Nicht-, die einfach nicht mit NCURSES erledigt werden können. Es ist außerdem schnell wie Scheiße. Was es nicht ist : Eine Quellen-kompatible X/Open-Flüte-Implementierung, noch ein Ersatz für NCURSES auf vorhandenen Systemen.
Weitere Informationen finden Sie in Daankwiki und The Man Pages. Darüber hinaus gibt es Doxygenausgang. Um die Mailingliste zu abonnieren, senden Sie eine E -Mail an [email protected] (der E -Mail -Inhalt spielt keine Rolle). Ich habe einen kohärenten Reiseführer geschrieben, der kostenlosen Download (oder Taschenbuchkauf) zur Verfügung steht.
Ich habe noch nicht viele dokumentierte Beispiele hinzugefügt, aber SRC/ POC/ und SRC/ POCPP/ enthalten viele kleine C- und C ++ - Programme. notcurses-demo deckt den größten Teil der Funktionalität von Notcurses ab.
Wenn Sie keine Anwendungen in einem Docker ausführen, konsultieren Sie bitte unten "Umgebungsnotizen".



Nichtcurses nach dem Rahmen der Einzel -UNIX -Spezifikation, die X/Open verflucht. Für einen notwendigen Hintergrund wenden Sie sich an Thomas E. Dickeys hervorragende und maßgebliche NCURSSE -FAQ. Daher ist es nicht ein Drop-In-Ersatz.
Wo immer möglich, nutzen nicht die Begründung die mit NCURSES verschickte Terminfo -Bibliothek und profitiert stark von ihrer Portabilität und Gründlichkeit.
NotCurses eröffnet die erweiterte Funktionalität für den interaktiven Benutzer zu Workstations, Telefonen, Laptops und Tablets, möglicherweise auf Kosten von z. B. einigen Industrie- und Einzelhandelsterminals. Grundsätzlich übernimmt Flüche das Minimum und ermöglicht es Ihnen (mit dem Aufwand), zu steigern, während nicht die Maximum annimmt und bei Bedarf (für sich selbst) (für sich selbst) nach unten geht. Der letztere Ansatz bricht wahrscheinlich auf ältere Hardware aus, aber der erstere Ansatz führt dazu, dass neue Software wie alte Hardware aussieht.
Warum diese nicht standardmäßige Bibliothek verwenden?
Die Sicherheit von Threads und die effiziente Verwendung in parallelen Programmen war von Anfang an eine Überlegung von Design.
Eine geordnete Oberfläche als die durch X/Open kodifizierte: Exportierte Kennungen werden vorangestellt, um gebräuchliche Namespace -Kollisionen zu vermeiden. Wo vernünftiger, static inline -Header-Code verwendet wird. Dies erleichtert Compiler -Optimierungen und verkürzt die Laderzeit. Es können keine Multimedia -Funktionalität erstellt werden, die einen erheblich weniger Abhängigkeitsmengen erfordern.
Alle APIs unterstützen nativ den universellen Zeichensatz (Unicode). Die nccell -API basiert auf dem erweiterten Graphem -Cluster -Konzept von Unicode.
Visuelle Merkmale, einschließlich Bilder, Schriftarten, Video, kontrastischer Text, Sprites und transparenten Regionen. Alle APIs unterstützen die 24-Bit-Farbe nativ, die für das Terminal nach Bedarf quantisiert wurden.
Tragbare Unterstützung für Bitmaping -Grafiken unter Verwendung von Sixel, Kitty und sogar der Linux Framebuffer -Konsole.
Unterstützung für eindeutige Tastaturprotokolle.
"TUI-Modus" erleichtert Hochleistungs-, Nicht-Scrolling-Anwendungen mit Vollbildungs-Vollbild. "CLI -Modus" unterstützt die Bildlaufleistung für Shell -Dienstprogramme, jedoch mit der vollen Leistung von Nicht -Kurs.
Es ist Apache2-lizenziert in seiner Gesamtheit, im Gegensatz zum Drama in mehreren Akten, nämlich die NCURSSE-Lizenz (letzteres wird als "RESTATement of MIT-X11" zusammengefasst).
Ein Großteil des oben genannten kann mit NCURSES aufgenommen werden, aber für NCURSES wurde nicht das ausgelegt . Wenn Sie andererseits auf industrielle oder kritische Anwendungen abzielen oder von der Zeit zu Zuverlässigkeit und Portabilität profitieren möchten, sollten Sie diese feine Bibliothek auf jeden Fall verwenden.
Mindestversionen geben im Allgemeinen die älteste Version an, mit der ich getestet habe. Es kann durchaus möglich sein, noch ältere Versionen zu verwenden. Lassen Sie mich irgendwelche Erfolge wissen!
Weitere Informationen zum Erstellen und zur Installation finden Sie in install.md.
Wenn Sie eine andere Sprache als C verwenden möchten, um mit Notcurses zu arbeiten, sind zahlreiche Wrapper verfügbar. Einige sind in diesem Repository enthalten, während andere extern sind.
| Sprache | Blei (en) | Repository |
|---|---|---|
| Ada | Jeremy Grosser | Jeremygrosser/Notcursseada |
| C ++ | Marek Habersack, Nick Black | intern |
| Pfeil | Nelson Fernandez | kascote/dart_notcurses |
| Julia | Dheepak Krishnamurthy | kdheepak/notcurses.jl |
| Nim | Michael S. Bradley, Jr. | Michaelsbradleyjr/Nim-Notcurses |
| Python | Nick Black | intern |
| Python | IGO95862 | intern |
| Rost | José Luis Cruz | Dankamongmen/libnotcurses-sys |
| Zick | Jakub Dundalek | Dundalek/Notcurses-Zig-Beispiel |
Neun ausführbare Sachen werden als Teil von Notcurses installiert:
ncls : Ein ls , das Multimedia im Terminal zeigtncneofetch : eine Neofetch -Abzockencplayer : Rendern visuelle Medien (Bilder/Videos)nctetris : ein Tetris -Klonnotcurses-demo : Einige Demonstrationscodenotcurses-info : Erkennende und Druckanschlussfunktionen/Diagnostiknotcurses-input : Dekodieren und Drucktastaturen dekodieren und druckennotcurses-tester : Unit-Teststfman : Ein SWANCE Manual Browser Geben Sie das notcurses-demo über das -p -Argument data . Demos, die Datendateien erfordern, werden ansonsten abbrechen. Die in notcurses-demo verwendete Basisverzögerung kann mit -d geändert werden, wodurch ein Gleitkomma-Multiplikator akzeptiert wird. Werte weniger als 1 beschleunigen die Demo, während die Werte von mehr als 1 verlangsamen.
notcurses-tester verlangt ebenfalls, dass data , die mit den erforderlichen Datendateien gefüllt sind, mit -p angegeben werden. Es kann von selbst oder durch make test getestet werden.
Mit -DUSE_PANDOC=on (der Standard) wird eine vollständige Menge von Mannseiten und XHTML aus doc/man erstellt. Die folgende Markdown -Dokumentation ist direkt enthalten:
TERM Umgebungsvariable und verschiedene terminale Emulatoren.Wenn Sie (verständlicherweise) den großen Pandoc -Stapel vermeiden möchten, aber trotzdem manuelle Seiten genießen, veröffentliche ich einen Tarball mit generiertem Mann/XHTML zusammen mit jeder Version. Laden Sie es herunter und installieren Sie den Inhalt, wie Sie es für richtig halten.
Wenn Ihre TERM falsch ist oder diese Terminfo-Definition veraltet ist, haben Sie eine sehr schlechte Zeit. Verwenden Sie nur TERM , die für Ihr Terminal geeignet sind. Wenn diese Variable undefiniert ist oder nicht die angegebenen Terminfo -Eintrag nicht laden kann, weigern Sie sich zu starten, und Sie werden heute nicht in den Weltraum gehen.
NotCurses filt das Terminal beim Start und ermöglicht einige erweiterte Funktionen basierend auf dem festgelegten Terminal (und sogar der Version). Grundlegende Fähigkeiten werden jedoch von Terminfo entnommen. Wenn Sie also Kitty, aber TERM=vt100 haben, können Sie RGBA -Bitmap -Grafiken zeichnen (obwohl solche Dinge nur ein Traum für einen VT100 sind), aber den alternativen Bildschirm nicht verwenden können (obwohl er von jeder Kitty -Version unterstützt wird). TERM und eine aktuelle Terminfo-Datenbank bleiben also wichtig.
Stellen Sie sicher, dass Ihre LANG Umgebungsvariable auf ein Utf8-kodiertes Gebietsschema eingestellt ist und dass dieses Gebietsschema generiert wurde. Dies bedeutet normalerweise "[language]_[Countrycode].UTF-8" , dh en_US.UTF-8 . Der erste Teil ( en_US ) sollte als Verzeichnis oder Symlink in /usr/share/locales vorhanden sein. Dies erfordert in der Regel Bearbeiten /etc/locale.gen und laufende locale-gen . Auf Debian-Systemen kann dies mit dpkg-reconfigure locales erreicht werden und das gewünschte Gebietsschema ermöglichen. Das Standardgebiet wird irgendwo wie /etc/default/locale gespeichert.
Wenn Ihr Terminal eine Option über die Standardinterpretation von "mehrdeutigen Breitenzeichen" hat (dies ist tatsächlich ein technischer Begriff von Unicode), stellen Sie sicher, dass es auf breit und nicht schmal eingestellt ist (wenn dies nicht funktioniert, stellen Sie sicher, dass es sich eng und heh eingestellt hat).
Wenn Ihr Terminal die 3x8bit -RGB -Farbe über setaf und setbf (die meisten modernen Terminals) unterstützt, jedoch weder die RGB noch Tc -Terminfo -Fähigkeit exportiert, können Sie die COLORTERM als truecolor oder 24bit exportieren. Beachten Sie, dass einige Terminals eine 24-Bit-Spezifikation akzeptieren, sie jedoch auf weniger Farben zuordnen. RGB ist bedingungslos aktiviert, wenn die meisten modernen Terminals identifiziert werden.
Glyphenbreite, und ob überhaupt eine Glyphe angezeigt werden kann, hängt teilweise von der Schriftkonfiguration ab. Im Idealfall hat Ihre Schriftkonfiguration eine Glyphe für jeden Unicode -EGC, und die Breite jedes Glyphs entspricht dem wcswidth() -Strieb der POSIX -Funktion für das EGC. Wenn dies nicht der Fall ist, erhalten Sie wahrscheinlich Rohlinge oder � (U+FFFD, Ersatzcharakter) für fehlende Zeichen, und nachfolgende Zeichen in der Zeile können verlegt werden.
Es ist zu wissen, dass mehrere Terminals die Blockzeichen direkt zeichnen, anstatt sie aus einer Schriftart zu laden. Dies ist im Allgemeinen wünschenswert. Quadranten und Sextanten sind nicht der richtige Ort, um Ihre Designvirtuosität zu demonstrieren. Um die Darstellung der Rendering von Zeichen von Charakteren durch Ihre Umgebung zu inspizieren, laufen Sie notcurses-info . Die gewünschte Ausgabe sollte ungefähr so aussehen:
Wenn die Dinge brechen oder sonst mangelhaft erscheinen, wenden Sie sich bitte an den Abschnitt Umgebungsnotizen! Sie benötigen einen korrekten TERM und LANG -Definitionen und möchten möglicherweise COLORTERM .
NCOPTION_CLI_MODE (ein Alias für mehrere reale Flags; siehe notcurses_init(1) für weitere Informationen). Sie müssen immer noch explizit rendern.-DUSE_MULTIMEDIA=none .notcurses_core_init() notcurses_init() / ncdirect_core_init() notcurses_core_init () oder ncdirect_init() und verknüpfen Sie mit -lnotcurses-core . Ihre Bewerbung wird wahrscheinlich ein paar Millisekunden schneller starten. Noch wichtiger ist, dass es sich mit minimalen Nichtverbindungen verbindet.notcurses-demo (und vielleicht einige andere Programme). Verwenden Sie -DUSE_CXX=off .TERM werden viele Hardware -Terminals unterstützt. Wenn der Terminfo -Datenbankeintrag im Allgemeinen obligatorische Verzögerungen angibt, wird dies derzeit nicht ordnungsgemäß unterstützt. Es ist bekannt, dass nicht die Note den VT320 und VT340 fahren können, einschließlich Sixel -Grafiken auf letzterem.NCBLIT_PIXEL angefordert wurde. Ebenso ncvisual_blit() Sextanten ( NCBLIT_3x2 ) ohne NCVISUAL_OPTION_NODEGRADE 13 -Unterstützung usw. nicht verwendet.screen .screen unterstützt keine RGB -Farben (mindestens 4,08.00); Wenn Sie COLORTERM definiert haben, haben Sie eine schlechte Zeit. Wenn Sie einen screen haben, der mit --enable-colors256 zusammengestellt wurde, versuchen Sie TERM=screen-256color im Gegensatz zu TERM=screen zu exportieren.mosh .NC_ENTER NCTYPE_RELEASE -Ereignis erhält, und jeder Schlüsselpress führt normalerweise zu mindestens zwei Eingängen.NCKEY_RESIZE erst angezeigt, bis ich eine andere Taste drücke.SIGWINCH in einem Thread zu maskieren, und dieser Thread empfängt das Signal anstelle des Threads, der notcurses_getc_blocking() bezeichnet wird. Infolgedessen wird die poll() nicht unterbrochen. Rufen Sie pthread_sigmask() an, bevor Sie Threads hervorbringen.NotCurses Destructor ausgeführt wird, wenn ich von main() zurückkomme?NotCurses auf main() ) geschaltet sind).ncplane_move_yx() , bewegen Sie es unter eine undurchsichtige Ebene mit ncplane_move_below() oder bewegen Sie es mit ncplane_reparent() aus dem Pile.ncplane_box_yx() ? Hassen Sie Orthogonalität, Sie langweilig?ncplane_box() und Freunde haben bereits viel zu viele Argumente, du Monster.graphics/qr-code-generator installiert habe.cmake -DCMAKE_REQUIRED_INCLUDES=/usr/local/include . Dies wird von bsd.port.mk übergeben.LANG -Umgebungsvariable ist unterdefiniert oder fälschlicherweise definiert, oder das erforderliche Gebietsschema ist nicht auf Ihrer Maschine vorhanden (es ist auch möglich, dass Sie NCOPTION_INHIBIT_SETLOCALE explizit geliefert haben, aber nie setlocale(3) , in diesem Fall dies nicht).ncplane , wenn ich eine nccell benutze. Warum hält der letztere keinen Zeiger auf den ersteren?nccell so klein wie möglich bleiben, und Sie haben fast immer das ncplane griffbereit, wenn Sie ohnehin einen Verweis auf eine gültige nccell haben.valgrind /Asan durchgeführt, und es zeigt Speicherlecks von libtinfo.so Also, was ist damit los?notcurses-demo geführt, aber meine Tabellennummern übereinstimmen nicht mit den Notcurses-Bannernummern, Sie Charlatan.notcurses-demo rendert mehrere Frames über die tatsächlichen Demos hinaus.notcurses_stop() / ncdirect_stop() aufrufen, einschließlich tödlicher Signale (beachten Sie, dass nicht die Handlern für die meisten tödlichen Signale nicht so installiert werden, dass sie genau dies tun).ncdirect_readline() existiert jedoch immer noch und funktioniert jetzt auch ohne Libreadline, obwohl es natürlich nicht genau Libresadline ist. Auf jeden Fall wären Sie wahrscheinlich besser dran, den CLI -Modus mit einem ncreader zu verwenden.pkg-config --static --libs notcurses , um sie --libs notcurses-core zu entdecken.mintty mit -P on Argumente oder exportieren Sie MSYS=enable_pcon bevor Sie sie starten.COLORTERM=24bit ?SendEnv COLORTERM zu .ssh/config hinzu und AcceptEnv COLORTERM zu sshd_config auf dem Remote -Server an. Ja, dies erfordert wahrscheinlich Root auf dem Remote -Server. Beschuldige mich nicht, Mann; Ich habe es nicht getan.ncvisual aus dem RGBA -Speicher mit ncvisual_from_rgba() laden.NCSTYLE_REVERSE ?ncchannels_reverse() verwenden, um die Vor- und Hintergrundfarben korrekt umzukehren.ncsubproc -Widget in eine Ebene streamen.notcurses_refresh() an, nachdem notcurses_init() erfolgreich zurückgegeben wird.„Unsere bildenden Künste wurden entwickelt, ihre Typen und Verwendungszwecke wurden in Zeiten, die sich sehr von der Gegenwart unterscheiden, von Männern festgelegt, deren Handlungskraft im Vergleich zu unserem unbedeutend war. Aber das erstaunliche Wachstum unserer Techniken, die Anpassungsfähigkeit und Präzision, die sie erreicht haben, die Ideen und Gewohnheiten, die sie schaffen, machen es zu einer Gewissheit, dass tiefgreifende Veränderungen im alten Handwerk der Schönen bevorstehend sind . “ —Paul Valéry