A ausência de um marcador %p
é uma peculiaridade do ncurses: o compilador terminfo ( tic ) reconhece terminfo (que usa %p1
para marca parâmetros) ou termcap (que depende de convenção para os parâmetros). Isso seria uma expressão legal termcap . Como o tic sabe como processar uma expressão termcap, a string mostrada é "próxima o suficiente" e não houve necessidade de traduzi-la ainda mais.
Você pode ver o que o ncurses faz usando tput
por exemplo,
tput u6 40 50
dá (note a reversão dos parâmetros)
^[[51;41R
Se a expressão foi dada como
u6=\E[%i%p2%d;%p1%dR
teria o mesmo resultado.
As capacidades do u6-u9 são uma extensão anterior documentada em ncurses banco de dados de terminal :
# INTERPRETATION OF USER CAPABILITIES
#
# The System V Release 4 and XPG4 terminfo format defines ten string
# capabilities for use by applications, <u0>...<u9>. In this file, we use
# certain of these capabilities to describe functions which are not covered
# by terminfo. The mapping is as follows:
#
# u9 terminal enquire string (equiv. to ANSI/ECMA-48 DA)
# u8 terminal answerback description
# u7 cursor position request (equiv. to VT100/ANSI/ECMA-48 DSR 6)
# u6 cursor position report (equiv. to ANSI/ECMA-48 CPR)
#
# The terminal enquire string <u9> should elicit an answerback response
# from the terminal. Common values for <u9> will be ^E (on older ASCII
# terminals) or \E[c (on newer VT100/ANSI/ECMA-48-compatible terminals).
#
# The cursor position request (<u7>) string should elicit a cursor position
# report. A typical value (for VT100 terminals) is \E[6n.
#
# The terminal answerback description (u8) must consist of an expected
# answerback string. The string may contain the following scanf(3)-like
# escapes:
#
# %c Accept any character
# %[...] Accept any number of characters in the given set
#
# The cursor position report (<u6>) string must contain two scanf(3)-style
# %d format elements. The first of these must correspond to the Y coordinate
# and the second to the %d. If the string contains the sequence %i, it is
# taken as an instruction to decrement each value after reading it (this is
# the inverse sense from the cup string). The typical CPR value is
# \E[%i%d;%dR (on VT100/ANSI/ECMA-48-compatible terminals).
#
# These capabilities are used by tack(1m), the terminfo action checker
# (distributed with ncurses 5.0).
Verificando o último comentário, tutoria exerce u8
e u9
, mas não faz nada com u6
e u7
.
A extensão foi adicionada no início de 1995 :
# 9.3.4 (Wed Feb 22 19:27:34 EST 1995):
# * Added correct acsc/smacs/rmacs strings for vt100 and xterm.
# * Added u6/u7/u8/u9 capabilities.
# * Added PCVT entry.
e enquanto está incluído em várias entradas para completude (não muitos: há 16 ocorrências em 18.699 linhas de terminfo.src
), não há usuários conhecidos do recurso. De fato, há um lugar em ncurses onde poderia ter sido escrito para usá-lo (alguns códigos de depuração ifdef'd no tty_update.c
arquivo), mas que usa sequências de escape codificadas (marcadas como" compatível com ANSI ").
O motivo da ausência de usuários seria:
- inverter uma expressão arbitrária do terminfo é mais difícil do que parece
- xterm e terminais similares interpretam essas seqüências de escape
Em ECMA-48 , estes são (u7) DSR (relatório de status do dispositivo) e (u6) CPR (relatório de posição ativa).