O que é : uma biblioteca facilitando tuis complexos em emuladores terminais modernos, suportando cores vivas, multimídia, threads e unicode ao grau máximo possível. As coisas podem ser feitas com notcurses que simplesmente não podem ser feitos com ncurses. Além disso, é rápido como merda. O que não é : uma implementação de maldições X/abertas compatíveis com a fonte, nem um substituto para os NCurses nos sistemas existentes.
Para mais informações, consulte Dankwiki e as páginas do homem. Além disso, há saída de doxygen. Para se inscrever na lista de discussão, envie um email para [email protected] (o conteúdo do email não importa). Escrevi um guia coerente, disponível para download gratuito (ou compra de brochura).
Ainda não adicionei muitos exemplos documentados, mas SRC/ POC/ e SRC/ POCPP/ contêm muitos pequenos programas C e C ++, respectivamente. notcurses-demo abrange a maior parte da funcionalidade dos Notcurses.
Se você estiver executando aplicativos NotCurses em um Docker, consulte "Notas do ambiente" abaixo.



O NotCurses abandona a API X/Open Couses Pactited como parte da especificação Unix única. Para alguns antecedentes necessários, consulte o excelente e autoritário NCurses das FAQs de Thomas E. Dickey. Como tal, o NotCurses não é uma substituição de maldições.
Sempre que possível, o NotCurses faz uso da biblioteca Terminfo enviada com NCurses, beneficiando -se muito de sua portabilidade e rigor.
O NotCurses abre a funcionalidade avançada para o usuário interativo em estações de trabalho, telefones, laptops e tablets, possivelmente às custas de alguns terminais industriais e de varejo. Fundamentalmente, as maldições assumem o mínimo e permitem que você (com esforço) aumente, enquanto o NotCurses assume o máximo e diminui (por si só) quando necessário. A última abordagem provavelmente quebra em algum hardware mais antigo, mas a abordagem anterior resulta em um novo software com hardware antigo.
Por que usar esta biblioteca não padrão?
A segurança do thread e o uso eficiente em programas paralelos têm sido uma consideração de design desde o início.
Uma superfície mais ordenada do que a codificada por X/Open: Identificadores exportados são prefixados para evitar colisões de namespace comuns. Onde o código somente para cabeçote static inline e razoável é usado. Isso facilita otimizações do compilador e reduz o tempo do carregador. O NotCurses pode ser construído sem sua funcionalidade multimídia, exigindo um conjunto significativamente menor de dependências.
Todas as APIs suportam nativamente o conjunto de caracteres universais (Unicode). A API nccell é baseada no conceito estendido de cluster de grafema da Unicode.
Recursos visuais, incluindo imagens, fontes, vídeo, texto de alto contraste, sprites e regiões transparentes. Todas as APIs suportam nativamente a cor de 24 bits, quantizadas para baixo conforme necessário para o terminal.
Suporte portátil para gráficos de bitmap, usando o console Sixel, Kitty e até o Linux Framebuffer.
Suporte para protocolos de teclado inequívocos.
O "modo TUI" facilita aplicativos de alto desempenho, não rolagem e tela cheia. O "Modo CLI" suporta a saída de rolagem para utilitários de shell, mas com toda a potência do NotCurses.
É licenciado em Apache2 em sua totalidade, em oposição ao drama em vários atos que é a licença do NCURSses (este último é resumido como "uma reafirmação do MIT-X11").
Grande parte dos itens acima pode ser obtida com os NCurses, mas não são para o que os Ncurses foram projetados . Por outro lado, se você estiver segmentando aplicações industriais ou críticas ou desejar se beneficiar da confiabilidade e portabilidade testadas pelo tempo, deve usar essa biblioteca fina.
As versões mínimas geralmente indicam a versão mais antiga com a qual testei; Pode ser possível usar versões ainda mais antigas. Deixe -me saber de algum sucessão!
Mais informações sobre construção e instalação estão disponíveis no install.md.
Se você deseja usar um idioma que não seja C para trabalhar com Notcurses, inúmeros invólucros estão disponíveis. Vários estão incluídos neste repositório, enquanto outros são externos.
| Linguagem | Pistas) | Repositório |
|---|---|---|
| Ada | Jeremy Grosser | Jeremygrosser/Notcursesada |
| C ++ | Marek Habersack, Nick Black | interno |
| Dardo | Nelson Fernandez | kascote/dart_notcurses |
| Julia | Dheepak Krishnamurthy | kdheepak/notcurses.jl |
| Nim | Michael S. Bradley, Jr. | Michaelsbradleyjr/Nim-Notcurses |
| Python | Nick Black | interno |
| Python | IGO95862 | interno |
| Ferrugem | José Luis Cruz | Dankamongmen/libnotcurses-sys |
| Zig | Jakub Dundalek | Dundalek/Notcurses-Zig-Exemplo |
Nove executáveis são instalados como parte do NotCurses:
ncls : um ls que exibe multimídia no terminalncneofetch : um RIPOFF de neofertchncplayer : renderiza mídia visual (imagens/vídeos)nctetris : um clone de tetrisnotcurses-demo : Algum código de demonstraçãonotcurses-info : Detectar e imprimir recursos/diagnósticos do terminalnotcurses-input : decodifique e imprima as teclasnotcurses-tester : Teste de unidadetfman : um navegador manual Swank Para executar notcurses-demo a partir de um checkout, forneça o diretório data por meio do argumento -p . As demos que exigem arquivos de dados serão abortadas. O atraso base usado no notcurses-demo pode ser alterado com -d , aceitando um multiplicador de ponto flutuante. Os valores inferiores a 1 acelerarão a demonstração, enquanto os valores maiores que 1 a retardam.
notcurses-tester também requer esses data , preenchidos com os arquivos de dados necessários, são especificados com -p . Pode ser executado por si só ou via make test .
Com -DUSE_PANDOC=on (o padrão), um conjunto completo de páginas MAN e XHTML será construído a partir de doc/man . A seguinte documentação de marcação está incluída diretamente:
TERM variável de ambiente e vários emuladores terminais.Se você (compreensivelmente) deseja evitar a grande pilha de pandoc, mas ainda gosta de páginas manuais, publico um tarball com Man/Xhtml gerado junto com cada lançamento. Faça o download e instale o conteúdo enquanto você julga o ajuste.
Se sua variável TERM estiver errada ou a definição do Terminfo estiver desatualizada, você terá um tempo muito ruim. Use apenas valores TERM apropriados para o seu terminal. Se essa variável for indefinida ou NotCurses não puder carregar a entrada Terminfo especificada, ela se recusará a iniciar e você não estará no espaço hoje.
O NotCurses consulta o terminal na inicialização, permitindo alguns recursos avançados com base no terminal determinado (e até na versão). Os recursos básicos, no entanto, são retirados do Terminfo. Então, se você tiver, digamos, Kitty, mas TERM=vt100 , você poderá desenhar gráficos de bitmap RGBA (apesar de tais coisas serem apenas um sonho para um VT100), mas não conseguirem usar a tela alternativa (apesar de ser apoiada por todas as versões de gatinhos). Portanto, TERM e um banco de dados Terminfo atualizado permanecem importantes.
Verifique se sua variável de ambiente LANG está definida como um local codificado por UTF8 e que esse local tenha sido gerado. Isso geralmente significa "[language]_[Countrycode].UTF-8" , ou seja, en_US.UTF-8 . A primeira parte ( en_US ) deve existir como um diretório ou símbolo em /usr/share/locales . Isso geralmente requer edição /etc/locale.gen e em execução locale-gen . Nos sistemas Debian, isso pode ser realizado com dpkg-reconfigure locales e permitindo o local desejado. O local padrão é armazenado em algum lugar como /etc/default/locale .
Se o seu terminal tiver uma opção sobre a interpretação padrão de "caracteres ambíguos de largura" (este é realmente um termo técnico do Unicode), verifique se ele é definido como largo , não estreito (se isso não funcionar, verifique se está definido para estreitar , heh).
Se o seu terminal suportar a cor RGB de 3x8bit via setaf e setbf (a maioria dos terminais modernos), mas exporta nem a capacidade RGB nem Tc Terminfo, você poderá exportar a variável de ambiente COLORTERM como truecolor ou 24bit . Observe que alguns terminais aceitam uma especificação de 24 bits, mas mapeie-o para menos cores. O RGB é incondicionalmente ativado sempre que a maioria dos terminais modernos são identificados.
A largura do glifo e, de fato, se um glifo pode ser exibido, depende em parte da configuração da fonte. Idealmente, sua configuração de fonte possui um glifo para cada EGC Unicode, e a largura de cada glifo corresponde ao resultado wcswidth() da função POSIX para o EGC. Se não for esse o caso, você provavelmente terá espaços em branco ou � (U+FFFD, caractere de substituição) para caracteres ausentes e caracteres subsequentes na linha podem ser extraviados.
Vale a pena saber que vários terminais desenham diretamente os caracteres do bloco, em vez de carregá -los de uma fonte. Isso geralmente é desejável. Os quadrantes e sextantes não são o lugar para demonstrar seu virtuosismo de design. Para inspecionar a renderização do seu ambiente de desenhar personagens, execute notcurses-info . A saída desejada deve parecer algo assim:
Se as coisas quebrarem ou parecerem sem brilho, consulte a seção Notas do ambiente! Você precisa de definições corretas TERM e LANG e pode querer COLORTERM .
NCOPTION_CLI_MODE (um alias para vários sinalizadores reais; consulte notcurses_init(1) para obter mais informações). Você ainda deve renderizar explicitamente.-DUSE_MULTIMEDIA=none .notcurses_core_init() ou ncdirect_core_init() no lugar de notcurses_init() / ncdirect_init() e link com -lnotcurses-core . Seu aplicativo provavelmente iniciará alguns milissegundos mais rapidamente; Mais importante, ele se vinculará às instalações mínimas de NotCurses.notcurses-demo (e talvez alguns outros programas). Use -DUSE_CXX=off .TERM , muitos terminais de hardware são suportados. Em geral, se a entrada do banco de dados Terminfo indicar atrasos obrigatórios, o NotCurses não apoiará atualmente esse terminal corretamente. Sabe -se que o NotCurses pode dirigir o VT320 e o VT340, incluindo o Sixel Graphics neste último.NCBLIT_PIXEL tenha sido solicitado. Da mesma forma, os sextantes ( NCBLIT_3x2 ) não serão usados sem o suporte do Unicode 13, etc. ncvisual_blit() usará o melhor bliter disponível, a menos que NCVISUAL_OPTION_NODEGRADE seja fornecido (nesse caso, falhará).screen .screen não suporta cores RGB (pelo menos a partir de 4.08.00); Se você tiver definido COLORTERM , terá um tempo ruim. Se você possui uma screen que foi compilada com --enable-colors256 , tente exportar TERM=screen-256color em oposição ao TERM=screen .mosh .NC_ENTER NCTYPE_RELEASE , e cada KeyPress normalmente resulta em pelo menos duas entradas.NCKEY_RESIZE até que eu pressione outra tecla.SIGWINCH em algum thread, e esse thread está recebendo o sinal em vez do encadeamento que chamou notcurses_getc_blocking() . Como resultado, a poll() não é interrompida. Ligue para pthread_sigmask() antes de gerar todos os threads.NotCurses seja executado quando eu retorno de main() ?NotCurses são escoposos para main() ).ncplane_move_yx() , mova-o embaixo de um plano opaco com ncplane_move_below() ou mova-o para fora da pilha com ncplane_reparent() .ncplane_box_yx() ? Você odeia ortogonalidade, seu Dullard?ncplane_box() e amigos já têm muitos argumentos, seu monstro.graphics/qr-code-generator .cmake -DCMAKE_REQUIRED_INCLUDES=/usr/local/include . Isso é passado pelo bsd.port.mkLANG é subdefinida ou definida incorretamente, ou a localidade necessária não está presente em sua máquina (também é possível que você tenha fornecido explicitamente NCOPTION_INHIBIT_SETLOCALE , mas nunca chamado setlocale(3) , nesse caso, não faça isso).ncplane ao usar um nccell . Por que o último não segura um ponteiro para o primeiro?nccell precisa permanecer o menor possível, e você quase sempre tem o ncplane Handy se tiver uma referência a um nccell válido de qualquer maneira.valgrind /Asan e mostra vazamentos de memória de libtinfo.so , o que há com isso?notcurses-demo , mas meus números de mesa não correspondem aos números de banner Notcurses, seu Charlatan.notcurses-demo torna vários quadros além das demos reais.notcurses_stop() / ncdirect_stop() em todos os caminhos de saída, incluindo sinais fatais (observe que, por padrão, o NotCurses instala manipuladores para a maioria dos sinais fatais para fazer exatamente isso).ncdirect_readline() ainda existe, e agora realmente funciona mesmo sem o BibLibReadLine, embora, obviamente, não seja exatamente o BibLibreadLine. De qualquer forma, você provavelmente seria melhor usar o modo CLI com um ncreader .pkg-config --static --libs notcurses (ou-- --libs notcurses-core ) para descobri-los.mintty com -P on argumentos ou exporte MSYS=enable_pcon antes de iniciá -lo.COLORTERM=24bit em todos os lugares?SendEnv COLORTERM ao .ssh/config e AcceptEnv COLORTERM para sshd_config no servidor remoto. Sim, isso provavelmente exigirá root no servidor remoto. Não me culpe, cara; Eu não fiz isso.ncvisual da memória RGBA usando ncvisual_from_rgba() .NCSTYLE_REVERSE ?ncchannels_reverse() para inverter corretamente as cores anteriores e de fundo.ncsubproc .notcurses_refresh() após notcurses_init() retornar com sucesso.“Nossas belas artes foram desenvolvidas, seus tipos e usos foram estabelecidos, em tempos muito diferentes do presente, por homens cujo poder de ação sobre as coisas era insignificante em comparação com os nossos. Mas o incrível crescimento de nossas técnicas, a adaptabilidade e a precisão que eles alcançaram, as idéias e hábitos que estão criando, tornam a certeza de que mudanças profundas são iminentes no antigo ofício dos belos . ” - Paul Valéry