Qual é o comprimento máximo para uma sequência de escape multibyte?

5
  • ESC envia \x1b . Isso é 1 byte : o caractere de escape real.

  • Subir página envia \x1b[H . Isso é 3 bytes .

  • F2 envia \x1b[OQ . São 4 bytes .

  • F5 envia \x1b[15~ . São 5 bytes .

Qual é o tamanho máximo de um deles? Isto está documentado em algum lugar?

    
por cat 22.02.2016 / 05:54

1 resposta

4

Não há limite predefinido para o comprimento de seqüências de controle . OP dá como exemplos algumas strings enviadas por chaves especiais , que estão documentadas em Sequências de Controle do XTerm .

O xterm começa com uma lista de possíveis códigos chave, pode adicionar códigos para modificadores, conforme descrito no Alt e chaves Meta seção. Não há tabela de comprimentos. Uma complicação para isso é que existem várias configurações de recursos que funcionam juntas para fazer alguns milhares de arranjos de teclado possíveis. Em vez de descrever todos eles, a descrição do terminal xterm é apresentada como um conjunto de blocos de construção terminfo (os nomes com "+"), incluindo recursos definidos pelo usuário para chaves modificadas (por exemplo, controle , shift , etc).

  • A página terminfo para xterm lista aquelas (geradas por um script).
  • Os building-blocks são limitados em tamanho, para caber dentro do limite de 4096 bytes no terminus compilado, assumido pela maioria das implementações.
  • O ncurses banco de dados do terminal lista um subconjunto desses blocos de construção.
  • Também documenta os recursos definidos pelo usuário usados pelas entradas xterm, notando que há muito mais chaves possíveis do que estão documentadas.

Alguns outros terminais implementam o esquema xterm, mas apenas para combinações específicas. Então, esses seriam mais fáceis de enumerar. Eles são de certo modo "predefinidos".

No entanto, chaves especiais não são o único tipo de seqüência de controle. Cada um desses terminais usando o formato ECMA-48 aceita sequências de controle enviadas do host. De um modo geral, eles aceitam parâmetros numéricos ou de string:

    O
  • xterm ignora números maiores que 65535, então você pode considerar isso como um limite no número de dígitos (mas dependente do terminal).
  • Uma seqüência de controle pode incluir um número arbitrário de parâmetros numéricos. Por exemplo, o xterm aceita uma seqüência de controle que altera cada uma das 256 cores na paleta de 256 cores. Isso é alguns kilobytes (que podem ser estimados para um limite superior). O analisador de seqüência de controle não precisa mais do que alguns números em qualquer ponto.
  • parâmetros de string (como definir o título em uma janela) não têm um limite predefinido em seu comprimento.

Mais uma vez, outros emuladores de terminal podem usar seus próprios limites no comprimento das seqüências de controle que aceitam.

    
por 22.02.2016 / 11:02