NAZWA¶
terminfo - baza właściwości terminala
SKŁADNIA¶
/usr/share/terminfo/*/*
OPIS¶
Uwaga! To tłumaczenie może być nieaktualne!
Terminfo jes bazą danych, opisującą terminale,
używaną przez programy obsługujące ekran, takie jak
nvi(1),
rogue(1) i biblioteki takie, jak
curses(3X).
Terminfo opisuje terminale przez podawanie zestawu ich
właściwości, opisując jak wykonywać operacje ekranowe
oraz podając wymagania wypełniania i sekwencje inicjalizacji.
Wpisy w
terminfo składają się z sekwencji pól,
rozdzielonych przecinkami (osadzane przecinki można cytować lewymi
ukośnikami, lub zapisywać jako \072). Białe spacje po
separatorze `,' są ignorowane. Pierwszy wpis każdego terminala
podaje nazwy, pod którymi znany jest terminal, rozdzielone znakami `|'.
Pierwsza podana nazwa jest najpopularniejszym skrótem terminala, a
ostatnia nazwa jest długą nazwą, w pełni
identyfikującą terminal. Wszystkie nazwy są synonimiczne.
Wszystkie nazwy poza ostatnią powinny być pisane małymi
literami i nie zawierać spacji; ostatnia nazwa może je zawierać
dla czytelności.
Nazwy terminali (poza ostatnim, gadatliwym wpisem) powinny być wybierane
wg. następujących konwencji: Sprzęt, który składa
się na terminal, powinien tworzyć korzeń nazwy, stąd
``hp2621''. Nazwa ta nie powinna zawierać myślników. Tryby,w
których sprzęt może się znajdować powinny być
wskazywane przez dodanie myślnika i przyrostka trybu. Tak więc vt100
w 132 kolumnowym trybie to vt100-w. Następujące przyrostki powinny
być używane tam gdzie to możliwe:
Przyrostek |
Znaczenie |
przykład |
-nn |
Liczba wierszy ekranu |
aaa-60 |
-np |
Liczba stron pamięci |
c100-4p |
-am |
Z automarginesami (zwykle domyślne) |
vt100-am |
-m |
Tryb mono; powstrzymuje kolor |
ansi-m |
-mc |
Magiczne ciasteczko; spacje przy podświetlaniu |
wy30-mc |
-na |
Brak klawiszy strzałek (zostaw je w lokalnym) |
c100-na |
-nam |
Bez automatycznych marginesów |
vt100-nam |
-nl |
Bez linii statusu |
att4415-nl |
-ns |
Bez linii statusu |
hp2626-ns |
-rv |
Odwrócone kolory |
c100-rv |
-s |
Włącza linię statusu |
vt100-s |
-vb |
Używa wizualnego dzwonka zamiast audio |
wy370-vb |
-w |
Szeroki tryb (> 80 kolumn, zwykle 132) |
vt100-w |
Dla dalszych informacji o konwencjach nazywania, poczytaj stronę
term(7).
Właściwości¶
Poniżej znajduje się kompletna liczba właściwości
załączanych w bloku opisu terminfo i dostępnych dla kodu,
korzystającego z terminfo. W każdej linii tabeli
Zmienna jest nazwą, poprzez którą programista (na poziomie
terminfo) dostaje się do właściwości.
Nazwawłaściwości jest krótką nazwą,
używaną w tekście bazy danych, a korzysta z niej osoba
aktualizująca bazę. Jeśli to możliwe,
nazwywłaściwości są wybierane w standardzie (przynajmniej
zbliżonym do) ANSI X3.64-1979 (który jest obecnie wypierany przez
ECMA-48, używającego jednak podobnych nazw). Semantyka powinna
też odpowiadać specyfikacji.
Kod termcap jest starą nazwą właściwości
termcap
(niektóre własciwości są nowe i mają nazwy nie
pochodzące z termcap).
Nazwy właściwości nie mają sztywnego limitu
długości, lecz przyjęto nieformalny limit 5 znakowy, który
zachowuje je w zwartej postaci i umożliwia tabulacjom w pliku
Caps
ładne zawijanie.
Na koniec, pole opisu próbuje przenieść semantykę
właściwości. W polu opisu możesz znaleźć pewne
kody:
- (P)
- określa, że można podać
wypełnianie (padding)
- #[1-9]
- w polu opisu określa, że łańcuch jest
przekazywany przez tparm z określonymi parametrami (# i).
(patrz lib_tparm.c z pakietu ncurses--przyp. tłum.)
- (P*)
- określa, że wypełnianie może
różnić się w zależności do liczby
objętych nim linii.
- (#i)
- określa ity parametr.
Oto właściwości logiczne:
Zmienna |
Nazwa- |
Kod |
Opis |
Booleans |
właść. |
Tcap |
|
auto_left_margin |
bw |
bw |
cub1 zawija z kolumny 0 na ostatnią |
auto_right_margin |
am |
am |
terminal ma marginesy automatyczne |
back_color_erase |
bce |
ut |
ekran jest czyszczony kolorem tła |
can_change |
ccc |
cc |
terminal może redefiniować istniejące kolory |
ceol_standout_glitch |
xhp |
xs |
tryb wyróżniony nie kasowany przez nadpisywanie (hp) |
col_addr_glitch |
xhpa |
YA |
jedynie ruchy dodatnie dla właściwości hpa/mhpa |
cpi_changes_res |
cpix |
YF |
zmienianie natężenia (pitch) znaku zmienia
rozdzielczość |
cr_cancels_micro_mode |
crxm |
YB |
używanie cr wyłącza tryb micro |
dest_tabs_magic_smso |
xt |
xt |
tabulacje destruktywne, magiczny znak so (t1061) |
eat_newline_glitch |
xenl |
xn |
nowa linia jest ignorowana po 80 kolumnach |
erase_overstrike |
eo |
eo |
spacją można kasować nadstuknięcia
(overstrikes) |
generic_type |
gn |
gn |
podstawowy rodzaj linii |
hard_copy |
hc |
hc |
terminal hardcopy |
hard_cursor |
chts |
HC |
kursor jest trudny do zobaczenia |
has_meta_key |
km |
km |
ma klawisz meta (ustawia bit parzystości) |
has_print_wheel |
daisy |
YC |
drukarka wymaga do zmiany zestawu znaków operatora |
has_status_line |
hs |
hs |
ma dodatkową linię statusu |
hue_lightness_saturation |
hls |
hl |
terminal używa tylko notacji HLS kolorów (Tektronix) |
insert_null_glitch |
in |
in |
tryb wstawiania (insert) rozróżnia zera (nulls) |
lpi_changes_res |
lpix |
YG |
zmienianie natężenia (pitch) linii zmienia
rozdzielczość |
memory_above |
da |
da |
wyświetlacz może być zachowywany ponad ekranem |
memory_below |
db |
db |
wyświetlacz może być zachowywany pod ekranem |
move_insert_mode |
mir |
mi |
w trybie wstawiania można się bezpiecznie poruszać |
move_standout_mode |
msgr |
ms |
w trybie wyróżnienia można się bezpiecznie
poruszać |
needs_xon_xoff |
nxon |
nx |
wypełnianie nie zadziała, potrzeba xon/xoff |
no_esc_ctlc |
xsb |
xb |
ul ([terminal] beehive) (f1=escape, f2=ctrl C) |
no_pad_char |
npc |
NP |
znak dopełniania nie istnieje |
non_dest_scroll_region |
ndscr |
ND |
przewijanie regionu nie jest destruktywne |
non_rev_rmcup |
nrrmc |
NR |
smcup nie odwraca rmcup |
over_strike |
os |
os |
terminal może nadstukiwać |
prtr_silent |
mc5i |
5i |
drukarka nie daje echa na ekran |
row_addr_glitch |
xvpa |
YD |
daje tylko dodatnie ruchy dla właść. vpa/mvpa |
semi_auto_right_margin |
sam |
YE |
drukowanie ostatniej kolumny powoduje cr |
status_line_esc_ok |
eslok |
es |
w linii statusu można używać escape |
tilde_glitch |
hz |
hz |
nie można drukować znaków ~ |
transparent_underline |
ul |
ul |
podkreślony znak nadstukuje |
xon_xoff |
xon |
xo |
terminal używa potwierdzania xon/xoff |
A oto właściwości numeryczne:
Zmienna |
Nazwa- |
Kod |
Opis |
numeryczna |
właść. |
tcap |
|
columns |
cols |
co |
liczba kolumn w linii |
init_tabs |
it |
it |
początkowo tabulacje co # spacji |
label_height |
lh |
lh |
wiersze w każdej etykiecie |
label_width |
lw |
lw |
kolumny w każdej etykiecie |
lines |
lines |
li |
liczba linii na ekranie lub stronie |
lines_of_memory |
lm |
lm |
linie pamięci w wypadku gdy > linii ekranu. 0 =>
różni się |
magic_cookie_glitch |
xmc |
sg |
liczba spacji, pozostawianych przez smso lub rmso |
max_attributes |
ma |
ma |
maksymalna liczba połączonych atrybutów, które
obsługuje terminal |
max_colors |
colors |
Co |
maksymalna liczba kolorów na ekranie |
max_pairs |
pairs |
pa |
maksymalna liczba par kolorów na ekranie |
maximum_windows |
wnum |
MW |
maksymalna liczna definiowalnych okien |
no_color_video |
ncv |
NC |
atrybuty wideo, których nie można używać z
kolorami |
num_labels |
nlab |
Nl |
liczba etykiet na ekranie |
padding_baud_rate |
pb |
pb |
najniższa szybkość przesyłu (baud rate) gdy wymagane
jest wypełnianie (padding). |
virtual_terminal |
vt |
vt |
liczba terminali wirtualnych (CB/unix) |
width_status_line |
wsl |
ws |
liczba kolumn w linii statusu |
W strukturze term SVr4.0 istnieją też następujące
właściwości numeryczne, lecz nie są one jeszcze
udokumentowane w podręczniku. Pochodzą one z SVr4-tego wsparcia dla
drukarki.
Zmienna |
Nazwa- |
Kod |
Opis |
Numeryczna |
właść |
Tcap |
|
bit_image_entwining |
bitwin |
Yo |
liczba przejść (passes) dla każdego wiersza obrazu
bitowego |
bit_image_type |
bitype |
Yp |
rodzaj urządzenia obrazu bitowego |
buffer_capacity |
bufsz |
Ya |
licza bajtów buforowanych przed drukowaniem |
buttons |
btns |
BT |
liczba przycisków myszy |
dot_horz_spacing |
spinh |
Yc |
odstępy poprzeczne punktów wyrażone w punktach na cal
(DPI) |
dot_vert_spacing |
spinv |
Yb |
odstępy pionowe igieł (pins) w igłach na cal |
max_micro_address |
maddr |
Yd |
maksymalna wartość w micro_..._address |
max_micro_jump |
mjump |
Ye |
maksymalna wartość w parm_..._micro |
micro_col_size |
mcs |
Yf |
rozmiar kroku znakowego w trybie micro mode |
micro_line_size |
mls |
Yg |
rozmiar kroku liniowego w trybie micro mode |
number_of_pins |
npins |
Yh |
liczba igieł w głowicy drukującej (print-head) |
output_res_char |
orc |
Yi |
rozdzielczość poprzeczna w jednostkach na linię |
output_res_horz_inch |
orhi |
Yk |
rozdzielczość poprzeczna w jednostkach na cal |
output_res_line |
orl |
Yj |
rozdzielczość pionowa w jednostkach na linię |
output_res_vert_inch |
orvi |
Yl |
rozdzielczość pionowa w jednostkach na cal |
print_rate |
cps |
Ym |
wydrukuj szybkość przesyłu w znakach na sekundę |
wide_char_size |
widcs |
Yn |
rozmiar kroku znaku w trybie podwojonej szerokości |
A oto właściwości napisowe:
Zmienna |
Nazwa- |
Kod |
Opis |
Napisowa |
właść. |
Tcap |
|
acs_chars |
acsc |
ac |
graficzne pary zestawu znaków, oparte o vt100 |
back_tab |
cbt |
bt |
wsteczna tabulacja (P) |
bell |
bel |
bl |
sygnał audiofoniczny (dzwonek) (P) |
carriage_return |
cr |
cr |
powrót karetki (P*) (P*) |
change_char_pitch |
cpi |
ZA |
Zmień liczbę znaków na cal |
change_line_pitch |
lpi |
ZB |
Zmień liczbę linii na cal |
change_res_horz |
chr |
ZC |
Zmień rozdzielczość poprzeczną |
change_res_vert |
cvr |
ZD |
Zmień rozdzielczość pionową |
change_scroll_region |
csr |
cs |
zmień region na linię #1 do linii #2 (P) |
char_padding |
rmp |
rP |
podobne do ip, lecz w trybie wstawiania (insert) |
clear_all_tabs |
tbc |
ct |
czyść wszystkie tabulatory (tab stops) (P) |
clear_margins |
mgc |
MC |
czyść wszystkie miękkie lewe i prawe marginesy |
clear_screen |
clear |
cl |
czyść ekran i wyzeruj kursor (home cursor) (P*) |
clr_bol |
el1 |
cb |
wyczyść początek linii |
clr_eol |
el |
ce |
wyczyść do końca linii (P) |
clr_eos |
ed |
cd |
wyczyść do końca ekranu (P*) |
column_address |
hpa |
ch |
pozycja pozioma #1 (P) |
command_character |
cmdch |
CC |
ustawialny w prototypie znak cmd terminala !? |
create_window |
cwin |
CW |
definiuj okno #1 od #2,#3 do #4,#5 |
cursor_address |
cup |
cm |
przejdź do wiersza #1 kolumny #2 |
cursor_down |
cud1 |
do |
w dół o 1 linię |
cursor_home |
home |
ho |
kursor do domu (jeśli bez cup) |
cursor_invisible |
civis |
vi |
uczyń kursor niewidzialnym |
cursor_left |
cub1 |
le |
przejdź jedną spację w lewo |
cursor_mem_address |
mrcup |
CM |
adresowanie kursora względem pamięci |
cursor_normal |
cnorm |
ve |
spowoduj, że kursor stanie się normalny (odtwórz zmiany
civis/cvvis) |
cursor_right |
cuf1 |
nd |
niedestruktywna spacja (przejdź w prawo o spację) |
cursor_to_ll |
ll |
ll |
ostatnia linia, pierwsza kolumna (jeśli bez cup) |
cursor_up |
cuu1 |
up |
w górę o 1 linię |
cursor_visible |
cvvis |
vs |
uczyń kursor bardzo widzialnym |
define_char |
defc |
ZE |
zdefiniuj znak |
delete_character |
dch1 |
dc |
usuń znak (P*) |
delete_line |
dl1 |
dl |
usuń linię (P*) |
dial_phone |
dial |
DI |
wykręć numer #1 |
dis_status_line |
dsl |
ds |
wyłącz linię statusu |
display_clock |
dclk |
DK |
wyświetl w pozycji (#1,#2) zegar |
down_half_line |
hd |
hd |
pół linii w dół |
ena_acs |
enacs |
eA |
włącz alternatywny zestaw znaków |
enter_alt_charset_mode |
smacs |
as |
rozpocznij tryb alternatywnego zestawu znaków (P) |
enter_am_mode |
smam |
SA |
włącz automatyczne marginesy |
enter_blink_mode |
blink |
mb |
włącz migotanie |
enter_bold_mode |
bold |
md |
włącz tryb wytłuszczenia (dodatkowe
rozjaśnienie) |
enter_ca_mode |
smcup |
ti |
łańcuch do rozpoczynania programów, używających
cup |
enter_delete_mode |
smdc |
dm |
wejdź w tryb kasowania (delete) |
enter_dim_mode |
dim |
mh |
włącz tryb pół-rozjaśnienia |
enter_doublewide_mode |
swidm |
ZF |
wejdź w tryb podwójnej szerokości |
enter_draft_quality |
sdrfq |
ZG |
wejdź w tryb jakości draft |
enter_insert_mode |
smir |
im |
wejdź w tryb wstawiania (insert) |
enter_italics_mode |
sitm |
ZH |
wejdź w tryb kursywy |
enter_leftward_mode |
slm |
ZI |
rozpocznij lewokierunkowy ruch karetki |
enter_micro_mode |
smicm |
ZJ |
rozpocznij tryb micro-motion (mikro ruchów) |
enter_near_letter_quality |
snlq |
ZK |
wejdź w tryb NLQ |
enter_normal_quality |
snrmq |
ZL |
wejdź w tryb normalnej jakości |
enter_protected_mode |
prot |
mp |
włącz tryb chroniony |
enter_reverse_mode |
rev |
mr |
włącz tryb inwersyjny wideo |
enter_secure_mode |
invis |
mk |
włącz tryb niewidzialny (znaki niewidoczne) |
enter_shadow_mode |
sshm |
ZM |
wejdź w tryb shadow-print (cieniowego-drukowania) |
enter_standout_mode |
smso |
so |
rozpocznij tryb wyróżniony (standout) |
enter_subscript_mode |
ssubm |
ZN |
wejdź w tryb indeksu dolnego |
enter_superscript_mode |
ssupm |
ZO |
wejdź w tryb indeksu górnego |
enter_underline_mode |
smul |
us |
rozpocznij tryb podkreślenia |
enter_upward_mode |
sum |
ZP |
rozpocznij górnokierunkowy ruch karetki |
enter_xon_mode |
smxon |
SX |
włącz potwierdzenia xon/xoff |
erase_chars |
ech |
ec |
wykasuj #1 znaków (P) |
exit_alt_charset_mode |
rmacs |
ae |
zakończ [działanie] alternatywnego zestawu znaków
(P) |
exit_am_mode |
rmam |
RA |
wyłącz automatyczne marginesy |
exit_attribute_mode |
sgr0 |
me |
wyłącz wszystkie atrybuty |
exit_ca_mode |
rmcup |
te |
łańcuchy do kończenia programów,
używających cup |
exit_delete_mode |
rmdc |
ed |
zakończ tryb kasowania |
exit_doublewide_mode |
rwidm |
ZQ |
zakończ tryb podwojonej szerokości |
exit_insert_mode |
rmir |
ei |
zakończ tryb wstawiania |
exit_italics_mode |
ritm |
ZR |
zakończ tryb kursywy |
exit_leftward_mode |
rlm |
ZS |
zakończ tryb ruchu w lewo |
exit_micro_mode |
rmicm |
ZT |
zakończ tryb micro-motion |
exit_shadow_mode |
rshm |
ZU |
zakończ tryb shadow-print |
exit_standout_mode |
rmso |
se |
zakończ tryb wyróżnienia |
exit_subscript_mode |
rsubm |
ZV |
zakończ tryb indeksu dolnego |
exit_superscript_mode |
rsupm |
ZW |
zakończ tryb indeksu górnego |
exit_underline_mode |
rmul |
ue |
zakończ tryb podkreślenia |
exit_upward_mode |
rum |
ZX |
zakończ odwrócone ruchy znaków |
exit_xon_mode |
rmxon |
RX |
wyłącz potwierdzenia xon/xoff |
fixed_pause |
pause |
PA |
pauzuj przez 2-3 sekundy |
flash_hook |
hook |
fh |
zaczep przełącznika rozbłysku (flash switch hook) |
flash_screen |
flash |
vb |
widzialny dzwonek (nie może ruszać kursora) |
form_feed |
ff |
ff |
Wyrzucenie strony z terminala hardcopy (P*) |
from_status_line |
fsl |
fs |
powrót z linii statusu |
goto_window |
wingo |
WG |
idź do okna #1 |
hangup |
hup |
HU |
odwieś słuchawkę |
init_1string |
is1 |
i1 |
łańcuch inicjalizacji |
init_2string |
is2 |
is |
łańcuch inicjalizacji |
init_3string |
is3 |
i3 |
łańcuch inicjalizacji |
init_file |
if |
if |
nazwa pliku inicjalizacji |
init_prog |
iprog |
iP |
ścieżka do programu do inicjalizacji |
initialize_color |
initc |
Ic |
inicjalizuj kolor #1 na (#2,#3,#4) |
initialize_pair |
initp |
Ip |
inicjalizuj parę #1 kolorów na fg=(#2,#3,#4),
bg=(#5,#6,#7) |
insert_character |
ich1 |
ic |
wstaw znak (P) |
insert_line |
il1 |
al |
wstaw linię (P*) |
insert_padding |
ip |
ip |
wstaw wypełnienie (padding) po wstawionym znaku |
key_a1 |
ka1 |
K1 |
lewy, górny róg keypadu |
key_a3 |
ka3 |
K3 |
prawy, górny róg keypadu |
key_b2 |
kb2 |
K2 |
środek keypadu |
key_backspace |
kbs |
kb |
klawisz backspace |
key_beg |
kbeg |
@1 |
klawisz begin |
key_btab |
kcbt |
kB |
klawisz wstecznej tabulacji |
key_c1 |
kc1 |
K4 |
lewy, dolny róg keypadu |
key_c3 |
kc3 |
K5 |
prawy, dolny róg keypadu |
key_cancel |
kcan |
@2 |
klawisz cancel (anulowania) |
key_catab |
ktbc |
ka |
klawisz czyszczenia wszystkich tabulacji |
key_clear |
kclr |
kC |
klawisz czyszczenia ekranu lub wymazywania |
key_close |
kclo |
@3 |
klawisz close (zamykania) |
key_command |
kcmd |
@4 |
klawisz poleceń |
key_copy |
kcpy |
@5 |
klawisz copy (kopiowania) |
key_create |
kcrt |
@6 |
klawisz create (tworzenia) |
key_ctab |
kctab |
kt |
klawisz czyszczenia tabulacji |
key_dc |
kdch1 |
kD |
klawisz kasowania znaku |
key_dl |
kdl1 |
kL |
klawisz kasowania linii |
key_down |
kcud1 |
kd |
strzałka w dół |
key_eic |
krmir |
kM |
wysyłane przez rmir lub smir w trybie wstawiania |
key_end |
kend |
@7 |
klawisz end |
key_enter |
kent |
@8 |
klawisz enter/send |
key_eol |
kel |
kE |
klawisz kasowania do końca linii |
key_eos |
ked |
kS |
klawisz kasowania do końca ekranu |
key_exit |
kext |
@9 |
klawisz exit (zakończenia) |
key_f0 |
kf0 |
k0 |
klawisz funkcyjny F0 |
key_f1 |
kf1 |
k1 |
klawisz funkcyjny F1 |
key_f10 |
kf10 |
k; |
klawisz funkcyjny F10 |
key_f11 |
kf11 |
F1 |
klawisz funkcyjny F11 |
key_f12 |
kf12 |
F2 |
klawisz funkcyjny F12 |
key_f13 |
kf13 |
F3 |
klawisz funkcyjny F13 |
key_f14 |
kf14 |
F4 |
klawisz funkcyjny F14 |
key_f15 |
kf15 |
F5 |
klawisz funkcyjny F15 |
key_f16 |
kf16 |
F6 |
klawisz funkcyjny F16 |
key_f17 |
kf17 |
F7 |
klawisz funkcyjny F17 |
key_f18 |
kf18 |
F8 |
klawisz funkcyjny F18 |
key_f19 |
kf19 |
F9 |
klawisz funkcyjny F19 |
key_f2 |
kf2 |
k2 |
klawisz funkcyjny F2 |
key_f20 |
kf20 |
FA |
klawisz funkcyjny F20 |
key_f21 |
kf21 |
FB |
klawisz funkcyjny F21 |
key_f22 |
kf22 |
FC |
klawisz funkcyjny F22 |
key_f23 |
kf23 |
FD |
klawisz funkcyjny F23 |
key_f24 |
kf24 |
FE |
klawisz funkcyjny F24 |
key_f25 |
kf25 |
FF |
klawisz funkcyjny F25 |
key_f26 |
kf26 |
FG |
klawisz funkcyjny F26 |
key_f27 |
kf27 |
FH |
klawisz funkcyjny F27 |
key_f28 |
kf28 |
FI |
klawisz funkcyjny F28 |
key_f29 |
kf29 |
FJ |
klawisz funkcyjny F29 |
key_f3 |
kf3 |
k3 |
klawisz funkcyjny F3 |
key_f30 |
kf30 |
FK |
klawisz funkcyjny F30 |
key_f31 |
kf31 |
FL |
klawisz funkcyjny F31 |
key_f32 |
kf32 |
FM |
klawisz funkcyjny F32 |
key_f33 |
kf33 |
FN |
klawisz funkcyjny F33 |
key_f34 |
kf34 |
FO |
klawisz funkcyjny F34 |
key_f35 |
kf35 |
FP |
klawisz funkcyjny F35 |
key_f36 |
kf36 |
FQ |
klawisz funkcyjny F36 |
key_f37 |
kf37 |
FR |
klawisz funkcyjny F37 |
key_f38 |
kf38 |
FS |
klawisz funkcyjny F38 |
key_f39 |
kf39 |
FT |
klawisz funkcyjny F39 |
key_f4 |
kf4 |
k4 |
klawisz funkcyjny F4 |
key_f40 |
kf40 |
FU |
klawisz funkcyjny F40 |
key_f41 |
kf41 |
FV |
klawisz funkcyjny F41 |
key_f42 |
kf42 |
FW |
klawisz funkcyjny F42 |
key_f43 |
kf43 |
FX |
klawisz funkcyjny F43 |
key_f44 |
kf44 |
FY |
klawisz funkcyjny F44 |
key_f45 |
kf45 |
FZ |
klawisz funkcyjny F45 |
key_f46 |
kf46 |
Fa |
klawisz funkcyjny F46 |
key_f47 |
kf47 |
Fb |
klawisz funkcyjny F47 |
key_f48 |
kf48 |
Fc |
klawisz funkcyjny F48 |
key_f49 |
kf49 |
Fd |
klawisz funkcyjny F49 |
key_f5 |
kf5 |
k5 |
klawisz funkcyjny F5 |
key_f50 |
kf50 |
Fe |
klawisz funkcyjny F50 |
key_f51 |
kf51 |
Ff |
klawisz funkcyjny F51 |
key_f52 |
kf52 |
Fg |
klawisz funkcyjny F52 |
key_f53 |
kf53 |
Fh |
klawisz funkcyjny F53 |
key_f54 |
kf54 |
Fi |
klawisz funkcyjny F54 |
key_f55 |
kf55 |
Fj |
klawisz funkcyjny F55 |
key_f56 |
kf56 |
Fk |
klawisz funkcyjny F56 |
key_f57 |
kf57 |
Fl |
klawisz funkcyjny F57 |
key_f58 |
kf58 |
Fm |
klawisz funkcyjny F58 |
key_f59 |
kf59 |
Fn |
klawisz funkcyjny F59 |
key_f6 |
kf6 |
k6 |
klawisz funkcyjny F6 |
key_f60 |
kf60 |
Fo |
klawisz funkcyjny F60 |
key_f61 |
kf61 |
Fp |
klawisz funkcyjny F61 |
key_f62 |
kf62 |
Fq |
klawisz funkcyjny F62 |
key_f63 |
kf63 |
Fr |
klawisz funkcyjny F63 |
key_f7 |
kf7 |
k7 |
klawisz funkcyjny F7 |
key_f8 |
kf8 |
k8 |
klawisz funkcyjny F8 |
key_f9 |
kf9 |
k9 |
klawisz funkcyjny F9 |
key_find |
kfnd |
@0 |
klawisz find (szukania) |
key_help |
khlp |
%1 |
klawisz help (pomocy) |
key_home |
khome |
kh |
klawisz home |
key_ic |
kich1 |
kI |
klawisz wstawiania znaku |
key_il |
kil1 |
kA |
klawisz wstawiania linii |
key_left |
kcub1 |
kl |
strzałka w lewo |
key_ll |
kll |
kH |
dolna strzałka w lewo (home down) |
key_mark |
kmrk |
%2 |
klawisz mark (zaznaczenia) |
key_message |
kmsg |
%3 |
klawisz message (komunikatu) |
key_move |
kmov |
%4 |
klawisz move (przemieszczenia) |
key_next |
knxt |
%5 |
klawisz next (następny) |
key_npage |
knp |
kN |
klawisz następnej-strony |
key_open |
kopn |
%6 |
klawisz open (otwarcia) |
key_options |
kopt |
%7 |
klawisz options (opcji) |
key_ppage |
kpp |
kP |
klawisz poprzedniej-strony |
key_previous |
kprv |
%8 |
klawisz previous (poprzedni) |
key_print |
kprt |
%9 |
klawisz print (drukowania) |
key_redo |
krdo |
%0 |
klawisz redo (odtworzenia) |
key_reference |
kref |
&1 |
klawisz reference |
key_refresh |
krfr |
&2 |
klawisz refresh (odświeżenia) |
key_replace |
krpl |
&3 |
klawisz replace (podmienienia) |
key_restart |
krst |
&4 |
klawisz restart |
key_resume |
kres |
&5 |
klawisz resume (wznowienia) |
key_right |
kcuf1 |
kr |
strzałka w prawo |
key_save |
ksav |
&6 |
klawisz save (zapisania) |
key_sbeg |
kBEG |
&9 |
przesunięty (shifted) klawisz rozpoczęcia (begin key) |
key_scancel |
kCAN |
&0 |
przesunięty klawisz cancel (anulowania) |
key_scommand |
kCMD |
*1 |
przesunięty klawisz polecenia |
key_scopy |
kCPY |
*2 |
przesunięty klawisz copy (kopiowania) |
key_screate |
kCRT |
*3 |
przesunięty klawisz create (tworzenia) |
key_sdc |
kDC |
*4 |
przesunięty klawisz kasowania znaku |
key_sdl |
kDL |
*5 |
przesunięty klawisz kasowania linii |
key_select |
kslt |
*6 |
klawisz wybrania (select key) |
key_send |
kEND |
*7 |
przesunięty klawisz end |
key_seol |
kEOL |
*8 |
przesunięty klawisz czyszczenia do końca linii |
key_sexit |
kEXT |
*9 |
przesunięty klawisz exit (zakończenia) |
key_sf |
kind |
kF |
klawisz przewijania w przód |
key_sfind |
kFND |
*0 |
przesunięty klawisz find (szukania) |
key_shelp |
kHLP |
#1 |
przesunięty klawisz help (pomocy) |
key_shome |
kHOM |
#2 |
przesunięty klawisz home |
key_sic |
kIC |
#3 |
przesunięty klawisz wstawiania znaku |
key_sleft |
kLFT |
#4 |
przesunięta strzałka w lewo |
key_smessage |
kMSG |
%a |
przesunięty klawisz message (komunikatu) |
key_smove |
kMOV |
%b |
przesunięty klawisz move (przemieszczenia) |
key_snext |
kNXT |
%c |
przesunięty klawisz next |
key_soptions |
kOPT |
%d |
przesunięty klawisz options (opcji) |
key_sprevious |
kPRV |
%e |
przesunięty klawisz previous (poprzedni) |
key_sprint |
kPRT |
%f |
przesunięty klawisz print (drukowania) |
key_sr |
kri |
kR |
klawisz przewijania wstecz |
key_sredo |
kRDO |
%g |
przesunięty klawisz redo (odtworzenia) |
key_sreplace |
kRPL |
%h |
przesunięty klawisz replace (podmienienia) |
key_sright |
kRIT |
%i |
przesunięta strzałka w prawo |
key_srsume |
kRES |
%j |
przesunięty klawisz resume (wznowienia) |
key_ssave |
kSAV |
!1 |
przesunięty klawisz save (zapisania) |
key_ssuspend |
kSPD |
!2 |
przesunięty klawisz suspend (zawieszenia) |
key_stab |
khts |
kT |
klawisz ustawienia tabulacji (set-tab key) |
key_sundo |
kUND |
!3 |
przesunięty klawisz undo (cofnięcia) |
key_suspend |
kspd |
&7 |
klawisz suspend (zawieszenia) |
key_undo |
kund |
&8 |
klawisz undo (cofnięcia) |
key_up |
kcuu1 |
ku |
strzałka w górę |
keypad_local |
rmkx |
ke |
zakończ tryb 'keyboard_transmit' |
keypad_xmit |
smkx |
ks |
wejdź w tryb 'keyboard_transmit' |
lab_f0 |
lf0 |
l0 |
etykieta na klawiszu f0 to nie f0 |
lab_f1 |
lf1 |
l1 |
etykieta na klawiszu f1 to nie f1 |
lab_f10 |
lf10 |
la |
etykieta na klawiszu f10 to nie f10 |
lab_f2 |
lf2 |
l2 |
etykieta na klawiszu f2 to nie f2 |
lab_f3 |
lf3 |
l3 |
etykieta na klawiszu f3 to nie f3 |
lab_f4 |
lf4 |
l4 |
etykieta na klawiszu f4 to nie f4 |
lab_f5 |
lf5 |
l5 |
etykieta na klawiszu f5 to nie f5 |
lab_f6 |
lf6 |
l6 |
etykieta na klawiszu f6 to nie f6 |
lab_f7 |
lf7 |
l7 |
etykieta na klawiszu f7 to nie f7 |
lab_f8 |
lf8 |
l8 |
etykieta na klawiszu f8 to nie f8 |
lab_f9 |
lf9 |
l9 |
etykieta na klawiszu f9 to nie f9 |
label_format |
fln |
Lf |
format etykiety |
label_off |
rmln |
LF |
wyłącz miękkie etykiety |
label_on |
smln |
LO |
włącz miękkie etykiety |
meta_off |
rmm |
mo |
wyłącz tryb meta |
meta_on |
smm |
mm |
włącz tryb meta (włączony 8 bit) |
micro_column_address |
mhpa |
ZY |
podobne do column_address w trybie micro mode |
micro_down |
mcud1 |
ZZ |
podobne do cursor_down w trybie micro mode |
micro_left |
mcub1 |
Za |
podobne do cursor_left w trybie micro mode |
micro_right |
mcuf1 |
Zb |
podobne do cursor_right w trybie micro mode |
micro_row_address |
mvpa |
Zc |
podobne do row_address w trybie micro mode |
micro_up |
mcuu1 |
Zd |
podobne do cursor_up w trybie micro mode |
newline |
nel |
nw |
nowa linia (zachowuj się jak cr z lf) |
order_of_pins |
porder |
Ze |
dopasuj bity programowe do igieł głowicy drukującej |
orig_colors |
oc |
oc |
ustaw wszystkie pary kolorów na wartości oryginalne |
orig_pair |
op |
op |
ustaw domyślną parę na wartość
oryginalną |
pad_char |
pad |
pc |
znak wypełniania (zamiast zera) |
parm_dch |
dch |
DC |
kasuj #1 znaków (P*) |
parm_delete_line |
dl |
DL |
kasuj #1 linii (P*) |
parm_down_cursor |
cud |
DO |
w dół o #1 linii (P*) |
parm_down_micro |
mcud |
Zf |
podobne do parm_down_cursor w trybie micro mode |
parm_ich |
ich |
IC |
wstaw #1 znaków (P*) |
parm_index |
indn |
SF |
przewiń w przód o #1 linii (P) |
parm_insert_line |
il |
AL |
wstaw #1 linii (P*) |
parm_left_cursor |
cub |
LE |
przesuń #1 znaków w lewo (P) |
parm_left_micro |
mcub |
Zg |
podobne do parm_left_cursor w trybie micro mode |
parm_right_cursor |
cuf |
RI |
przesuń #1 znaków w prawo (P*) |
parm_right_micro |
mcuf |
Zh |
podobne do parm_right_cursor w trybie micro mode |
parm_rindex |
rin |
SR |
przewiń wstecz o #1 linii (P) |
parm_up_cursor |
cuu |
UP |
przejdź w górę o #1 linii (P*) |
parm_up_micro |
mcuu |
Zi |
podobne do parm_up_cursor w trybie micro mode |
pkey_key |
pfkey |
pk |
zaprogramuj klawisz funkcyjny #1 na wysyłanie łańcucha
#2 |
pkey_local |
pfloc |
pl |
zaprogramuj klawisz funkcyjny #1 na wykonywanie łańcucha
#2 |
pkey_xmit |
pfx |
px |
zaprogramuj klawisz funkcyjny #1 na transmitowanie łańcucha
#2 |
plab_norm |
pln |
pn |
zaprogramuj etykietę #2 na pokazywanie łańcucha #2 |
print_screen |
mc0 |
ps |
drukuj zawartość ekranu |
prtr_non |
mc5p |
pO |
włącz drukarkę na #1 bajtów |
prtr_off |
mc4 |
pf |
wyłącz drukarkę |
prtr_on |
mc5 |
po |
włącz drukarkę |
pulse |
pulse |
PU |
wybierz wydzwanianie pulsowe |
quick_dial |
qdial |
QD |
wykręć numer #1 bez sprawdzania |
remove_clock |
rmclk |
RC |
usuń zegarek |
repeat_char |
rep |
rp |
powtórz znak #1 #2 razy (P*) |
req_for_input |
rfi |
RF |
wyślij następny znak wejściowy (dla pty) |
reset_1string |
rs1 |
r1 |
łańcuch resetowania |
reset_2string |
rs2 |
r2 |
łańcuch resetowania |
reset_3string |
rs3 |
r3 |
łańcuch resetowania |
reset_file |
rf |
rf |
nazwa pliku resetowania |
restore_cursor |
rc |
rc |
odtwórz pozycję kursora na ostatnie save_cursor |
row_address |
vpa |
cv |
absolutna pozycja pionowa #1 (P) |
save_cursor |
sc |
sc |
zapisz bieżącą pozycję kursora (P) |
scroll_forward |
ind |
sf |
przewiń tekst w górę (P) |
scroll_reverse |
ri |
sr |
przewiń tekst w dół (P) |
select_char_set |
scs |
Zj |
wybierz zestaw znaków |
set_attributes |
sgr |
sa |
zdefiniuj atrybuty wideo #1-#9 (PG9) |
set_background |
setb |
Sb |
Ustaw kolor tła #1 |
set_bottom_margin |
smgb |
Zk |
ustaw dolny margines na bieżącej linii |
set_bottom_margin_parm |
smgbp |
Zl |
ustaw dolny margines na linii #1 lub #2 linii od dołu |
set_clock |
sclk |
SC |
ustaw zegarek na godzinę #1, minut #2, #3 sekund |
set_color_pair |
scp |
sp |
ustaw bieżącą parę kolorów na #1 |
set_foreground |
setf |
Sf |
ustaw kolor #1 |
set_left_margin |
smgl |
ML |
ustaw lewy miękki margines na bieżącej kolumnie |
set_left_margin_parm |
smglp |
Zm |
ustaw lewy (prawy) margines na kolumnie #1 (#2) |
set_right_margin |
smgr |
MR |
ustaw prawy miękki margines na bieżącej kolumnie |
set_right_margin_parm |
smgrp |
Zn |
ustaw prawy margines na kolumnie #1 |
set_tab |
hts |
st |
ustaw tabulację w każdym wierszu, bieżąca kolumna
(?) |
set_top_margin |
smgt |
Zo |
ustaw górny margines na bieżącej linii |
set_top_margin_parm |
smgtp |
Zp |
ustaw górny (dolny) margines w wierszu #1 (#2) |
set_window |
wind |
wi |
bieżące okno to linie #1-#2 i kolumny #3-#4 |
start_bit_image |
sbim |
Zq |
zacznij drukować grafikę bitową |
start_char_set_def |
scsd |
Zr |
rozpocznij definicję zestawu znaków |
stop_bit_image |
rbim |
Zs |
przestań drukować grafikę bitową |
stop_char_set_def |
rcsd |
Zt |
zakończ definicję zestawu znaków |
subscript_characters |
subcs |
Zu |
lista indeksowalnych dolnie znaków |
superscript_characters |
supcs |
Zv |
lista indeksowalnych górnie znaków |
tab |
ht |
ta |
tabuluj do następnego (sprzętowego) 8-spacjowego
tabulatora |
these_cause_cr |
docr |
Zw |
drukowanie dowolnego z nich spowoduje CR |
to_status_line |
tsl |
ts |
przemieść się do linii statusu |
tone |
tone |
TO |
wybierz wydzwanianie tonowe |
underline_char |
uc |
uc |
podkreśl znak i przesuń się za niego |
up_half_line |
hu |
hu |
pół linii w górę |
user0 |
u0 |
u0 |
łańcuch użytkownika #0 |
user1 |
u1 |
u1 |
łańcuch użytkownika #1 |
user2 |
u2 |
u2 |
łańcuch użytkownika #2 |
user3 |
u3 |
u3 |
łańcuch użytkownika #3 |
user4 |
u4 |
u4 |
łańcuch użytkownika #4 |
user5 |
u5 |
u5 |
łańcuch użytkownika #5 |
user6 |
u6 |
u6 |
łańcuch użytkownika #6 |
user7 |
u7 |
u7 |
łańcuch użytkownika #7 |
user8 |
u8 |
u8 |
łańcuch użytkownika #8 |
user9 |
u9 |
u9 |
łańcuch użytkownika #9 |
wait_tone |
wait |
WA |
czekaj na ton dzwonienia (dialtone) |
xoff_character |
xoffc |
XF |
znak XOFF |
xon_character |
xonc |
XN |
znak XON |
zero_motion |
zerom |
Zx |
brak przemieszczenia dla kolejnego znaku |
Następujące właściwości łańcuchowe
istnieją w strukturze term SVr4.0, lecz początkowo nie były
opisane w podręczniku man.
Zmienna |
Nazwa- |
Kod |
Opis |
Łańcuchowa |
właść. |
TCap |
|
alt_scancode_esc |
scesa |
S8 |
alternatywny escape dla emulacji scancode |
bit_image_carriage_return |
bicr |
Yv |
przemieść się na początek wiersza |
bit_image_newline |
binel |
Zz |
przemieść się do następnego wiersza obrazu
bitowego |
bit_image_repeat |
birep |
Xy |
powtórz komórkę #1 obrazu bitowego #2 razy |
char_set_names |
csnm |
Zy |
wymień nazwy zestawów znaków |
code_set_init |
csin |
ci |
inicjalizuj sekwencję dla wielokrotnych zestawów
kodów |
color_names |
colornm |
Yw |
podaj nazwę dla koloru #1 |
define_bit_image_region |
defbi |
Yx |
definiuj prostokątny region obrazu bitowego |
device_type |
devt |
dv |
wskaż obsługę języka/zestawu kodów |
display_pc_char |
dispc |
S1 |
wyświetl znak PC |
end_bit_image_region |
endbi |
Yy |
zakończ region obrazu bitowego |
enter_pc_charset_mode |
smpch |
S2 |
wejdź w tryb wyświetlania PC |
enter_scancode_mode |
smsc |
S4 |
wejdź w tryb scancode PC |
exit_pc_charset_mode |
rmpch |
S3 |
zakończ tryb wyświetlania znaków PC |
exit_scancode_mode |
rmsc |
S5 |
zakończ tryb scancode PC |
get_mouse |
getm |
Gm |
curses powinny odbierać zdarzenia myszy |
key_mouse |
kmous |
Km |
pojawiło się zdarzenie myszy |
mouse_info |
minfo |
Mi |
informacja o statusie myszy |
pc_term_options |
pctrm |
S6 |
opcje terminala PC |
pkey_plab |
pfxl |
xl |
zaprogramuj klawisz funkcyjny #1 na wpisywanie łańcucha #2 i
pokazywanie łańcucha #3. |
req_mouse_pos |
reqmp |
RQ |
zażądaj pozycji myszy |
scancode_escape |
scesc |
S7 |
escape dla emulacji scancode |
set0_des_seq |
s0ds |
s0 |
przesuń do zestawu kodów 0 (zestaw EUC 0, ASCII) |
set1_des_seq |
s1ds |
s1 |
przesuń do zestawu kodów 1 |
set2_des_seq |
s2ds |
s2 |
przesuń do zestawu kodów 2 |
set3_des_seq |
s3ds |
s3 |
przesuń do zestawu kodów 3 |
set_a_background |
setab |
AB |
ustaw kolor tła przy użyciu sekwencji specjalnej ANSI |
set_a_foreground |
setaf |
AF |
ustaw kolor pierwszego planu przy użyciu sekwencji specjalnej
ANSI |
set_color_band |
setcolor |
Yz |
Change to ribbon color #1 (?) |
set_lr_margin |
smglr |
ML |
ustaw lewy i prawy margines na #1, #2 |
set_page_length |
slines |
YZ |
ustaw rozmiar strony na #1 linii |
set_tb_margin |
smgtb |
MT |
ustawia górny i dolny margines na #1, #2 |
Standard XSI curses dodał te oto. Pochodzą one z niektórych
po-4.1 wersji curses z Systemu V, np. Solaris 2.5 i IRIX 6.x. Nazwy termcapu
ncurses zostały dla nich wynalezione; według standardu XSI nie
mają one nazw termcap. Jeśli twoje skompilowane wpisy terminfo ich
używają, mogą one nie być binarnie kompatybilne z wpisami
System V po SVr4.1; Strzeż się!
Zmienna |
Nazwa- |
Kod |
Opis |
łańcuchowa |
właść. |
Tcap |
|
enter_horizontal_hl_mode |
ehhlm |
Xh |
wejdź w tryb poprzecznego podświetlenia |
enter_left_hl_mode |
elhlm |
Xl |
wejdź w tryb lewego podświetlenia |
enter_low_hl_mode |
elohlm |
Xo |
wejdź w tryb niskiego podświetlenia |
enter_right_hl_mode |
erhlm |
Xr |
wejdź w tryb prawego podświetlenia |
enter_top_hl_mode |
ethlm |
Xt |
wejdź w tryb górnego podświetlenia |
enter_vertical_hl_mode |
evhlm |
Xv |
wejdź w tryb podświetlenia pionowego |
set_a_attributes |
sgr1 |
sA |
zdefiniuj drugi zestaw atrybutów wideo #1-#6 |
set_pglen_inch |
slength |
sL |
YI ustaw długość strony na #1 setnej cala |
Przykładowy wpis¶
Następujący opis, przeznaczony dla terminala ANSI jest
reprezentatywną próbką opisu wyglądu nowoczesnych
terminali.
ansi|ansi/pc-term compatible with color,
mc5i,
colors#8, ncv#3, pairs#64,
cub=\E[%p1%dD, cud=\E[%p1%dB, cuf=\E[%p1%dC,
cuu=\E[%p1%dA, dch=\E[%p1%dP, dl=\E[%p1%dM,
ech=\E[%p1%dX, el1=\E[1K, hpa=\E[%p1%dG, ht=\E[I,
ich=\E[%p1%d@, il=\E[%p1%dL, indn=\E[%p1%dS, .indn=\E[%p1%dT,
kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kf1=\E[M, kf10=\E[V,
kf11=\E[W, kf12=\E[X, kf2=\E[N, kf3=\E[O, kf4=\E[P,
kf5=\E[Q, kf6=\E[R, kf7=\E[S, kf8=\E[T, kf9=\E[U,
kich1=\E[L, mc4=\E[4i, mc5=\E[5i, nel=\r\E[S,
op=\E[37;40m, rep=%p1%c\E[%p2%{1}%-%db,
rin=\E[%p1%dT, s0ds=\E(B, s1ds=\E)B, s2ds=\E*B,
s3ds=\E+B, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p8%t;11%;%?%p9%t;12%;m,
sgr0=\E[0;10m, tbc=\E[2g, u6=\E[%d;%dR, u7=\E[6n,
u8=\E[?%[;0123456789]c, u9=\E[c, vpa=\E[%p1%dd,
Wpisy mogą się ciągnąć na wiele linii dzięki
poprzedzaniu kolejnych linii białymi spacjami (poza pierwszą
linią). Komentarze można załączać w
poszczególnych liniach przy użyciu ``#''. Właściwości
w
terminfo występują jako trzy typy:
Właściwości logiczne, okreslające czy terminal ma
jakąś właściwość; właściwości
numeryczne, określające rozmiar terminala, opóźnień;
właściwości łańcuchowe, określające
sekwencje używane do dokonywania określonych operacji terminalowych.
Typy właściwości¶
Wszystkie właściwości mają nazwy. Na przykład fakt,
że terminale ANSI mają
automatyczne marginesy (tj.
automatyczny return i lf po osiągnięciu końca linii) jest
określany właściwością
am. Z tej przyczyny
opis ansi zawiera
am. Właściwości numeryczne mają
doklejony znak `#' i wartość dodatnią. Tak więc
cols, określające liczbę kolumn terminala, w przypadku
ansi ma `80'. Wartości właściwości numerycznych można
podawać dziesiętnie, ósemkowo lub szesnastkowo, uzywając
konwencji z języka C (np. 255, 0377, 0xff i 0xFF).
Właściwości napisowe, takie jak
el (sekwencja czyszczenia
do końca linii) są podawane w kodzie dwuznakowym--najpierw jest `=',
potem łańcuch, kończącyc się znakiem `,'.
Dla łatwego kodowania znaków udostępnione są we
właściwościach o wartościach łańcuchowych
sekwencje specjalne.
\E i
\e odnoszą się do znaku
ESCAPE,
^x odnosi się do control-x, a sekwencje
\n \l \r \t \b
\f \s odpowiadają nowej linii, line-feed, powrotowi karetki,
tabulacji, kasownikowi (backspace), form-feed, i spacji. Inne sekwencje
specjalne to m.in.
\^ dla
^,
\\ dla
\,
\,
dla przecinka,
\: dla
:, i
\0 for zera (null). (
\0 daje \200, co nie kończy łańcucha, lecz zachowuje
się jak znak null na większości terminali o ile podane jest
CS7. Zobacz
stty(1).) Znaki mogą być też podawane jako trzy
cyfry ósemkowe po
\.
We właściwości łańcuchowej może
występować opóźnienie, wyrażone w milisekundach. Jest
ono ujmowane w nawiasy $<..>, np.
el=\EK$<5>. Znaki
wypełnienia, zapewniające opóźnienie produkuje
tputs. Opóźnienie musi być liczbą o maksymalnie
jednym miejscu precyzji dziesiętnej; może zawierać przyrostki
`*', `/' lub obydwa. `*' znaczy, że wymagane wypełnienie jest
proporcjonalne do liczby linii, których dotyczy operacja, a podany
rozmiar wymagany jest na każdą "dotkniętą
jednostkę". (w przypadku wstawiania znaku, współczynnik
jest wciąż liczbą dotkniętych
linii.) Zazwyczaj
wypełnianie jest zalecane jeśli urządzenie ma
właściwość
xon; jest ono [wtedy] używane do
obliczania kosztów, lecz nie wywołuje opóźnień. Znak
`/' wskazuje, że wypełnianie jest obowiązkowe i wymusza
opóźnienie danej liczby milisekund, nawet na urządzeniach, w
których obecne jest
xon, określające sterowanie
przepływu.
[Wypełnianie jest używane na starych, wolnych terminalach bez
sterowania przepływem. Istnieje dlatego, że gdy nie ma sterowania,
bufory wejściowe urządzenia mogą się przepełnić
i pewne znaki mogą się zgubić. Wypełnienie takiego
niepewnego okresu nieznaczącymi znakami wypełnienia zapewnia,
że istotne informacje nie zostaną utracone--utracone zostaną
jedynie ignorowane znaki wypełnienia. (przyp. tłum.)]
Czasem pewne właściwości muszą być wykomentowane. Aby
to zrobić, wystarczy przed nazwą umieścić kropkę. Na
przykład zrobiono tak w drugim
ind z powyższego
przykładu.
Pobieranie skompilowanych opisów¶
Jeśli ustawiona jest zmienna środowiskowa TERMINFO, to jest ona
używana jako ścieżka do katalogu, zawierającego
skompilowany opis tego, nad czym pracujesz. Przeszukiwany jest tylko ten
katalog.
W przeciwnym przypadku, wersja
ncurses czytnika terminfo będzie
szukać skompilowanego opisu w katalogu
$HOME/.terminfo. Jeśli
nic tam nie będzie, dalsze poszukiwania polecą według zmiennej
środowiskowej TERMINFO_DIRS (zawierającej rozdzieloną
dwukropkami listę katalogów) (pusty wpis jest rozumiany jako komenda
szukania
/usr/share/terminfo). Jeśli i tu nic nie zostanie
znalezione, pobieranie kończy się niepowodzeniem.
Jeśli nie ustawiono ani TERMINFO, ani TERMINFO_DIRS, szukanie odbędzie
się w systemowym katalogu terminfo,
/usr/share/terminfo.
(Pod curses z Systemu V nie są obsługiwane pliki
$HOME/.terminfo ani zmienna TERMINFO_DIRS.)
Przygotowywanie opisów¶
Wyjaśnimy teraz jak przygotowywać opisy terminali. Najefektywniejszym
sposobem jest wykorzystanie podobnego terminala z
terminfo i budowanie
opisu stopniowo, wykorzystując częściowe opisy z użyciem
vi lub innego zorientowanego ekranowo programu, sprawdzając je w
ten sposób. Miej świadomość, że nietypowy terminal
może wykazywać ubytki w stosunku do opisującego go pliku
terminfo lub, że kod testującego programu jest
nieprawidłowy.
Aby ustawić prawidłowo wypełnianie (padding) dla wstawiania linii
(jeśli producent terminala tego nie udokumentował), można
wykonać test: edytuj duży plik przy 9600 bodów, następnie
skasuj ok. 16 linii ze środka ekranu, potem naciśnij kilka razy
szybko `u'. Jeśli terminal się zaśmieci, wymagane jest
większe wypełnianie. Podobny test można zrobić do
wstawiania znaku.
Podstawowe właściwości¶
Liczba kolumn terminala jest określana właściwością
numeryczną
cols. Jeśli terminal jest CRT, to liczba linii
ekranu jest podawana we właściwości
lines. Jeśli
terminal zawija linie po dojściu do prawego marignesu, to powinien
posiadać właściwość
am. Jeśli terminal
może czyścić swój ekran, pozostawiając kursor w
pozycji domowej, to powinno to być określone przez
właściwość łańcuchową
clear.
Jeśli terminal wykonuje nadstukiwanie (a nie czyści pozycji
nadstukiwanej), to powinien posiadać właściwość
os. Jeśli terminal jest terminalem drukującym, bez jednostki
soft copy, to powinien mieć zarówno
hc jak i
os.
(
os dotyczy terminali z zakresem przechowywania, jak w serii TEKTRONIX
4010 ale także czy w terminalach hardcopy i APL.) Jeśli istnieje
kod, przenoszący kursor do lewego krańca bieżącego
wiersza, to powinien być on podany jako
cr. (Zwykle jest to
powrót karetki, control M.) Jeśli istnieje kod dzwonka (bell, beep,
itp.), to powinien być on podany jako
bel.
Jeśli istnieje kod, przesuwający kursor o jedną pozycję w
lewo (jak backspace), to właściwość ta powinna być
podana jako
cub1. Podobnie, kod przesuwający w prawo,
górę i dół powinien być podany jako
cuf1,
cuu1, i
cud1. Te lokalne ruchy kursora nie powinny zmieniać
tekstu, który mijają, np. normalnie nie używa się `
cuf1= ', gdyż spacja skasowała by znak.
Ważnym spostrzeżeniem w tym momencie jest fakt, że lokalne ruchy
kursora, zakodowane w
terminfo nie są zdefiniowane w lewych i
górnych krańcach terminala CRT. Programy nie powinny więc
używać backspace na lewym krańcu, chyba że podane jest
bw. Podobnie, nie powinny próbować iść w
górę z pierwszej linii. Aby przewinąć tekst do góry,
program powinien przejść do dolnego, lewego narożnika ekranu i
wysłać łańcuch
ind (index).
Aby przewinąć tekst w dół, program idzie do lewego
górnego narożnika i wysyła łańcuch
ri (reverse
index). Łańcuchy
ind i
ri nie są zdefiniowane w
przypadku przebywania w nieodpowiednich miejscach ekranu.
Wersjami parametryzowanymi sekwencji przewijających są
indn i
rin, które mają taką samą semantykę jak
ind i
ri, lecz dodatkowo pobierają parametr i
przewijają tyle właśnie linii. Są one również
niezdefiniowane w nieodpowiednich obszarach ekranu.
Właściwość
am mówi czy kursor trzyma się
prawego krańca ekranu po wysłaniu tekstu, lecz niekoniecznie tyczy
się
cuf1 z ostatniej kolumny. Jedyny ruch lokalny, który jest
zdefiniowany z lewego krańca przy podaniu
bw to
cub1,
który przejdzie do prawego krańca poprzedniego wiersza. Jeśli
bw nie jest podane, efekt jest niezdefiniowany. Jest to przydatne np.
do rysowania ramki wokół krańców ekranu. Jeśli
terminal ma przełączaną właściwość
automatycznych marginesów, to plik
terminfo zwykle przyjmuje,
że jest ona włączona, tj.
am. Jeśli terminal ma
polecenie, które przechodzi do pierwszej kolumny następnej linii, to
komenda ta może być podana jako
nel (nowa linia). Nie ma
znaczenia czy polecenie to czyści resztę bieżącej linii,
więc jeśli terminal nie posiada
cr i
lf to może
wciąż uda się złożyć z czegoś
działający
nel.
Właściwości te wystarczają do opisania terminala hard-copy i
“glass-tty”. W konsekwencji, model teletype 33 jest opisany jako
33|tty33|tty|model 33 teletype,
bel=^G, cols#72, cr=^M, cud1=^J, hc, ind=^J, os,
a Lear Siegler ADM-3 jako
adm3|3|lsi adm3,
am, bel=^G, clear=^Z, cols#80, cr=^M, cub1=^H, cud1=^J,
ind=^J, lines#24,
Łańcuchy parametryzowane¶
Adresowanie kursora i inne łańcychy wymagające parametrów
terminala są opisaywane przez właściwość
parametryzowanego łańcucha, w której występują
sekwencje specjalne typu
printf(3S), jak
%x. Na przykład
aby adresować kursor, podana jest właściwość
cup, używająca dwóch parametrów: wiersza i kolumny
adresowania. (wiersze i kolumny sa numerowane od zera i odnoszą się
do fizycznego ekranu, widzianego przez użytkownika, a nie do
niewidzialnego obszaru pamięci.) Jeśli terminal posiada
związane z pamięcią adresowanie kursora, to może to
być wskazywane przez
mrcup.
Mechanizm parametrów używa stosu i specjalnych kodów
% do
jego obsługi. Zazwyczaj sekwencja powoduje wepchnięcie jednego z
parametrów na stos, a następnie jego wydrukowanie w pewnym formacie.
Często wymagane są bardziej złożone operacje.
Kodowania
% mają następujące znaczenia:
%% daje `%'
% [[:]flagi][szerokość[.precyzja]][doxXs]
podobnie jak w printf, flagi to [-+#] i spacja
%c drukowanie pop() daje %c
%p[1-9] wepchnij i'ty parm
%P[a-z] ustaw zmienną dynamiczną [a-z] na pop()
%g[a-z] pobierz dynamiczną zmienną [a-z] i wepchnij ją
%P[A-Z] ustaw zmienną statyczną [a-z] na pop()
%g[A-Z] pobierz zmienną statyczną [a-z] i wepchnij ją
%' c' stała znakowa c
%{ nn} stała całkowita nn
%l wepchnij strlen(pop)
%+ %- %* %/ %m
arytmetyka (%m to mod): push(pop() op pop())
%& %| %^ operacje bitowe: push(pop() op pop())
%= %> %< operacje logiczne: push(pop() op pop())
%A, %O operacje logiczne and i or (dla warunków)
%! %~ jednoargumentowe operacje push(op pop())
%i dodaj 1 do pierwszych dwóch parm (terminale ANSI)
%? expr %t częśćthen %e częśćelse %;
if-then-else, %e częśćelse jest opcjonalna.
Dopuszalne są else-if a'la Algol 68:
%? c1 %t b1 %e c2 %t b2 %e c3 %t b3 %e c4 %t b4 %e %;
ci są warunkami, bi są ciałami.
Operacje binarne są w postaci postfiksowej, z operandami w typowej
kolejności. Znaczy to, że aby uzyskać x-5, można
użyć "%gx%{5}%-". Zmienne %P i %g są stałe
podczas analizy łańcucha specjalnego.
Rozważ GP2645, w którym aby dostać się do 3 wiersza i 12
kolumny należało wysłać \E&a12c03Y, wypełnionego
na 6 milisekund. Zauważ, że kolejność wierszy i kolumn
jest tu w inwersji i że są one drukowane jako dwie cyfry. W efekcie
jego właściwość
cup to
“cup=6\E&%p2%2dc%p1%2dY”.
Microterm ACT-IV wymaga poprzedzenia bieżącego wiersza i kolumny
znakiem
^T i zakodowania wiersza i kolumny binarnie,
“cup=^T%p1%c%p2%c”. Terminale, używające
“%c” muszą być w stanie cofnąć (backskpace)
kursor (
cub1) i przesuwać go o jedną linię w
górę na ekranie (
cuu1). Jest to konieczne, gdyż nie
zawsze bezpiecznie jest transmitować
\n,
^D i
\r,
ponieważ system może je zmienić lub pominąć. (funkcje
biblioteczne, obsługujące terminfo ustawiają tryby tty tak, aby
tabulacje nigdy nie były rozwijane, więc \t może
wysyłać bez obaw. Jest to sprawa pierwszej wagi dla Ann Arbor 4080.)
Ostatnim przykładem jest LSI ADM-3a, który używa offsetów
wiersza i kolumny ze spacją, “cup=\E=%p1%' '%+%c%p2%' '%+%c”.
Po wysłaniu `\E=', pierwszy parametr jest wpychany na stos, wpychana jest
wartość ASCII dla spacji (32), są one następnie dodawane
(wpychanie na stos ich sumy i zamiana dwóch poprzednich wartości) i
produkowane jako znak. Następnie to samo jest wykonywane dla drugiego
parametru. Możliwe są również bardziej złożone
działania arytmetyczne na stosie.
Ruchy kursora¶
Jeśli terminal posiada szybki sposób na zerowanie pozycji kursora (na
lewy górny narożnik ekranu), to może to być podane jako
home; podobnie, szybkim sposobem dostania się do dolnego lewego
narożnika jest
ll; może to wykonywać przejście w
górę z pomocą
cuu1 z pozycji zerowej, lecz program
samodzielnie nie powinien tego robić (chyba że
ll tak robi),
gdyż aplikacja nie może nic zakładać o rezultacie
przejścia w górę z pozycji zerowej. Zauważ, że
zerowanie pozycji jest równoważne adresowaniu na (0,0): na lewy
górny narożnik ekranu, a nie pamięci. (Z tej przyczyny
sekwencja \EH terminali HP nie może być używana jako
home.)
Jeśli terminal posiada bezwzględne (absolute) adresowanie wierszy lub
kolumn, to może to być podane jako pojedyncze
właściwości parametryczne,
hpa (bezwzględna pozycja
pozioma) i
vpa (bezwzględna pozycja pionowa). Czasami są one
krótsze niż bardziej ogólne sekwencje dwuparametrowe (np. dla
hp2645) i mogą być używane chętniej niż
cup.
Jeśli istnieją sparametryzowane ruchy lokalne (np. przesuń
n spacji w prawo), to mogą być one podane jako
cud,
cub,
cuf i
cuu z pojedynczym parametrem,
określającym ilość spacji przesunięcia. Sekwencje te
są przydatne jeśli terminal nie ma
cup, tak jak np. TEKTRONIX
4025.
Jeśli terminal podczas przcy z programem, używającym
właściwości musi być w specjalnym trybie działania,
to kody wchodzenia i wychodzenia z tego trybu mogą być podane jako
smcup i
rmcup. Przyszło to m.in. z terminali takich jak
Concept, który miał więcej niż jedną stronę
pamięci. Jeśli terminal ma tylko związane z pamięcią
adresowanie kursora (a nie związane z ekranem) to jednoekranowe okno musi
być poprawione w celu wymuszenia poprawnego działania adresowania
kursora. Jest to używane również dla TEKTRONIX 4025, gdzie
smcup ustawia znak komendy na ten, używany przez terminfo.
Jeśli sekwencja
smcup nie odtworzy ekranu po wysłaniu
sekwencji
rmcup (do stanu sprzed wysłania
rmcup), podaj
nrrmc.
Czyszczenie obszarów¶
Jeśli terminal może czyścić ekran od bieżącej
pozycji do końca linii, pozostawiając kursor na swoim miejscu, to
powinno to być określone jako
el. Jeśli terminal
może czyścić ekran od końca linii, do bieżącej
pozycji, pozostawiając kursor na miejscu, to powinno to być
określone jako
el1. Jeśli terminal może
czyścić ekran od bieżącej pozycji do końca
wyświetlacza, to powinno to być określane jako
ed.
Ed jest zdefiniowane jedynie dla pierwszej kolumny linii. (Może
więc być symulowane przez żądanie kasowania wielkiej
liczby linii jeśli prawidziwe
ed nie jest dostępne.)
Wstawianie/kasowanie linii i ruchy pionowe¶
Jeśli terminal może otworzyć nową pustą linię
przed linią, w której znajduje się kursor, to powinno to
być okreslone jako
il1; jest to obsługiwane tylko z pierwszej
pozycji w linii. Kursor musi potem pojawić się na nowej, pustej
linii. Jeśli terminal może kasować linię, na której
znajduje się kursor, to powinno to być określone przez
dl1; może to być obsługiwane tylko z pierwszej pozycji
na kasowanej linii. Wersje
il1 i
dl1, które mogą
pobierać parametr, określający ile linii skasować lub
wstawić, mogą być podawane jako
il i
dl.
Jeśli terminal ma ustawialny region przewijania (jak vt100), to komenda
ustawiająca to może być opisana z pomocą
właściwości
csr, pobierającej dwa parametry:
górną i dolną linię regionu przewijania. Pozycja kursora
jest po użyciu tej komendy niestety niezdefiniowana.
Efekt wstawienia lub skasowania linii można osiągnąć z
użyciem
csr na odpowiednio wybranym regionie; komendy
sc i
rc (zachowania i odtworzenia kursora) mogą być wówczas
przydatne do zapewnienia, że zestawiony łańcuch nie przesunie
kursora. (Zauważ, że biblioteka
ncurses(3X) dokonuje takiej
syntezy automatycznie, więc nie musisz komponować
łańcuchów wstawienia/skasowania z użyciem
csr).
Innym sposobem tworzenia wstawiania i kasowania może być użycie
kombinacji właściwości index i memory-lock, obecnych na
niektórych terminalach (takich, jak HP-700/90, które jednak
posiadają również insert/delete).
Wstawianie linii na górze lub u dołu ekranu może być
dokonywane również z użyciem
ri lub
ind, co
często może się okazać szybsze nawet od istniejących
właściwości.
Wartość logiczna
non_dest_scroll_region powinna być
ustawiona jeśli każde okno przewijające jest efektywnie
widokiem na obraz o rozmiarze ekranu. Aby przetestować istnienie tej
właściwości, utwórz w środku ekranu region
przewijania, napisz coś na dolnej linii, przesuń kursor na
początek regionu i wykonaj
ri, a następnie
dl1 lub
ind. Jeśli dane przewijane z dołu regionu
ri
pojawią się ponownie, to przewijanie nie jest destruktywne. Curses z
Systemu V i XSI oczekują, że
ind,
ri,
indn i
rin symulują przewijanie destruktywne; ich dokumentacja ostrzega
by nie definiować
csr, chyba że jest to prawda. Ta
implementacja
curses jest bardziej liberalna i dokona jawnego kasowania
po przewinięciu, jeśli zdefiniowane jest
ndstr.
Jeśli terminal potrafi definiować okno jako część
pamięci, która współpracuje ze wszystkimi komendami, to
powinno być to określone przez parametryzowany łańcuch
wind. Cztery parametry to kolejno: początkowe i końcowe linie
pamięci, początkowe oraz kończące kolumny pamięci.
Jeśli terminal potrafi zachowywać pamięć wyświetlacza
powyżej, to podana powinna być właściwość
da; jeśli zachowana może być pamięć
wyświetlacza poniżej, to podana powinna być
właściwość
db. Wskazują one, że kasowanie
linii lub przewijanie może spowodować pojawienie się
niezerowych linii z dołu i że przewijanie w tył z pomocą
ri może przynieść niezerowe linie z góry.
Wstawianie/kasowanie znaku¶
Istnieją dwa podstawowe rodzaje inteligentnych terminali, jeśli
brać pod uwagę obsługę wstawiania/kasowania znaków
opisywaną w
terminfo. Najpopularniejsze operacje
wstawiania/kasowania znaków tyczą tylko znaków w
bieżącej linii i sztywno przesuwają znaki w kierunku jej
końca. Inne terminale, takie jak Concept 100 i Perkin Elmer Owl
rozróżniają spacje wstukane i niewstukane, przesuwając
przy wstawianiu/kasowaniu aż do najbliższej niewstukanej spacji,
która jest następnie albo kasowana, albo rozwijana na dwie
niewstukane spacje. Rodzaj terminala można określić przez
wyczyszczenie ekranu i następnie wpisanie tekstu, rozdzielonego ruchami
kursora. Wstukaj przy użyciu ruchów kursora (nie spacji)
“abc def”. Następnie ustaw kursor
przed “abc” i włącz terminal w tryb wstawiania.
Jeśli wpisywanie znaków powoduje, że reszta linii sztywno
przesuwa się w prawo, to terminal nie rozróżnia spacji
wstukanych od niewstukancyh. Jeśli “abc” przesunie się
do “def” które następnie zacznie się posuwać
wraz z nim aż do końca linii, to masz drugi rodzaj terminala. W tym
wypadku powinieneś podać właściwość
in,
która oznacza “insert null”. Chociaż są to
logicznie dwa oddzielne atrybuty (jednoliniowy vs. wieloliniowy tryb
wstawiania i specjalne traktowanie niewstukanych spacji), nie
znaleźliśmy terminala, którego tryb wstawiania nie
mógłby zostać opisany pojedynczym atrybutem.
Terminfo może opisywać zarówno terminale posiadające tryb
wstawiania, jak i terminale, które wysyłają prostą
sekwencję do otwierania pustej pozycji w bieżącej linii. Jako
smir podaje się sekwencję wchodzenia w tryb wstawiania. Jako
rmir podaje się sekwencje do wychodzenia z trybu wstawiania. Jako
ich1 podaje się sekwencję, którą należy
wysłać tuż przed wysłaniem wstawianego znaku.
Większość terminali z prawdziwym trybem wstawiania nie daje
ich1; terminale, które wysyłają sekwencje do otwierania
pozycji ekranu podają ją.
Jeśli twój terminal posiada obydwie te właściwości, to
zwykle wybierany jest tryb wstawiania. Technicznie, nie powinieneś
podawać obydwu, chyba że terminal wymaga ich łącznego
działania. Niektóre nie-curses-owe aplikacje mogą się
pogubić jeśli podane są obydwie; symptomem są podwojone
znaki we wstawianiu używającym odświeżania. Wymaganie to
jest obecnie rzadkie; większość sekwencji
ich nie wymaga
poprzedzającego smir, a większość trybów wstawiania
smir nie wymaga
ich1 przed każdym znakiem. Dlatego
curses
zakłada, że tak właśnie jest i używa albo
rmir/
smir albo
ich/
ich1 (ale nie obydwu).
Jeśli musisz napisać opis dla ncurses, dla terminala,
wymagającego obydwu tych działań, załącz sekwencje
rmir/
smir w
ich1.
Jeśli po wstawieniu wymagane jest dopełnienie, podaj je jako
liczbę milisekund w
ip (opcja łańcuchowa). Wszelkie inne
sekwencje, które wymagają wysłania po wstawieniu pojedynczego
znaku również mogą być podane w
ip. Jeśli
twój terminal wymaga zarówno umieszczenia w `trybie wstawiania' jak
i specjalnego kodu do poprzedzania każdego wstawianego znaku, to podane
mogą być
smir/
rmir oraz
ich1 i obydwie
sekwencje zostaną użyte. Właściwość
ich z
jednym parametrem powtarza rezultat
ich1 n-krotnie.
Jeśli między znakami wpisywanymi nie w trybie wstawiania wymagane jest
wypełnianie, podaj je jako liczbę milisekund wypełniania w
rmp(???).
Czasami konieczne jest przesunięcie się w trybie wstawiania, aby
usunąć znaki z tej samej linii (np. jeśli za pozycją
wstawiania znajduje się tabulacja). Jeśli twój terminal zezwala
na ruchy podczas przebywania w trybie wstawiania, to powinien mieć
właściwość
mir, przyspieszającą w tym
przypadku wstawianie. Pominięcie
mir ma wpływ jedynie na
szybkość. Niektóre terminale (np. Datamedia) nie mogą
mieć
mir, gdyż ich tryb wstawiania działa tak, że
na to nie pozwala.
Do kasowania pojedynczego znaku można podać
dch1, albo
dch do kasowania z parametrem
n, który mówi, by
skasować
n znaków, lub sekwencje wchodzenia (
smdc) i
wychodzenia (
rmdc) z trybu kasowania (dowolny tryb, którego
terminal wymaga dla zadziałania
dch1).
Komenda do kasowania
n znaków (równoważna wypuszczeniu
n spacji bez przesuwania kursora) może być określona
jako
ech z jednym parametrem.
Podświetlanie, podkreślanie i wizualne dzwonki¶
Jeśli twój terminal ma jeden lub więcej rodzajów
atrybutów wyświetlania, to mogą one być reprezentowane na
wiele różnych sposobów. Jedną z postaci wyświetlacza
powinieneś określić jako
tryb wyróżniony
(standout), reprezentujący dobry, kontrastowy, łatwy do odczytu
format podświetlania komunikatów o błędach i innych rzeczy
wymagających zwrócenia uwagi. (Jeśli masz wybór, to dobrym
pomysłem jest inwersja kolorów plus średnie rozjaśnienie,
lub też sama inwersja.) Sekwencje, przeznaczone do wchodzenia i
wychodzenia z trybu wyróżnionego są podawane jako
smso i
rmso. Jeśli kod zmiany na tryb wyróżniony pozostawia na
ekranie jedną lub dwie spacje (jak w TVI 912 i Teleray 1061), to
należy podać
xmc, określające ile spacji jest
pozostawianych.
Kody rozpoczynania podkreślenia i jego kończenia mogą być
podawane jako
smul i
rmul. Jeśli terminal posiada kod
podkreślania bieżącego znaku i przesuwania kursora o jedną
pozycję w prawo (jak w Microterm Mime), to może to być podane
jako
uc.
Inne właściwości wchodzenia w różne tryby
podświetlenia to
blink (migotanie)
bold
(wytłuszczenie, lub rozjaśnienie)
dim
(średnia-jasność)
invis (tekst niewidzialny, lub
`spacjowanie')
prot (chronione)
rev (inwersja kolorów)
sgr0 (wyłącz
wszystkie tryby atrybutów)
smacs (wejdź w tryb alternatywnego zestawu znaków) i
rmacs (wyjdź z trybu alternatywnego zestawu znaków).
Włączenie dowolnego z tych trybów w pojedynkę może
lub może nie wyłączyć innych trybów.
Jeśli istnieje sekwencja do ustawiania kombinacji trybów, to powinna
być podana jako
sgr (ustaw atrybuty), i pobierać 9
parametrów. Każdy z parametrów może być zerowy lub
niezerowy, wskazując tak czy odpowieni atrybut jest włączony
czy nie. 9 parametrów to kolejno: wyróżnienie,
podkreślenie, inwersja, migotanie, średnia-jasność,
wytłuszczenie, spacjowanie, chornienie, alternatywny zestaw znaków.
Nie wszystkie tryby muszą być wspierane przez
sgr, powinny
być natomiast te, dla których istnieją oddzielne komendy
atrybutów.
Na przykład DEC vt220 wspiera większość trybów:
parametr tparm |
atrybut |
sekwencja specjalna |
|
|
|
|
|
brak |
brak |
\E[0m |
|
p1 |
wyróżniony |
\E[0;1;7m |
|
p2 |
podkreślony |
\E[0;4m |
|
p3 |
inwersja |
\E[0;7m |
|
p4 |
migotanie |
\E[0;5m |
|
p5 |
średnia-jasność |
niedostępne |
|
p6 |
wytłuszczenie |
\E[0;1m |
|
p7 |
niewidzialność |
\E[0;8m |
|
p8 |
chroń |
nieużywane |
|
p9 |
altznaki |
^O (off) ^N (on) |
|
Każdą sekwencję specjalną rozpoczynamy od
wyłączenia wszelkich istniejących trybów, gdyż nie ma
prostego sposobu na określenie czy są aktywne. Tryb
wyróżnienia jest zestawiany jako kombinacja inwersji i
wytłuszczenia. Terminal vt220 ma tryb ochronny, lecz nie jest on
wykorzystywany w sgr, gdyż chroni również znaki ekranu przed
kasowaniami stacji. Tryb alternatywnego zestawu znaków jest też
inny; różni się tym, że jest albo ^O, albo ^N,
zależnie czy jest wyłączony czy włączony. Jeśli
wszystkie tryby są włączone, to wynikową sekwencją
jest \E[0;1;4;5;7;8m^N.
Niektóre sekwencje są wspólne dla różnych trybów.
Na przykład ;7 jest produkowane dla prawdziwych p1 lub p3, tj. jeśli
włączony jest tryb standout lub inwersji.
Spisanie powyższych sekwencji wraz z ich zależnościami daje
sekwencja |
kiedy wypuścić |
translacja terminfo |
|
|
|
|
|
\E[0 |
zawsze |
\E[0 |
|
;1 |
gdy p1 lub p6 |
%?%p1%p6%|%t;1%; |
|
;4 |
gdy p2 |
%?%p2%|%t;4%; |
|
;5 |
gdy p4 |
%?%p4%|%t;5%; |
|
;7 |
gdy p1 lub p3 |
%?%p1%p3%|%t;7%; |
|
;8 |
gdy p7 |
%?%p7%|%t;8%; |
|
m |
zawsze |
m |
|
^N lub ^O |
gdy p9 ^N, inaczej ^O |
%?%p9%t^N%e^O%; |
|
Wstawienie tego wszystkiego do sekwencji sgr daje:
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;
%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
Pamiętaj, że jeśli podajesz sgr, to musisz też podać
sgr0.
Terminale z ``magic cookie'' (magiczne ciasteczko) (
xmc) wystawiają
specjalne ``ciasteczka'' gdy odbierają sekwencje ustawiania trybu,
które w zasadzie wpływają na algorytm wyświetlania, a nie
na dodatkowe bity dla każdego znaku. Niektóre terminale, jak HP 2621
automatycznie wychodzą z trybu wyróżnionego gdy kursor
przechodzi do nowej linii, lub gdy jest przeadresowany. Programy
używające trybu wyróżnionego powinny z niego
wychodzić przed przesunięciem kursora lub wysłaniem znaku nowej
linii. Zwolnione mogą być z tego jedynie przy obecności
właściwości
msgr, zapewniającej, że
przemieszczanie się w trybie wyróżnionym jest bezpieczne.
Jeśli terminal posiada mechanizm zapalania ekranu dla sygnalizacji
błędu (zamiennik dzwonka), to może to być podane jako
flash. Nie może to przemieszczać kursora.
Jeśli kursor może być bardziej widoczny niż zwykle, to podaj
tą sekwencję jako
cvvis. Jeśli istnieje sposób na
uniewidzialnienie kursora, to podaj to jako właściwość
civis. Właściwość
cnorm powinna dawać
możliwość powrotu do normalnego kursora.
Jeśli twój terminal potrafi poprawnie generować podkreślone
znaki (bez specjalnych kodów), to jeśli [nawet] nie wykonuje
nadstukiwania, powinieneś nałożyć na niego
właściwość
ul. Jeśli nadstukiwanie pozostawia
widzialnym znak `pod spodem', to należy podać
właściwość
os. Jeśli nadstukiwania są
kasowalne spacją, to powinno to być wskazane
właściwością
eo.
Keypad i klawisze funkcyjne¶
Jeśli terminal posiada keypad, który przesyła kody przy
naciskaniu klawiszy, to można podać te informacje. Zauważ,
że nie można obsługiwać terminali gdzie keypad działa
tylko lokalnie (tyczy się to np. części klawiszy HP 2621).
Jeśli keypad można ustawić na przesyłanie, lub
nieprzesyłanie, to należy podać te kody jako
smkx i
rmkx. W przeciwnym wypadku zakłada się, że keypad zawsze
przesyła kody. Kody przesyłane przez strzałki w lewo, prawo,
górę, dół oraz klawisz home mogą być podawane
jako
kcub1, kcuf1, kcuu1, kcud1, i
khome. Jeśli
dostępne są klawisze funkcyjne, takie jak f0, f1, ..., f10, to ich
kody mogą być podane jako
kf0, kf1, ..., kf10. Jeśli
klawisze te mają inne etykiety niż domyślne f0 do f10, to
można je podać jako
lf0, lf1, ...,fl10. Można
również podać kody wysyłane przez inne klawisze specjalne:
kll (home down),
kbs (backspace),
ktbc (czyść
wszystkie tabulacje),
kctab (czyść tabulator w tej kolumnie),
kclr (klawisz czyszczenia ekranu klub wymazywania),
kdch1
(klawisz kasowania (delete)),
kdl1 (kasowanie linii),
krmir
(wyjście z trybu wstawiania),
kel (czyszczenie do końca
linii),
ked (czyszczenie do końca ekranu),
kich1 (wstaw
znak, lub wejdź w tryb wstawiania),
kil1 (wstaw linię),
knp (następna strona (next page)),
kpp (poprzednia strona
(previous page)),
kind (przewijaj w przód),
kri (przewijaj
w tył),
khts (ustaw w tej kolumnie tabulator). Dodatkowo,
jeśli keypad posiada tablicę 3x3 klawiszy, zawierającą 4
klawisze strzałek, to pozostałe pięć klawiszy można
określić jako
ka1,
ka3,
kb2,
kc1 oraz
kc3. Klawisze te są przydatne gdy potrzebne są efekty
kierunkowego padu 3x3.
Łańcuchy programowania klawiszy funkcyjnych mogą być
podawane jako
pfkey,
pfloc oraz
pfx. Łańcuch do
programowania etykiet ekranowych powinien być podawany jako
pln.
Każdy z tych łańcuchów pobiera dwa parametry: numer
kalwisza funcyjnego do programowania (0 do 10) oraz łańcuch, na
który go zaprogramować. Numery klawiszy funkcyjnych
przekraczające ten zakres mogą programować niezdefiniowane
klawisze, w sposób zależny od terminala. Różnica
między właściwościami polega na tym, że
pfkey
powoduje iż naciśnięcie klawisza jest równoważne
wklepaniu przez użytkownika danego łańcucha;
pfloc
powoduje, że łańcuch jest wykonywany przez terminal lokalnie;
pfx powoduje, że łańcuch jest przesyłany do
komputera.
Właściwości
nlab,
lw i
lh definiują
liczbę programowalnych etykiet ekranowych wraz z ich
szerokością i wysokością. Jeśli istnieją komendy
do wyłączania etykiet, to powinny być podane w
smln i
rmln.
smln jest zazwyczaj wysyłane po jednej, lub
większej ilości sekwencji pln, aby upewnić się, że
zmiana się uwidoczni.
Tabulacje i inicjalizacja¶
Jeśli terminal posiada sprzętowe tabulacje, to komenda przejścia
do następnego tabulatora może być podana jako
ht (zwykle
control I). Komenda ``lewej-tabulacji'', przenosząca w lewo do
poprzedzającego tabulatora może być podana jako
cbt.
Konwencja mówi, że jeśli tryby teletype wskazują, że
tabulacje są rozwijane przez komputer, a nie są przesyłane do
terminala, to programy nie powinny używać
ht czy
cbt
nawet jeśli są one obecne, gdyż użytkownik może nie
mieć prawidłowo ustawionych tabulatorów. Jeśli terminal
posiada sprzętowe tabulatory, które sa początkowo ustawiane co
n spacji, to powinien być podany parametr numeryczny
it,
pokazujący odstępy między tabulatorami. Zazwyczaj jest to
używane przez komendę
tset do określania czy
ustawiać tryb dla sprzętowego rozwijania tabulacji i czy
ustawiać tabulatory. Jeśli terminal posiada tabulatory, które
można zachować w nieulotnej pamięci, to opis terminfo może
zakładać, że są one poprawnie ustawione.
Inne właściwości zawierają łańcuchy
is1,
is2 oraz
is3, służące do inicjalizacji terminala,
iprog, czyli ścieżkę do programu, używanego do
inicjalizacji terminala oraz
if, czyli nazwę pliku,
zawierającego długie łańcuchy inicjalizacyjne.
Łańcuchy te powinny ustawić terminal na tryby
współpracujące z pozostałym opisem terminfo. Są one
zwykle przesyłane do terminala poprzez opcję
init programu
tput przy każdym logowaniu użytkownika. Są one drukowane
w następującej kolejności: uruchom program
iprog;
wyślij
is1;
is2; ustaw marginesy przy użyciu
mgc,
smgli
smgr; ustaw tabulatory przy użyciu
tbc i
hts; wydrukuj plik
if; i w końcu wyślij
is3.
Większość inicjalizacji jest wykonywana w
is2. Tryby
specjalne terminala można ustawiać bez duplikowania
łańcuchów, wstawiając wspólne sekwencje do
is2, a specjalne elementy do
is1 oraz
is3. Para
sekwencji, która dokonuje twardego resetu z kompletnie nieznanego stanu
może być podobnie podawana jako
rs1,
rs2,
rf i
rs3, analogicznie do
is2 oraz
if. Łańcuchy te
są wysyłane przez program
reset, służący do
naprawiania terminala gdy ten wejdzie w dziwny stan. Komendy zazwyczaj są
umieszczane w
rs1,
rs2 rs3 i
rf jedynie jeśli
dają denerwujące efekty na ekranie i nie są konieczne podczas
logowania sie. Na przykład komenda ustawiania vt100 na 80 kolumn
normalnie jest częścią
is2, lecz powoduje
denerwujące zakłócenie ekranu i zwykle nie jest wymagana,
gdyż terminal normalnie już jest w trybie 80-kolumnowym.
Jeśli istnieją komendy do ustawiania i czyszczenia tabulatorów,
to mogą być one podawane jako
tbc (czyść wszystkie
tabulatory) i
hts (ustaw tabulator w bieżącej kolumnie w
każdym wierszu). Jeśli do ustawienia tabulatorów wymagana jest
bardziej skomplikowana sekwencja, to może być ona umieszczona w
is2 lub
if.
Opóźnienia i wypełnianie¶
Wiele starszych i wolniejszych terminali nie obsługuje ani XON/XOFF ani
potwierdzania DTR. Wliczać w to można terminale hardcopy i pewne
archaiczne CRT (np, DEC VT100). Wymagają one wypełniania znaków
po pewnych ruchach kursora i zmianach ekranu.
Jeśli terminal używa potwierdzania xon/xoff dla sterowania
przepływu (to znaczy automatycznie wysyła ^S do hosta gdy bufory
wejściowe zbliżają się do przepełnienia), ustaw
xon. Właściwość ta powstrzymuje emisję
wypełniania. Możesz też ustawić ją dla mapowanych w
pamięć urządzeń konsolowych, które efektywnie nie
mają ograniczeń szybkości. Informacje wypełniające
powinny wciąż być dołączane, aby procedury mogły
lepiej decydować o względnych kosztach, lecz rzeczywiste znaki
wypełnienia nie będą wysyłane.
Jeśli podane jest
pb (szybkość wypełniania), to
wypełnianie nie jest używane przy szybkościach niższych
niż
pb. Jeśli wpis nie zawiera szybkości, to emisja
wypełniania w pełni zależy od
xon.
Jeśli terminal wymaga innych niż zero znaków wypełniania, to
powinno to być podawane jako
pad. Z łańcucha
pad
używany jest jedynie pierwszy znak.
Linie statusu¶
Niektóre terminale posiadają dodatkowe `linie statusu', które nie
są normalnie używane przez oprogramowanie (a więc nie
liczą się jako właściwość
lines
terminala).
Najprostszym przypadkiem jest linia statusu, którą można
adresować kursorem, lecz nie jest częścią podstawowego
regionu przewijania ekranu; taką linię statusu posiada Heathkit H19
oraz 24 liniowe VT100 z 23-liniowym regionem przewijania ustawianym na
starcie. Sytuacja ta jest wskazywana przez właściwość
hs.
Niektóre terminale z liniami statusu wymagają specjalnych sekwencji
aby dostać się do tej linii. Mogą one być wyrażane
jako łańcuchy z pojedynczymi parametrami
tsl, które
pobierają pozycję kursora względem zerowej kolumny linii
statusu. Właściwość
fsl musi powracać do
pozycji ekranu głównego, gdzie wywołano ostatnie
tsl.
Możliwe, że konieczne będzie osadzenie wartości
łańcuchowych
sc (zachowanie kursora) i
rc (odtworzenie
kursora) w
tsl i
fsl.
Linia statusu jest zazwyczaj tej samej szerokości co szerokość
terminala. Gdy nie jest to prawdą, należy podać
właściwość numeryczną
wsl.
Komend kasowania linii statusu może być podawana jako
dsl.
Wartość logiczna
eslok określa, że sekwencje
specjalne, tabulacje itp. działają w linii statusu normalnie.
Implementacja
ncurses nie używa jeszcze żadnej z tych
właściwości Są one tu udokumentowane na wypadek, gdyby
stały się istotne.
Grafika liniowa¶
Wiele terminali posiada alternatywne zestawy znaków, przydatne do rysowania
figur. Terminfo i
curses mają wsparcie do rysowania znaków
wspieranych przez VT100 plus niektóre znaki z AT&T 4410v1.
Alternatywny zestaw znaków może być określony
właściwością
acsc.
. |
|
|
|
Nazwa |
Nazwa |
Ascii |
Nazwa |
glifu |
ACS |
domyślnie |
VT100 |
UK znak funta |
ACS_STERLING |
f |
} |
strzałka w dół |
ACS_DARROW |
v |
. |
strzałka w lewo |
ACS_LARROW |
< |
, |
strzałka w prawo |
ACS_RARROW |
> |
+ |
strzałka w górę |
ACS_UARROW |
^ |
- |
plansza kwadratów |
ACS_BOARD |
# |
h |
kula |
ACS_BULLET |
o |
~ |
plansza szachowa |
ACS_CKBOARD |
: |
a |
symbol stopnia |
ACS_DEGREE |
\ |
f |
diamond |
ACS_DIAMOND |
+ |
` |
większylubrówny |
ACS_GEQUAL |
> |
z |
greckie pi |
ACS_PI |
* |
{ |
linia poprzeczna |
ACS_HLINE |
- |
q |
symbol latarni |
ACS_LANTERN |
# |
i |
duży plus/skrzyżowanie |
ACS_PLUS |
+ |
n |
mniejszylubrówny |
ACS_LEQUAL |
< |
y |
lewy niski narożnik |
ACS_LLCORNER |
+ |
m |
prawy niski narożnik |
ACS_LRCORNER |
+ |
j |
nierówny |
ACS_NEQUAL |
! |
| |
plus/minus |
ACS_PLMINUS |
# |
g |
scan line 1 |
ACS_S1 |
~ |
o |
scan line 3 |
ACS_S3 |
- |
p |
scan line 7 |
ACS_S7 |
- |
r |
scan line 9 |
ACS_S9 |
_ |
s |
czysty blok kwadratowy |
ACS_BLOCK |
# |
0 |
T wskazujące w dół |
ACS_TTEE |
+ |
w |
T wskazujące w lewo |
ACS_RTEE |
+ |
u |
T wskazujące w prawo |
ACS_LTEE |
+ |
t |
T wskazujące w górę |
ACS_BTEE |
+ |
v |
lewy wysoki narożnik |
ACS_ULCORNER |
+ |
l |
prawy wysoki narożnik |
ACS_URCORNER |
+ |
k |
linia pionowa |
ACS_VLINE |
| |
x |
Najlepszym sposobem na zdefiniowanie zestawu graficznego nowego urządzenia
jest dodanie do kopii tej tabeli kolumny, podającej znak, jaki (po emisji
między
smacs/
rmacs) został wyrenderowany jako
odpowiadająca [kodowi] grafika. Następnie przeczytaj pary
VT100/twój terminal z prawa na lewo--będzie to twój
łańcuch ACSC.
Obsługa kolorów¶
Większość terminali kolorowych to albo terminale typu Tektronix,
albo typu HP. Te pierwsze mają predefiniowany zestaw N kolorów (N
zwykle wynosi 8) i mogą ustawiać w komórkach znakowych
niezależnie kolor tła i pierwszego planu, tworząc N*N par
kolorów. Na terminalach HP należy ustawiać każdą
parę kolorów osobno (tło i pierwszy plan nie są ustawiane
niezależnie). Można zdefiniować M par kolorów z 2*M
dostępnych kolorów. Terminale zgodne z ANSI są typu Tektronix.
Pewne podstawowe właściwości kolorów są niezależne
od metody kolorowania. Waściwości numeryczne
colors i
pairs określają maksymalną liczbę kolorów i
par kolorów, które można naraz wyświetlać.
Łańcuch
op (para oryginalna) ustawia tło i pierwszy plan
na domyślne wartości terminala. Łańcuch
oc resetuje
wszystkie kolory i pary kolorów na domyślne wartości terminala.
Niektóre terminala (włącznie z wieloma emulatorami terminali
PC) kasuje obszary ekranu z obecnym tłem, zamiast włączyć
domyślne tło; powinny one posiadać
właściwość logiczną
bce.
Aby zmienić bieżący kolor pierwszego planu lub tła na
terminalu typu Tektronix, należy użyć
setaf (ustaw
pierwszy plan ANSI) i
setab (ustaw tło ANSI). Pobierają one
jeden parametr--numer koloru. Dokumentacja SVr4 opisuje tylko
setaf/
setab; draft XPG4 mówi, że "Jeśli
terminal obsługuje sekwencje specjalne ANSI do ustawiania tła i
pierwszego planu, to powinny być one zakodowane odpowiednio jako
setab i
setaf. Jeśli terminal obsługuje inne
sekewencje specjalne ustawiania tła i pierwszego planu, to powinny
być one kodowane jako
setb i
setf. Funkcja
vidputs()
i funkcje odświeżania używają (o ile są zdefiniowane)
setaf i
setab."
Właściwości
setaf/
setab i
setf/
setb
pobierają pojedynczy argument numeryczny. Wartości 0-7 są
przenośnie zdefiniowane w sposób następujący
(środkowa kolumna to symboliczne wartości #define z
nagłówków bibliotek
curses). Sprzęt terminala
może mapować je jak chce, lecz wartości RGB określają
normalne lokacje w przestrzeni kolorów. space.
Kolor |
#define |
Wartość |
RGB |
czarny |
COLOR_BLACK |
0 |
0, 0, 0 |
czerwony |
COLOR_RED |
1 |
max,0,0 |
zielony |
COLOR_GREEN |
2 |
0,max,0 |
żółty |
COLOR_YELLOW |
3 |
max,max,0 |
niebieski |
COLOR_BLUE |
4 |
0,0,max |
fioletowy |
COLOR_MAGENTA |
5 |
max,0,max |
cyjankowy |
COLOR_CYAN |
6 |
0,max,max |
biały |
COLOR_WHITE |
7 |
max,max,max |
Na terminalu typu HP używa się
scp z numerem pary kolorów
do ustawienia obecnej pary kolorów.
Na terminalu Tektronix może być obecna właściwość
ccc. Wskazuje ona, że kolory można modyfikować. W tej
sytuacji właściwość
initc pobiera numer koloru (0
do
colors-1) i trzy dalsze parametry, opisujące kolor. Parametry
te są domyślnie interpretowane jako RGB. Jeśli obecna jest
właściwość logiczna
hls, to są one
interpretowane jako parametry HLS (Hue, Lightness, Saturation). Zakresy
zależą od terminala.
Na terminalu w rodzaju HP,
initp może dawać
możliwość zmieniania wartości pary kolorów. Pobiera 7
parametrów; numer pary kolorów (0 do
max_pairs-1) oraz dwie
trójki, opisujące najpierw tło, a potem pierwszy plan.
Parametry te określają RGB lub HLS, zależnie od
hls.
Na niektórych terminalach kolorowych, kolory kolidują z
podświetleniami. Można zarejestrować te kolizje we
właściwośći
ncv. Jest to maska bitowa
atrybutów, które nie mogą być używane przy
włączonych kolorach. Odpowiedniość między atrybutami
rozumianymi przez
curses jest następująca:
Atrybut |
Bit |
Dziesiętnie |
A_STANDOUT |
0 |
1 |
A_UNDERLINE |
1 |
2 |
A_REVERSE |
2 |
4 |
A_BLINK |
3 |
8 |
A_DIM |
4 |
16 |
A_BOLD |
5 |
32 |
A_INVIS |
6 |
64 |
A_PROTECT |
7 |
128 |
A_ALTCHARSET |
8 |
256 |
Na przykład na wielu konsolach IBM PC atrybut podkreślenia koliduje z
niebieskim kolorem pierwszego planu i nie jest dostępny w trybie
kolorowym. Powinny więc mieć ustawione
właściwość
ncv na 2.
Curses SVr4 nie używają w ogóle
ncv, ncurses
rozpoznają je i optymalizują wyjście.
Różności¶
Jeśli terminal wymaga innego znaku wypełniania niż zero, to jest
on podawany jako pad. Z łańcucha pad wykorzystywany jest tylko
pierwszy znak. Jeśli terminal nie obsługuje znaku wypełniania,
podaj npc. Zauważ, że ncurses implementuje zgodną z termcap
zmienną
PC; dlatego aplikacje mogą ustawiać tę
wartość na coś innego niż zero, a ncurses spróbuje
najpierw
npc i użyje napms jeśli terminal nie posiada znaku
wypełnienia.
Jeśli terminal może przesuwać w górę lub w
dół o pół linii, to może to być określone
przez
hu (pół-linii w górę) i
hd
(pół-linii w dół). Jest to przede wszystkim przydatne dla
indeksów górnych i dolnych w terminalach hardcopy. Jeśli
terminal hardcopy potrafi przejść na następną stronę
(eject to the next page) (tj. form feed), podaj to jako
ff (zwykle
control L).
Jeśli istnieje komenda do powtórzenia danego znaku podaną
liczbę razy (aby zaoszczędzić na czasie transmisji dużej
liczby takich samych znaków), można to określić
parametryzowanym łańcuchem
rep. Pierwszy parametr jest
powtarzanym znakiem, a drugi liczbą powtórzeń. Tak więc
tparm(repeat_char, 'x', 10) jest równoważne `xxxxxxxxxx'.
Jeśli terminal posiada ustawiany znak komendy, jak w TEKTRONIX, można
to określić przez
cmdch. Wybierany jest prototypowy znak
komendy, używany we wszystkich właściwościach. Znak ten
jest podawany przez właściwość
cmdch. Na
niektórych systemach uniksowych obsługiwana jest
następująca konwencja: W środowisku szukana jest zmienna
CC i jeśli zostanie znaleziona, wszystkie pojawienia znaku
prototypowego są zamieniane na znak ze zmiennej środowiskowej.
Opisy terminala, które nie reprezentują konkretnych rodzajów
znanych terminali, takie jak
switch,
dialup,
patch i
network, powinny zawierać właściwość
gn
(generic), aby programy mogły stwierdzić, że nie wiedzą
jak rozmawiać z terminalem. (Właściwość ta nie tyczy
się opisów terminali
virtual, dla których znane są
sekwencje specjalne.)
Jeśli terminal posiada klawisz ``meta'', który zachowuje się jak
klawisz przesunięcia, ustawiający ósmy bit przesyłanego
znaku, to fakt ten można wskazać z pomocą
km. W
przeciwnym wypadku, oprogramowanie założy, że 8-my bit jest
bitem parzystości i zazwyczaj będzie czyszczony. Jeśli
istnieją łańcuchy, włączające i
wyłączające ten tryb ``meta'', to powinny być one
określone jako
smm i
rmm.
Jeśli terminal ma więcej linii pamięci niż mieści
się naraz na ekranie, to liczba tych linii powinna być
określana przez
lm. Nadanie wartości
lm#0
określa, że liczba linii nie jest ustalona, lecz mimo to jest
więcej pamięci niż linii ekranowych.
Jeśli terminal jest jednym z obsługiwanych przez uniksowy
protokół wirtualnego terminala, to numer terminala może
być podany jako
vt.
Łańcuchy media copy, sterujące zewnętrzną
drukarką, podłączoną do terminala mogą być
podawane jako
mc0: drukuj zawartość ekranu,
mc4:
wyłącz drukarkę i
mc5: włącz drukarkę.
Gdy drukarka jest włączona, tekst przesyłany do terminala
będzie przesyłany na drukarkę. Nie jest zdefiniowane czy tekst
ma być wtedy również wyświetlany na ekranie terminala.
Wariacja
mc5p pobiera jeden parametr i pozostawia drukarkę
włączoną na tyle znaków, ile podano w parametrze;
wyłączając następnie drukarkę. Parametr nie powinien
przekraczać 255. Cały tekst, łącznie z
mc4, jest
podczas działania
mc5p przezroczyście przekazywany drukarce.
Zaburzenia i uszkodzenie mózgu¶
Terminale, które nie zezwalają na wyświetlanie znaków tyldy,
powinny wskazywać to przez
hz.
Terminale, które ignorują line-feed po zawinięciu
am,
takie jak Concept i vt100 powinny wskazywać to przez
xenl.
Jeśli do pozbycia się trybu wyróżnionego potrzebne jest
el (zamiast zwyczajnego nadpisania na nim normalnego tekstu),
należy podać
xhp.
Terminale teleray, gdzie tabulacje zmieniają przesuwane znaki na spacje,
powinny podawać
xt (destruktywne tabulacje). Uwaga: zmienną,
określającą to jest obecnie `dest_tabs_magic_smso'; w starszych
wersjach było to teleray_glitch. To zaburzenie oznacza również,
że nie jest możliwe ustawienie kursora na ``magicznym ciasteczku'',
że do skasowania trybu wyróżnionego należy skasować
lub wstawić linię. Implementacja ncurses ignoruje to.
Terminal Beehive Superbee, który nie potrafi poprawnie przesyłać
znaków escape i control C ma właściwość
xsb,
określającą, że zamiast escape używany jest klawisz
f1, a zamiast control C używane jest f2. (Problem ten występuje
tylko w Superbee, zależnie od ROM.) Zauważ, że w starszych
wersjach terminfo właściwość ta była nazywana
`beehive_glitch'; obecnie jest to `no_esc_ctl_c'.
Inne problemy związane z konkretnymi terminalami można naprawić
dodając dalsze właściwości typu
xx.
Podobne terminale¶
Jeśli istnieją dwa bardzo podobne terminale, gdzie jeden może
być zdefiniowany tak samo jak drugi, z pewnymi wyjątkami, to
można wykorzystać właściwość
use z
nazwą podobnego terminala. Właściwości podane przed
use przesłaniają te z typu wybranego przez
use.
Właściwości można anulować poprzez umieszczanie na
lewo od definicji właściwości
xx@, gdzie xx jest
właściwością. Na przykład,
2621-nl, smkx@, rmkx@, use=2621,
definiuje 2621-nl, który nie posiada
smkx,
rmkx i z tego
powodu nie włącza etykiet klawiszy funkcyjnych w trybie wizualnym.
Jest to przydatne dla innych trybów terminala lub dla innych preferencji
użytkownika.
Pułapki długich wpisów¶
Długie wpisy terminfo rzadko są problemem; żaden wpis terminfo
nie osiągnął jeszcze nawet 4K maksimum przeznaczonego na
tablicę łańcuchową. Niestety jednak, translacje termcap
są bardziej ograniczone (do 1K). Z tego powodu, translacje termcap
długich wpisów terminfo mogą powodować problemy.
Strony podręcznika man dla 4.3BSD i starszych wersji tgetent()
mówią użytkownikowi, by alokował 1K bufor na wpis termcap.
Wpis jest zakończony zerem przez bibliotekę termcap, więc
bezpieczną długością wpisu termcap są 1023 bajty.
Zależnie od tego, co robi dana aplikacja i biblioteka termcap i od tego
gdzie w pliku termcap znajduje typ terminala szukany przez tgetent(),
mogą dziać się różne rzeczy.
Niektóre biblioteki termcap drukują komunikat ostrzegawczy i
kończą działanie; inne nie; inne skracają wpis do 1023
bajtów. Niektóre aplikacje alokują więcej niż
wymagany 1K; inne nie.
Każdy wpis termcap zawiera związane ze sobą dwa ważne
rozmiary: przed rozwinięciem "tc" i po rozwinięciu.
"tc" jest właściwością, która fastryguje
inny wpis termcap do końca bieżącego, aby dodać jego
właściwości. Jeśli wpis termcap nie używa
właściwości "tc", to oczywiście obydwa rozmiary
są identyczne.
Długość przed rozwinięciem tc jest nawjażniejsza,
gdyż dotyczy czegoś więcej niż tylko
użytkowników konkretnego terminala. Jest to długość
wpisu istniejącego w /etc/termcap minus para lewy ukośnik/nowa
linia, które są pomijane przez tgetent() podczas odczytu.
Niektóre biblioteki termcap obcinają również
końcową nową linię (GNU termcap tego nie robi).
Załóż teraz, że:
- *
- wpis termcap przed rozwinięciem ma więcej
niż 1023 bajty,
- *
- aplikacja zaalokowała jedynie 1K,
- *
- biblioteka termcap (jak BSD/OS 1.1 i GNU) odczytuje
cały wpis do bufora, niezależnie od długości, aby
zobaczyć czy jest to ten wpis co trzeba,
- *
- a tgetent() szuka typu terminala, który jest albo
długim wpisem, jak i znajduje się w pliku termcap za długim
wpisem, albo nie istnieje w pliku w ogóle (więc tgetent() musi
przeszukiwać cały plik termcap).
W tej sytuacji tgetent() nadpisze pamięć, być może
również swój stos i prawdopodobnie rzuci korą. Programy
typu telnet są szczególnie okaleczalne; nowoczesne telnety
przekazują wartości jak typ terminala automatycznie. Wyniki są
podobnie niechciane dla bibliotek termcap, jak SunOS 4.1.3 i Ultrix 4.4,
które drukują ostrzeżenia gdy odczytują zbyt długie
wpisy termcap. Jeśli biblioteka termcap obcina długie wpisy, jak
OSF/1 3.0, to jest odporna na ten problem, lecz zwraca nieprawidłowe dane
dla terminala.
Rozmiar "po rozwinięciu tc" ma podobne działanie na
powyższe, lecz jedynie dla osób, które ustawiły TERM na
ten typ terminala, gdyż tgetent() dokonuje rozwinięcia
"tc" tylko jeśli znajdzie odpowiedni typ.
Ogólnie, wpis termcap, który jest dłuższy niż 1023
bajty może spowodować zrzut core, ostrzeżenia lub
nieprawidłowe działanie. Jeśli jest zbyt długi przed
rozwinięciem "tc", to będzie tak działał nawet
dla użytkowników innych typów terminal, i tych których
zmienna TERM nie posiada opisu w pliku termcap.
W trybie -C (tłumaczenia na termcap), implementacja
tic(1) z
ncurses daje ostrzeżenia gdy długość przed-tc wpisu
termcap jest zbyt wielka. Opcja -c (check) sprawdza również
rozwinięte (po tc) długości.
Kompatybilność binarna¶
Nie jest mądre liczyć na przenośność binarnych
opisów terminfo między komercyjnymi wersjami uniksa. Problem polega
na tym, że istnieją przynajmniej dwie wersje terminfo (pod HP-UX i
AUX), które pochodzą z terminfo System V po SVr1 i dodały
rozszerzone właściwości do tablicy łańcuchów
które (binarnie) kolidują z rozszerzeniami Systemu V i XSI Curses.
ROZSZERZENIA¶
Operator %x parametryzowanych łańcuchów jest typowy tylko dla
implementacji
tparm wykonanej w ncurses (jest wymagany do obsługi
niefortunnego formatu
initc na konsoli Linux).
Niektóre implementacje
curses z SVr4 i wszystkie poprzednie nie
interpretują operatorów %A i %O z parametryzowanych
łańcuchów.
SVr4/XPG4 nie określają czy
msgr zezwala na poruszanie w trybie
alternatywnego zestawu znaków (takie tryby mogą między innymi
mapować CR oraz NL na znaki, które nie pociągają lokalnych
przemieszczeń). Implementacja
ncurses ignoruje
msgr w
trybie
ALTCHARSET. Przychodzi więc możliwość,
że implementacja XPG4, robiąca odwrotne założenie
może wymagać wpisów terminfo z
ncurses z
wyłączonym
msgr.
Biblioteka
ncurses obsługuje tryby wstawiania znaku i wstawiania
znaków w trochę niestandardowy sposób, aby zyskać na
efektywności. Zobacz wyżej sekcję
Wstawianie/kasowanie
znaków.
Podstawienia parametrów dla
set_clock i
display_clock nie
są udokumentowane w SVr4 i w standardzie XSI. Są one wydedukowane z
dokumentacji terminala AT&T 505.
Uważaj z przyznawaniem własciwości
kmous.
ncurses
zechcą interpretować to jako
KEY_MOUSE dla użytku w
terminalach i w emulatorach (jak xterm), które potrafią zwracać
informacje o śledzeniu myszy w strumieniu wejściowym klawiatury.
Różne porty komercyjne terminfo i curses wspierają
różne podzbiory standardu XSI curses i (w niektórych
przypadkach) różne zbiory rozszerzeń. Oto zestawienie,
odpowiadające październikowi 1995:
SVR4, Solaris, ncurses -- Wspierają wszystkie
właściwości SVr4.
SGI -- Wspiera zestaw SVr4 i dodaje jedną nieudokumentowaną
właściwość łańcuchową (
set_pglen).
SVr1, Ultrix -- Obsługują one ograniczony podzbiór
właściwości terminfo. Wartości logiczne kończą
się z
xon_xof; wartości numeryczne z
width_status_line; a łańcuchowe z
prtr_non.
HP/UX -- Wspiera podzbiór SVr1 plus numeryka z SVr[234], a
konkretnie
num_labels,
label_height,
label_width, plus
klawisze funkcyjne 11 do 63, plus
plab_norm,
label_on, i
label_off, plus pewne niekompatybilne rozszerzenia tablicy
łańcuchów.
AIX -- Wspiera podzbiór SVr1 plus klawisze funkcyjne 11 do 63 plus
niekompatybilne rozszerzenia tablicy łańcuchów.
OSF -- Wspiera zarówno zestaw SVr4 jak i rozszerzenia AIX.
PLIKI¶
- /usr/share/terminfo/?/*
- pliki zawierające opisy terminala
ZOBACZ TAKŻE¶
tic(1M),
curses(3X),
printf(3S),
term(5).
AUTORZY¶
Zeyd M. Ben-Halim, Eric S. Raymond.
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu
Tłumaczenia Manuali i
może nie być aktualne. W razie
zauważenia różnic między powyższym opisem a
rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o
zapoznanie się z oryginalną (angielską) wersją strony
podręcznika za pomocą polecenia:
- man --locale=C 5 terminfo
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.