Em um nível superior…

Em um nível superior…

Estou tentando encontrar informações há alguns dias. Para ser claro, meu objetivo é criar uma ncursesbiblioteca C semelhante a -. Estou plenamente consciente deSequência de escape ANSIe como usá-los. No entanto, quero portabilidade, por isso estou interessado em terminfobancos de dados. Eu li partes de documentações como:

Isso me permitiu entender a teoria e os princípios, mas na prática não consigo encontrar nenhum exemplo de como acessar/interfacear o banco de dados em uma linguagem de programação como C.

Atualmente a única maneira que me vem à cabeça seria carregar o terminfoarquivo binário do banco de dados na memória e realizar o acesso manualmente a ele, mas parece estranho que eu deva construir meu próprio esquema e que não exista uma maneira mais fácil/prática/oficial para acessar esses malditos bancos de dados.

Responder1

Para acessar o banco de dados termcap no FreeBSD, existeéuma forma que vem no sistema operacional. A biblioteca FreeBSD C possui uma API para acessarbancos de dados de capacidades. Então getcap()e outros. são as funções a serem chamadas para acessar o banco de dados termcap em um nível baixo. (Na verdade, existem APIs de nível inferior, mas elas não abstraem, como a getcap()API faz, o fato de que os bancos de dados de recursos podem ser arquivos simples de registro de comprimento variável ou arquivos de banco de dados binários indexados adequados, construídos com o cap_mkdbprograma.)

Em um nível superior estão tgetent(), tputs(), et al.. (Eles também existem em sistemas operacionais terminfo, como muitos sistemas operacionais baseados em Linux.) Eles são, no entanto, parte da biblioteca termcap ncurses que está na biblioteca C do FreeBSD; e você está tentando criar sua própria biblioteca "semelhante a ncurses". (Nos sistemas operacionais baseados em Linux, eles fazem parte da biblioteca terminfo ncurses.)

Um exemplo de acesso aos registros do banco de dados terminfo sem passar pela própria API terminfo do ncurses é a biblioteca unibilium. NeoVIM usa isso.

Em um nível superior…

A ideia de que terminfo/termcap émais portátilestá realmente esticado até ao ponto de ruptura e mais além na segunda década do século XXI. É quase certo que você nunca encontrará um terminal de vídeo real que não seja compatível com ECMA-48:1976, muito menos um terminal de papel. E as abstrações terminfo, que muitas vezes não correspondem ao que os terminais de vídeo reais fazem, são, de certa forma, umaimpedimentoà portabilidade, pois forçam uma forma um tanto distorcida de trabalhar.

Isto é especialmente verdadeiro paraentrada terminal, que na verdade tem sido ECMA-48 (com alguns corpos de máquina de estado para RXVT, Interix, Linux KVT e SCO Console) desde o início dos anos 1980, e para o qual o modelo termcap/terminfo de correspondência de strings fixas é muito pobre ajustar. Mas as ideias de teclados de calculadora "locais"/"xmit", "modo de endereçamento de cursor" e apenas 3 formas de manifestação do cursor, entre outras, também não correspondem à forma como os terminais realmente funcionam.

Se vocêsãovai reinventar ncurses, então pelo menos não copie seu modelo de pares de cores. Isso mal se alinha com os sistemas de cores ECMA-48 e AIXterm, muito menos com os mecanismos de cores indexados e diretos ITU T.416 que os terminais possuem há mais de um quarto de século.

Leitura adicional

informação relacionada