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 ciastko; 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/.