O que as seqüências de escape [? 1049h e [? 1h ANSI fazem?

3

Quando eu usei o shell em uma caixa e quando eu chamo menos comando ( echo foo | less ) na resposta do ajax, havia esse código:

\u001B[?1049h\u001B[?1h\u001B=\rfoo\r\n\u001B[7m(END)\u001B[27m\u001B[K

o que as sequências de escape \u001B[?1049h e \u001B[?1h fazem, também o que é \u001B= ? Eles estão documentados em algum lugar?

    
por jcubic 10.06.2016 / 14:56

2 respostas

4

\u001B é um caractere de escape ASCII desnecessariamente detalhado, que parece ter sido introduzido para ECMAScript6 . O POSIX usaria octal 3 , e outros permitiriam% hexadecimalb. A maiúsculas / minúsculas do número é irrelevante.

As \u001B[?1049h (e \u001B[?1049l ) são sequências de escape que indicam xterm para opcionalmente mude para e da tela alternativa.

  • O ponto de interrogação mostra que é "uso privado" (uma categoria reservada para recursos específicos da implementação no padrão). Cerca de um terço dos modos de uso privado listados nas Sequências de Controle do XTerm correspondem a um dos DEC's (aqueles um mnemônico como DECCKM em suas descrições). Os outros são originais do xterm, ou adaptados de outros terminais, como observado.

  • O motivo dessa seqüência de escape é fornecer uma maneira baseada em terminfo para permitir que os usuários decidam se os programas podem usar a tela alternativa. De acordo com o manual xterm :

titeInhibit (class TiteInhibit)
Specifies whether or not xterm should remove ti and te termcap entries (used to switch between alternate screens on startup of many screen-oriented programs) from the TERMCAP string. If set, xterm also ignores the escape sequence to switch to the alternate screen. Xterm supports terminfo in a different way, supporting composite control sequences (also known as private modes) 1047, 1048 and 1049 which have the same effect as the original 47 control sequence. The default for this resource is "false".

O código 1049 (introduzido em 1998 ) é reconhecido pela maioria dos emuladores de terminal que afirmam ser compatíveis com xterm, mas a maioria não torna o recurso opcional . Então eles não implementam o recurso.

Por outro lado, \u001B[?1h não se originou com xterm, mas (como \u001B= ) é de DEC VT100s, usado para alternar o terminal para usar modo de aplicação para teclas de cursor (DECCKM ) e o teclado numérico (DECKPAM). Eles são usados por programas como less ao inicializar o terminal porque as descrições dos terminais usam seqüências de escape no modo aplicativo (ou normal) para chaves especiais para corresponder as sequências de inicialização dadas em estas descrições de terminal.

Leitura adicional:

por 10.06.2016 / 22:13
1

ESC[?1049h parece ser do Conjunto de modos privados do DEC :

Save cursor as in DECSC and use Alternate Screen Buffer, clearing it first. (This may be disabled by the titeInhibit resource). This combines the effects of the 1 0 4 7 and 1 0 4 8 modes. Use this with terminfo-based applications rather than the 4 7 mode.

link

Observe que CSI é traduzido como ESC[ .

    
por 10.06.2016 / 16:04