Como usar seqüências ESC para tornar rolável a região do terminal

4

Eu tenho um dispositivo controlado stm32f1 que usa porta USART / USB para implementar uma interface de controle de usuário. Usando um software de terminal padrão (putty / minicom), um usuário tem a capacidade de inserir comandos simples no shell do dispositivo.

Existe um problema. No caso de muitos pacotes de informação recebidos, eles imprimem sobre o prompt do shell, tornando a entrada de novos comandos rígidos.

Eu planejo dividir uma tela de terminal em duas áreas: um prompt de uma linha e uma área rolável para pacotes de entrada.

Eu tentei usar a seguinte seqüência de escape:

162 72 r * DECSTBM - Set top and bottom margins (scroll region on VT100)
        [4;20r = Set top margin at line 4 and bottom at line 20

mas ainda não consigo encontrar um bom tutorial que é descrito de forma correta que me ajudará a resolver o meu problema.

    
por Ruslan Popov 23.11.2014 / 11:21

2 respostas

2

Ler o código-fonte é útil, mas os exemplos sugeridos são complicados. A maioria dos programas úteis como o OP está perguntando sobre o uso de seqüências de escape via interfaces termcap ou curses. Fazê-lo com maldições seria muito mais simples. Aqui estão os passos necessários com termcap:

  • obtenha a descrição do terminal (incluindo o movimento do cursor, a região de rolagem, a linha de apagamento, o índice)
  • inicializa o terminal para o modo "cbreak" (semi-raw) para permitir manter o prompt ligado em uma única linha.
  • mova o cursor para a linha onde o aviso deve ser
  • apaga a linha
  • escreva o prompt
  • obtenha o comando de entrada

Entretanto (a referência aos pacotes faz parecer que OP quer exibi-los simultaneamente com a entrada de leitura)

  • mova o cursor para a linha inferior da região de rolagem
  • definir a região de rolagem
  • escreva uma linha do pacote (terminando com nova linha ou usando a seqüência de escape índice )
  • redefine a região de rolagem para seu padrão (tela inteira)
  • mova o cursor de volta para a linha de comando, continue lendo comandos

A melhor prática não tenta usar o endereçamento do cursor fora da região de rolagem, portanto, haverá muita configuração / reconfiguração da região de rolagem, cada vez que o programa alterna entre as duas seções da tela.

Leitura adicional:

por 26.05.2016 / 01:52
1

(Supondo que você queira o prompt na parte inferior e a janela tenha 25 linhas de altura).

O básico é: configurar o shell do seu dispositivo para definir a região de rolagem assim que o comando for aceito pelo usuário (equivalente a printf "3[1,24r" ) - e redefini-lo assim que for concluído - printf "3[r" .

    
por 07.09.2015 / 22:10