tput
é deixado vago e mínimo em POSIX porque existe uma especificação mais detalhada em X / Open Curses:
Parece não haver um link direto para uma versão HTML do último (em particular, a linha de comando tput
), mas é mais detalhada (cerca de duas vezes mais longa). Citando a descrição em X / Open Curses:
7319 When XCURSES is supported, this description for the tput utility replaces that in the XC
7320 specification.
7321 The tput utility uses the terminfo database to make the values of terminal-dependen
7322 capabilities and information available to the shell (see sh in the XCU specification); to clear
7323 initialize, or reset the terminal; or to return the long name of the requested terminal type. Th
7324 tput utility outputs a string if the capability attribute (capname) is of type string, or an integer i
7325 the attribute is of type integer. If the attribute is of type boolean, tput simply sets the exit statu
7326 (0 for TRUE if the terminal has the capability, 1 for FALSE if it does not), and produces n
7327 output.
o programa recuperará qualquer valor do banco de dados do terminal. A maioria das plataformas que você usa fornece uma implementação de X / Open Curses. Os detalhes finos podem diferir, é claro. Em algumas plataformas, você pode encontrar uma versão de tput
que usa nomes termcap em vez de terminfo . Mas não é provável que você encontre isso em uma tarefa usando "POSIX" e, em qualquer caso, você pode atingir o mesmo objetivo, usando um vocabulário ligeiramente diferente.
No entanto, nem curses nem seqüências de escape ANSI fazem parte do POSIX. Sequências de escape são padronizadas no ECMA-48:
Como regra geral, o POSIX não se sobrepõe muito a outros padrões (você encontrará a maioria das exceções a essa regra versus o padrão C). Da mesma forma, X / Open Curses não se sobrepõe muito ao ECMA-48: a forma e o conteúdo das seqüências de escape não são detalhados naquele documento.
Estritamente falando, você não pode fazer sua tarefa usando apenas o POSIX. Você só pode fazer isso usando POSIX mais a variedade usual de padrões relacionados para os quais existe uma implementação em seu sistema.
O motivo de aplicativos como tput
(e bibliotecas como curses
) é fornecer uma camada para ocultar detalhes e inconsistências nas implementações. POSIX só vai tão longe, e omite a maioria dos recursos interessantes de um sistema operacional, por exemplo, gerenciamento de usuários, segurança e, claro, terminais de gerenciamento. Mesmo com sequências de escape, existem várias maneiras de mover o cursor em vários terminais. Aqui estão alguns resumos terminfo desses:
carriage_return cr cr carriage return (P*)
(P*)
column_address hpa ch horizontal position
#1, absolute (P)
cursor_address cup cm move to row #1 col-
umns #2
cursor_down cud1 do down one line
cursor_home home ho home cursor (if no
cup)
cursor_left cub1 le move left one space
cursor_mem_address mrcup CM memory relative cur-
sor addressing, move
to row #1 columns #2
cursor_right cuf1 nd non-destructive
cursor_to_ll ll ll last line, first
column (if no cup)
cursor_up cuu1 up up one line
space (move right
one space)
parm_left_cursor cub LE move #1 characters
to the left (P)
parm_right_cursor cuf RI move #1 characters
to the right (P*)
restore_cursor rc rc restore cursor to
position of last
row_address vpa cv vertical position #1
absolute (P)
save_cursor sc sc save current cursor
position (P)
tab ht ta tab to next 8-space
hardware tab stop
save_cursor