Ce que c'est : une bibliothèque facilitant les TUIS complexes sur les émulateurs terminaux modernes, soutenant des couleurs vives, multimédia, threads et unicode au degré maximum possible. Les choses peuvent être faites avec des notcurses qui ne peuvent tout simplement pas être faites avec des ncurses. C'est en outre rapide comme de la merde. Ce que ce n'est pas : une implémentation X / Open Murses compatible avec source, ni un remplacement des NCURS sur les systèmes existants.
Pour plus d'informations, voir Dankwiki et les pages de l'homme. De plus, il y a une sortie de doxygène. Pour vous abonner à la liste de diffusion, envoyez un e-mail à [email protected] (le contenu des e-mails n'a pas d'importance). J'ai écrit un guide cohérent, qui est disponible en téléchargement gratuit (ou achat de poche).
Je n'ai pas encore ajouté de nombreux exemples documentés, mais SRC / POC / et SRC / POCPP / contiennent respectivement de nombreux petits programmes C et C ++. notcurses-demo couvre la plupart des fonctionnalités de NotCurses.
Si vous exécutez des applications NotCurses dans un Docker, veuillez consulter les "notes d'environnement" ci-dessous.



NotCurses abandonne l'API X / Open Indies regroupées dans le cadre de la spécification UNIX unique. Pour certains antécédents nécessaires, consultez la superbe et autoritaire de Thomas E. Dickey FAQ de NCurses. En tant que tel, NotCurses n'est pas un remplacement de malédiction.
Dans la mesure du possible, NotCurses utilise la bibliothèque Terminfo expédiée avec des ncurses, bénéficiant considérablement de sa portabilité et de sa minutie.
NotCurses ouvre des fonctionnalités avancées pour l'utilisateur interactif sur les postes de travail, les téléphones, les ordinateurs portables et les tablettes, peut-être au détriment de certains terminaux industriels et de détail. Fondamentalement, les malédictions assument le minimum et vous permet (avec un effort) de vous intensifier, tandis que les notants supposent le maximum et descendent (seul) si nécessaire. Cette dernière approche se casse probablement sur du matériel plus ancien, mais la première approche se traduit par de nouveaux logiciels ressemblant à un ancien matériel.
Pourquoi utiliser cette bibliothèque non standard?
La sécurité des threads et une utilisation efficace dans les programmes parallèles ont été une considération de conception depuis le début.
Une surface plus ordonnée que celle codifiée par X / Open: les identifiants exportés sont préfixés pour éviter les collisions d'espace de noms courantes. Lorsqu'il est utilisé uniquement raisonnable et static inline . Cela facilite les optimisations du compilateur et réduit le temps de chargeur. NotCurses peut être construit sans sa fonctionnalité multimédia, nécessitant un ensemble de dépendances nettement moindre.
Toutes les API soutiennent nativement le jeu de caractères universels (Unicode). L'API nccell est basée sur le concept de cluster Graphème étendu d'Unicode.
Caractéristiques visuelles, y compris les images, les polices, la vidéo, le texte à contraste élevé, les sprites et les régions transparentes. Toutes les API prennent en charge nativement la couleur 24 bits, quantifiée comme nécessaire pour le terminal.
Prise en charge portable pour les graphiques bitmappés, en utilisant Sixel, Kitty et même la console Linux FrameBuffer.
Prise en charge des protocoles de clavier non ambiguës.
"Mode TUI" facilite les applications à écran complet de haute performance, sans défilement. "Mode CLI" prend en charge la sortie de défilement pour les utilitaires de shell, mais avec la pleine puissance des notcurses.
Il est licencié d'Apache2 dans son intégralité, par opposition au drame dans plusieurs actes qui est la licence NCurses (ce dernier est résumé comme "un retraitement de MIT-X11").
Une grande partie de ce qui précède peut être obtenue avec les ncurses, mais ce n'est pas pour quoi NCurses a été conçu . D'un autre côté, si vous ciblez les applications industrielles ou critiques ou si vous souhaitez bénéficier de la fiabilité et de la portabilité éprouvées, vous devez par tous les moyens d'utiliser cette bibliothèque fine.
Les versions minimales indiquent généralement la version la plus ancienne avec laquelle j'ai testé; Il pourrait bien être possible d'utiliser des versions encore plus anciennes. Faites-moi savoir tout succès!
Plus d'informations sur le bâtiment et l'installation sont disponibles dans install.md.
Si vous souhaitez utiliser une langue autre que C pour travailler avec NotCurses, de nombreux emballages sont disponibles. Plusieurs sont inclus dans ce référentiel, tandis que d'autres sont externes.
| Langue | Conduit) | Dépôt |
|---|---|---|
| Ada | Jeremy Grosser | Jeremygrosser / notcursesada |
| C ++ | Marek Habersack, Nick Black | interne |
| Dard | Nelson Fernandez | kascote / dart_notcurses |
| Julia | Dheepak Krishnamurthy | kdheepak / notcurses.jl |
| Nim | Michael S. Bradley, Jr. | Michaelsbradleyjr / nim-notcurses |
| Python | Nick Black | interne |
| Python | IGO95862 | interne |
| Rouiller | José Luis Cruz | Dankamongmen / Libnotcurses-Sys |
| Zigou | Jakub Dundalek | dundalek / notcurses-zig-exemple |
Neuf exécutables sont installés dans le cadre de NotCurses:
ncls : un ls qui affiche le multimédia dans le terminalncneofetch : une arnaque Neofetchncplayer : Rende Visual Media (images / vidéos)nctetris : un clone de Tetrisnotcurses-demo : un code de démonstrationnotcurses-info : détecter et imprimer les capacités / diagnostics du terminalnotcurses-input : décoder et imprimer des touchesnotcurses-tester : test unitairetfman : Un navigateur manuel à swank Pour exécuter notcurses-demo à partir d'une caisse, fournissez le répertoire data via l'argument -p . Les démos nécessitant des fichiers de données s'abandonneront autrement. Le retard de base utilisé dans notcurses-demo peut être modifié avec -d , acceptant un multiplicateur à virgule flottante. Les valeurs inférieures à 1 accéléreront la démo, tandis que les valeurs supérieures à 1 le ralentiront.
notcurses-tester nécessite également que data , remplies avec les fichiers de données nécessaires, soient spécifiées avec -p . Il peut être exécuté par lui-même ou via make test .
Avec -DUSE_PANDOC=on (la valeur par défaut), un ensemble complet de pages d'homme et xhtml sera construit à partir de doc/man . La documentation de Markdown suivante est incluse directement:
TERM variable environnement et divers émulateurs terminaux.Si vous voulez (naturellement) éviter la grande pile Pandoc, mais profitez toujours des pages manuelles, je publie un tarball avec l'homme / xhtml généré avec chaque version. Téléchargez-le et installez le contenu comme vous le jugez.
Si votre variable TERM est erronée ou si cette définition Terminfo est obsolète, vous allez passer un très mauvais moment. Utilisez uniquement des valeurs TERM appropriées pour votre terminal. Si cette variable n'est pas définie, ou que les écrans ne peuvent pas charger l'entrée Terminfo spécifiée, il refusera de commencer et vous n'iras pas dans l'espace aujourd'hui.
NotCurses interroge le terminal au démarrage, permettant certaines fonctionnalités avancées en fonction du terminal déterminé (et même de la version). Cependant, les capacités de base sont tirées de Terminfo. Donc, si vous avez, disons, Kitty, mais TERM=vt100 , vous allez pouvoir dessiner des graphiques Bitmap RGBA (malgré de telles choses, mais un rêve pour un VT100), mais incapable d'utiliser l'écran alternatif (bien qu'il soit pris en charge par chaque version de Kitty). Ainsi, TERM et une base de données Terminfo à jour restent importants.
Assurez-vous que votre variable d'environnement LANG est définie sur un paramètre local encodées UTF8 et que ce paramètre a été généré. Cela signifie généralement "[language]_[Countrycode].UTF-8" , ie en_US.UTF-8 . La première partie ( en_US ) devrait exister en tant que répertoire ou lien symbolique dans /usr/share/locales . Cela nécessite généralement l'édition /etc/locale.gen et l'exécution locale-gen . Sur Debian Systems, cela peut être accompli avec dpkg-reconfigure locales et permettant les paramètres régionaux souhaités. Le paramètre par défaut est stocké quelque part comme /etc/default/locale .
Si votre terminal a une option sur l'interprétation par défaut des "caractères de largeur ambiguë" (il s'agit en fait d'un terme technique d'Unicode), assurez-vous qu'il est défini sur large , pas étroit (si cela ne fonctionne pas, assurez-vous qu'il est défini , heh).
Si votre terminal prend en charge la couleur RVB 3x8bit via setaf et setbf (les terminaux les plus modernes), mais n'exporte ni la capacité RGB ni Tc Terminfo, vous pouvez exporter la variable d'environnement COLORTERM en tant que truecolor ou 24bit . Notez que certains terminaux acceptent une spécification 24 bits, mais cartlez-le jusqu'à moins de couleurs. RVB est activé inconditionnellement chaque fois que la plupart des terminaux modernes sont identifiés.
La largeur des glyphes, et en fait, si un glyphe peut être affiché, dépend en partie de la configuration de la police. Idéalement, votre configuration de police a un glyphe pour chaque EGC Unicode, et la largeur de chaque glyphe correspond au résultat wcswidth() de la fonction POSIX pour l'EGC. Si ce n'est pas le cas, vous obtiendrez probablement des blancs ou � (U + FFFD, caractère de remplacement) pour les caractères manquants et les caractères suivants sur la ligne peuvent être déplacés.
Il convient de savoir que plusieurs terminaux dessinent directement les caractères de bloc, plutôt que de les charger d'une police. Ceci est généralement souhaitable. Les quadrants et les sextants ne sont pas l'endroit pour démontrer votre virtuosité de conception. Pour inspecter le rendu de votre environnement des personnages de dessin, exécutez notcurses-info . La sortie souhaitée devrait ressembler à ceci:
Si les choses se cassent ou semblent autrement terne, veuillez consulter la section des notes d'environnement! Vous avez besoin de définitions correctes TERM et LANG , et vous pouvez vouloir COLORTERM .
NCOPTION_CLI_MODE (un alias pour plusieurs indicateurs réels; voir notcurses_init(1) pour plus d'informations). Vous devez toujours rendre explicitement.-DUSE_MULTIMEDIA=none .notcurses_core_init() ou ncdirect_core_init() à la place de notcurses_init() / ncdirect_init() et liez avec -lnotcurses-core . Votre demande commencera probablement quelques millisecondes plus rapidement; Plus important encore, il est lié aux installations minimales de NotCurses.notcurses-demo (et peut-être quelques autres programmes). Utilisez -DUSE_CXX=off .TERM correct, de nombreux terminaux matériels sont pris en charge. En général, si l'entrée de la base de données Terminfo indique des retards obligatoires, NotCurses ne prendra pas actuellement en charge ce terminal correctement. On sait que NotCurses peut conduire les VT320 et VT340, y compris les graphiques Sixel sur ce dernier.NCBLIT_PIXEL a été demandé. De même, les sextants ( NCBLIT_3x2 ) ne seront pas utilisés sans support Unicode 13, etc. ncvisual_blit() utilisera le meilleur blitter disponible, à moins que NCVISUAL_OPTION_NODEGRADE ne soit fourni (auquel cas il échouera).screen .screen ne prend pas en charge les couleurs RVB (au moins à 4,08,00); Si vous avez défini COLORTERM , vous passerez un mauvais moment. Si vous avez un screen qui a été compilé avec --enable-colors256 , essayez d'exporter TERM=screen-256color par opposition à TERM=screen .mosh .NC_ENTER NCTYPE_RELEASE , et chaque pression de touche entraînera généralement au moins deux entrées.NCKEY_RESIZE avant d'appuyer sur une autre touche.SIGWINCH dans un thread, et ce thread reçoit le signal au lieu du thread qui a appelé notcurses_getc_blocking() . En conséquence, le poll() n'est pas interrompu. Appelez pthread_sigmask() avant de reproduire les threads.NotCurses est exécuté lorsque je reviendrai de main() ?NotCurses sont étendus sur main() ).ncplane_move_yx() , déplacez-le sous un plan opaque avec ncplane_move_below() , ou déplacez-le hors pilier avec ncplane_reparent() .ncplane_box_yx() ? Détestez-vous l'orthogonalité, vous ternite?ncplane_box() et ses amis ont déjà beaucoup trop d'arguments, vous monstre.graphics/qr-code-generator .cmake -DCMAKE_REQUIRED_INCLUDES=/usr/local/include . Ceci est passé par bsd.port.mkLANG est sous-définie ou mal définie, ou le lieu nécessaire n'est pas présent sur votre machine (il est également possible que vous fournissiez explicitement NCOPTION_INHIBIT_SETLOCALE , mais jamais appelé setlocale(3) , dans ce cas, ne le faites pas).ncplane lors de l'utilisation d'une nccell . Pourquoi ces derniers ne tient-ils pas un pointeur vers le premier?nccell doit rester aussi petit que possible, et vous avez presque toujours le ncplane à portée de main si vous avez une référence à une nccell valide de toute façon.valgrind / Asan, et il montre des fuites de mémoire de libtinfo.so , qu'est-ce qui se passe avec ça?notcurses-demo , mais mes numéros de table ne correspondent pas aux numéros de bannière notcurses, vous charlatan.notcurses-demo rend plusieurs images au-delà des démos réelles.notcurses_stop() / ncdirect_stop() sur tous les chemins de sortie, y compris les signaux mortels (notez que, par défaut, NotCurses installe les gestionnaires pour la plupart des signaux mortels pour le faire exactement).ncdirect_readline() existe toujours, cependant, et fonctionne maintenant même sans livre de libre ligne, bien qu'il ne soit bien sûr pas exactement Libreadline. Dans tous les cas, vous feriez probablement mieux d'utiliser le mode CLI avec un ncreader .pkg-config --static --libs notcurses (ou --libs notcurses-core ) pour les découvrir.mintty avec -P on les arguments, ou exportez MSYS=enable_pcon avant de le lancer.COLORTERM=24bit partout?SendEnv COLORTERM à .ssh/config et AcceptEnv COLORTERM à sshd_config sur le serveur distant. Oui, cela nécessitera probablement Root sur le serveur distant. Ne me blâmez pas, mec; Je ne l'ai pas fait.ncvisual à partir de la mémoire RGBA à l'aide de ncvisual_from_rgba() .NCSTYLE_REVERSE ?ncchannels_reverse() pour inverser correctement les couleurs avant et d'arrière-plan.ncsubproc .notcurses_refresh() après que notcurses_init() revient avec succès.«Nos beaux-arts ont été développés, leurs types et leurs utilisations ont été établis, à des temps très différents du présent, par des hommes dont le pouvoir d'action sur les choses était insignifiant par rapport au nôtre. Mais la croissance incroyable de nos techniques, l'adaptabilité et la précision qu'ils ont atteintes, les idées et les habitudes qu'ils créent, en font une certitude que des changements profonds sont imminents dans l'ancien métier de la belle . » —Paul Valéry