Qué es : una biblioteca que facilita el complejo de TUIS en los emuladores de terminales modernos, que soportan colores vívidos, multimedia, hilos y unicode en el máximo grado posible. Las cosas se pueden hacer con Notcurses que simplemente no se pueden hacer con NCURSES. Además es rápido como mierda. Lo que no es : una implementación de Cursas X/Open Compatible con fuente de fuente, ni un reemplazo para NCURSES en los sistemas existentes.
Para obtener más información, consulte Dankwiki y las páginas del hombre. Además, hay salida de doxygen. Para suscribirse a la lista de correo, envíe un correo electrónico a [email protected] (el contenido de correo electrónico no importa). Escribí una guía coherente, que está disponible para descarga gratuita (o compra de bolsillo).
Todavía no he agregado muchos ejemplos documentados, pero SRC/ POC/ y SRC/ POCPP/ contienen muchos pequeños programas C y C ++ respectivamente. notcurses-demo cubre la mayor parte de la funcionalidad de las notas.
Si está ejecutando las aplicaciones de Notcurses en un Docker, consulte "Notas de entorno" a continuación.



Notcurses abandona la API X/Abierto de Cursas Bundled como parte de la especificación de Unix única. Para obtener antecedentes necesarios, consulte a las preguntas frecuentes de Thomas E. Dickey, las preguntas frecuentes autorizadas y autorizadas. Como tal, Notcurses no es un reemplazo de maldiciones.
Siempre que sea posible, Notcurses hace uso de la biblioteca Terminfo enviada con NCurses, que se benefician enormemente de su portabilidad y minuciosidad.
Notcurses abre una funcionalidad avanzada para el usuario interactivo en estaciones de trabajo, teléfonos, computadoras portátiles y tabletas, posiblemente a expensas de por ejemplo, algunas terminales industriales y minoristas. Fundamentalmente, las maldiciones suponen el mínimo y le permite (con esfuerzo) dar un paso adelante, mientras que los nocursos asume el máximo y baja (por sí solo) cuando sea necesario. El último enfoque probablemente se rompe en algún hardware más antiguo, pero el enfoque anterior da como resultado un nuevo software que se parece a hardware antiguo.
¿Por qué usar esta biblioteca no estándar?
La seguridad del hilo y el uso eficiente en los programas paralelos, ha sido una consideración de diseño desde el principio.
Una superficie más ordenada que la codificada por X/Open: los identificadores exportados tienen prefijo para evitar colisiones comunes del espacio de nombres. Donde se usa un código razonable, solo en línea static inline . Esto facilita las optimizaciones del compilador y reduce el tiempo del cargador. Las no se pueden construir sin su funcionalidad multimedia, que requiere un conjunto significativamente menor de dependencias.
Todas las API admiten nativamente el conjunto de caracteres universales (unicode). La API nccell se basa en el concepto de clúster Graxeme Extended de Unicode.
Características visuales que incluyen imágenes, fuentes, video, texto de alto contraste, sprites y regiones transparentes. Todas las API admiten el color de 24 bits de forma nativa, cuantificada según sea necesario para el terminal.
Soporte portátil para gráficos con mojado de bits, utilizando Sixel, Kitty e incluso la consola de Linux FrameBuffer.
Soporte para protocolos de teclado inequívocos.
"Modo TUI" facilita las aplicaciones de alto rendimiento, no descripción y de pantalla completa. "Modo CLI" admite la salida de desplazamiento para utilidades de shell, pero con la plena potencia de las notas.
Es una licencia de apache2 en su totalidad, a diferencia del drama en varios actos que es la licencia NCurses (este último se resume como "una reexpresión de MIT-X11").
Gran parte de lo anterior se puede tener con NCurses, pero no son para lo que fue diseñado NCURSES. Por otro lado, si se dirige a aplicaciones industriales o críticas, o desea beneficiarse de la confiabilidad y la portabilidad probadas en el tiempo, debe usar por todos los medios esa buena biblioteca.
Las versiones mínimas generalmente indican la versión más antigua con la que he probado; Es muy posible que sea posible usar versiones aún más antiguas. ¡Déjame saber de algún éxito!
Más información sobre la construcción y la instalación está disponible en Install.md.
Si desea usar un idioma que no sea C para trabajar con Notcurses, hay numerosos envoltorios disponibles. Varios se incluyen en este repositorio, mientras que otros son externas.
| Idioma | Dirige) | Repositorio |
|---|---|---|
| ADA | Jeremy Grosser | Jeremygrosser/Notcursesada |
| C ++ | Marek Habersack, Nick Black | interno |
| Dardo | Nelson Fernández | kascote/dart_notcurses |
| Julia | Dheepak Krishnamurthy | kdheepak/nocurses.jl |
| Nim | Michael S. Bradley, Jr. | Michaelsbradleyjr/Nim-Notcurses |
| Pitón | Nick Black | interno |
| Pitón | IGO95862 | interno |
| Óxido | José Luis Cruz | dankamongmen/libnotcurses-sys |
| Zigza | Jakub Dundalek | Dundalek/Notcurses-Zig-Ejemplo |
Nueve ejecutables se instalan como parte de NotCurses:
ncls : un ls que muestra multimedia en la terminalncneofetch : una estafa neofetchncplayer : Renders Visual Media (imágenes/videos)nctetris : un clon de tetrisnotcurses-demo : algún código de demostraciónnotcurses-info : detectar e imprimir capacidades de terminal/diagnósticonotcurses-input : Decode e imprime KeyPressesnotcurses-tester : prueba unitariatfman : un navegador manual elegante Para ejecutar notcurses-demo de un pago, proporcione el directorio data a través del argumento -p . Las demostraciones que requieren archivos de datos abortarán de otra manera. El retraso base utilizado en notcurses-demo se puede cambiar con -d , aceptando un multiplicador de punto flotante. Los valores inferiores a 1 acelerarán la demostración, mientras que los valores superiores a 1 lo ralentizarán.
notcurses-tester también requiere que data , poblados con los archivos de datos necesarios, se especifiquen con -p . Se puede ejecutar solo o mediante make test .
Con -DUSE_PANDOC=on (el predeterminado), se construirá un conjunto completo de páginas de hombre y XHTML a partir de doc/man . La siguiente documentación de Markdown se incluye directamente:
TERM entorno variable y varios emuladores terminales.Si (comprensiblemente) desea evitar la gran pandoc pando, pero aún disfruta de páginas manuales, publico un tarball con hombre/xhtml generado junto con cada lanzamiento. Descárguelo e instale el contenido como lo considere ajuste.
Si su variable TERM es incorrecta, o que la definición de Terminfo está desactualizada, lo pasará muy mal. Use solo valores TERM apropiados para su terminal. Si esta variable está indefinida, o no se puede cargar la entrada de terminfo especificada, se negará a comenzar, y no irá al espacio hoy.
Notcurses consulta el terminal en el inicio, permitiendo algunas características avanzadas basadas en el terminal determinado (e incluso la versión). Sin embargo, las capacidades básicas se toman de Terminfo. Entonces, si tiene, digamos, Kitty, pero TERM=vt100 , podrá dibujar gráficos de mapa de bits RGBA (a pesar de que esas cosas no son un sueño para un VT100), pero no podrá usar la pantalla alternativa (a pesar de ser compatible con cada versión de Kitty). Por lo tanto, TERM y una base de datos TerminFO actualizada siguen siendo importantes.
Asegúrese de que su variable de entorno LANG esté configurada en una ubicación codificada por UTF8, y que se haya generado esta localidad. Esto generalmente significa "[language]_[Countrycode].UTF-8" , es decir, en_US.UTF-8 . La primera parte ( en_US ) debe existir como directorio o enlace simbólico en /usr/share/locales . Esto generalmente requiere editar /etc/locale.gen y ejecutar locale-gen . En los sistemas de Debian, esto se puede lograr con dpkg-reconfigure locales , y habilitando la ubicación deseada. La ubicación predeterminada se almacena en algún lugar como /etc/default/locale .
Si su terminal tiene una opción sobre la interpretación predeterminada de los "caracteres de ancho ambiguo" (este es en realidad un término técnico de Unicode), asegúrese de que esté configurado en ancho , no estrecho (si eso no funciona, asegúrese de que esté configurado para estrecho , je).
Si su terminal admite el color RGB de 3x8 bits a través de setaf y setbf (la mayoría de los terminales modernos), pero no exporta la capacidad RGB ni Tc TermInfo, puede exportar la variable de entorno COLORTERM como truecolor o 24bit . Tenga en cuenta que algunos terminales aceptan una especificación de 24 bits, pero la asigna a menos colores. RGB está habilitado incondicionalmente cada vez que se identifican la mayoría de las terminales modernas.
El ancho del glifo, y de hecho si se puede mostrar un glifo, depende en parte de la configuración de fuentes. Idealmente, la configuración de su fuente tiene un glifo para cada EGC Unicode, y el ancho de cada glifo coincide con el resultado wcswidth() de la función POSIX para el EGC. Si este no es el caso, es probable que obtenga espacios en blanco o (U+FFFD, personaje de reemplazo) para los caracteres faltantes, y los caracteres posteriores en la línea pueden estar fuera de lugar.
Vale la pena saber que varios terminales dibujan los caracteres del bloque directamente, en lugar de cargarlos de una fuente. Esto es generalmente deseable. Los cuadrantes y los sextantes no son el lugar para demostrar su virtuosismo de diseño. Para inspeccionar la representación de su entorno de dibujar personajes, ejecute notcurses-info . La salida deseada debe verse algo así:
Si las cosas se rompen o parecen mediocres, ¡ consulte la sección de Notas del Medio Ambiente! Necesita definiciones correctas TERM y LANG , y puede querer COLORTERM .
NCOPTION_CLI_MODE (un alias para varios indicadores reales; consulte notcurses_init(1) para obtener más información). Todavía debe renderizar explícitamente.-DUSE_MULTIMEDIA=none .notcurses_core_init() o ncdirect_core_init() en lugar de notcurses_init() / ncdirect_init() , y enlace con -lnotcurses-core . Es probable que su aplicación comenzará unos pocos milisegundos más rápido; Más importante aún, se vinculará con instalaciones mínimas de notificaciones.notcurses-demo (y tal vez algunos otros programas). Use -DUSE_CXX=off .TERM correcto, se admiten muchos terminales de hardware. En general, si la entrada de la base de datos TermInfo indica retrasos obligatorios, NotCurses no admitirá actualmente ese terminal correctamente. Se sabe que Notcurses puede impulsar el VT320 y VT340, incluidos los gráficos de Sixel en este último.NCBLIT_PIXEL . Del mismo modo, los sextantes ( NCBLIT_3x2 ) no se utilizarán sin soporte de Unicode 13, etc. ncvisual_blit() utilizarán el mejor blastor disponible, a menos que se proporcione NCVISUAL_OPTION_NODEGRADE (en cuyo caso fallará).screen .screen no admite colores RGB (al menos a 4.08.00); Si tiene COLORTERM definido, lo pasará mal. Si tiene una screen que se compiló con --enable-colors256 , intente exportar TERM=screen-256color en lugar de TERM=screen .mosh .NC_ENTER NCTYPE_RELEASE , y cada KeyPress generalmente dará como resultado al menos dos entradas.NCKEY_RESIZE hasta que presione alguna otra tecla.SIGWINCH en algún hilo, y ese hilo está recibiendo la señal en lugar del hilo que llamó notcurses_getc_blocking() . Como resultado, la poll() no se interrumpe. Llame pthread_sigmask() antes de generar cualquier hilo.NotCurses se ejecute cuando regrese de main() ?NotCurses están alcanzados a main() ).ncplane_move_yx() , muévalo debajo de un plano opaco con ncplane_move_below() , o muévalo fuera de pedido con ncplane_reparent() .ncplane_box_yx() ? ¿Odias la ortogonalidad, Dullard?ncplane_box() y los amigos ya tienen demasiados argumentos, monstruo.graphics/qr-code-generator .cmake -DCMAKE_REQUIRED_INCLUDES=/usr/local/include . Esto es aprobado por bsd.port.mkLANG está subesdefinida o definida incorrectamente, o la localidad necesaria no está presente en su máquina (también es posible que suministre explícitamente NCOPTION_INHIBIT_SETLOCALE , pero nunca se llame setlocale(3) , en cuyo caso no lo haga).ncplane cuando uso un nccell . ¿Por qué este último no tiene un puntero al primero?nccell debe permanecer lo más pequeño posible, y casi siempre tiene el ncplane a mano si tiene una referencia a un nccell válido de todos modos.valgrind /Asan, y muestra fugas de memoria de libtinfo.so Entonces, ¿qué pasa con eso?notcurses-demo , pero mis números de mesa no coinciden con los números de banner de Notcurses, Charlatan.notcurses-demo representa varios cuadros más allá de las demostraciones reales.notcurses_stop() / ncdirect_stop() en todas las rutas de salida, incluidas las señales fatales (tenga en cuenta que, de forma predeterminada, no las instalan controladores para la mayoría de las señales fatales para hacer exactamente esto).ncdirect_readline() todavía existe, y ahora en realidad funciona incluso sin Libreadline, aunque por supuesto no es exactamente Libreadline. En cualquier caso, probablemente estaría mejor usando el modo CLI con un ncreader .pkg-config --static --libs notcurses (o-- --libs notcurses-core ) para descubrirlos.mintty con -P on argumentos, o exporte MSYS=enable_pcon antes de iniciarlo.COLORTERM=24bit en todas partes?SendEnv COLORTERM a .ssh/config , y AcceptEnv COLORTERM a sshd_config en el servidor remoto. Sí, esto probablemente requerirá root en el servidor remoto. No me culpes, hombre; No lo hice.ncvisual desde la memoria RGBA usando ncvisual_from_rgba() .NCSTYLE_REVERSE ?ncchannels_reverse() para invertir correctamente los colores delanteros y de fondo.ncsubproc .notcurses_refresh() después de que notcurses_init() regrese correctamente.“Nuestras bellas artes fueron desarrolladas, sus tipos y usos fueron establecidos, en tiempos muy diferentes del presente, por hombres cuyo poder de acción sobre las cosas era insignificante en comparación con el nuestro. Pero el sorprendente crecimiento de nuestras técnicas, la adaptabilidad y la precisión que han alcanzado, las ideas y los hábitos que están creando, lo que es una certeza que los cambios profundos son inminentes en la antigua artesanía de lo hermoso ". —Paul Valéry