Se você está vendo controle Q (0x11) e controle S (0x13), estes são XON / XOFF: artefatos de controle de fluxo. Você só deve vê-los se a sua conexão diz que depende do controle de fluxo de software; o driver do terminal pode enviá-los para o dispositivo (assim como um usuário pode pressionar essas teclas para controlar a outra direção).
Leitura adicional:
- Quando usar o handshaking RS232 ou o controle de fluxo?
- O que é controle de fluxo? O que é RTS / CTS? O que é o Xon / Xoff?
- 11. Controle de Fluxo (Handshaking) (Text-Terminal HOWTO)
O comentário sobre "layout" para o Lynx é obscuro:
- 0x11 não é um caractere de espaço em branco em nenhum conjunto de caracteres que vem à mente.
- olhando para os conjuntos de caracteres que o Lynx conhece, nenhum mostra 0x11 como um personagem não imprimível.
- o conjunto de caracteres de exibição é configurável no Menu de opções .
- O Lynx só usaria isso como um caractere imprimível devido a uma estranha combinação de configurações de localidade e conjunto de caracteres de exibição.
Na falta de alguns detalhes sobre o motivo pelo qual o Lynx pode estar usando o 0x11 como um caractere não imprimível, parece que o driver do terminal está enviando XON / XOFF com um buffer razoavelmente pequeno.
Seguindo os comentários (o terminal qual está usando TERM=ansi
? a captura de tela mostra xterm ), lynx
pode escrever (usando curses) uma seta para a esquerda Por exemplo, o caractere ACS_LARROW
. No código-fonte , tem esta aparência:
/* * Draw the left scrolling-indicator now, to avoid the complication of * overwriting part of a multicolumn character which may lie in the first * position. */ if (IsPanned && lft_cells) { CTRACE_EDIT((tfp, "Draw left scroll-indicator\n")); TmpStyleOn(prompting ? s_prompt_edit_arr : s_aedit_arr); LYmove(StartY, StartX); LYaddch(ACS_LARROW); TmpStyleOff(prompting ? s_prompt_edit_arr : s_aedit_arr); lft_shift = 1; }
Agora ... lynx
sabe apenas sobre essa definição em <curses.h>
:
#define ACS_LARROW NCURSES_ACS(',') /* arrow pointing left */
enquanto a descrição do terminal para "ansi" fornece o mapeamento real em klone+acs
:
acsc=+0\,1-0.^Y03'
\,1
4a1f0g1h0j1k7l2m0n5o~p4q4r4s_t3u4v1w2x3y3z2{3|0}4~6,
Felizmente (para legibilidade), o mapeamento em que você está interessado é a segunda vírgula de mapeamento de entrada (com escape) para octal 021:
acsc=''aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
e esse é o seu DC1 (021 octal é 0x11 hexadecimal). Mas esse mapeamento não é usado em xterm . Os caracteres de desenho de linha para xterm
(a menos que esteja usando UTF-8, onde ncurses ignora a descrição do terminal) não incluem a seta para a esquerda. Esse mapeamento é definido em xterm-basic
, que você pode ver sem vírgula (a vírgula no final é um separador):
Terminal database (terminfo (5) or termcap (5)) entries that work with
xterm include
an optional platform-specific entry ("xterm-new"),
"xterm",
"vt102",
"vt100",
"ansi" and
"dumb"
O manual xterm sugere valores úteis para TERM
e os "ansi "um (embora na lista) não é o primeiro. Já está lá há algum tempo (predating ncurses):
/* * Draw the left scrolling-indicator now, to avoid the complication of * overwriting part of a multicolumn character which may lie in the first * position. */ if (IsPanned && lft_cells) { CTRACE_EDIT((tfp, "Draw left scroll-indicator\n")); TmpStyleOn(prompting ? s_prompt_edit_arr : s_aedit_arr); LYmove(StartY, StartX); LYaddch(ACS_LARROW); TmpStyleOff(prompting ? s_prompt_edit_arr : s_aedit_arr); lft_shift = 1; }
Por exemplo, eu vejo isso em X11R5 (1993). Mas foi introduzido anterior , aparecendo em X10R4 (1986). Eu suspeito que o significado de "ansi" para emuladores de terminal mudou ligeiramente em 30 anos (corresponde a ANSI.SYS
, que difere de xterm e assim por diante). Use "xterm"
(ou "xterm-new"
), e você obterá melhores resultados.