Rechercher une page de manuel

Chercher une autre page de manuel:

terminfo

Autres langues

Langue: pl

Autres versions - même langue

Version: 31317 (ubuntu - 16/08/07)

Section: 5 (Format de fichier)

NAZWA

terminfo - baza w³a¶ciwo¶ci terminala

SK£ADNIA

/usr/share/terminfo/*/*

OPIS

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:

T}
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
xo terminal u¿ywa potwierdzania xon/xoff

    

A oto w³a¶ciwo¶ci numeryczne:

ró¿ni siê
T}
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
num_labels     
Nl
padding_baud_rate pb pb najni¿sza szybko¶æ przesy³u (baud rate) gdy wymagane jest wype³nianie (padding).




virtual_terminal
width_status_line wsl ws


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.


A oto w³a¶ciwo¶ci napisowe:

center expand;              

c l l c     




    
    
lw25 lw6 lw2 lw20.






Zmienna

w³a¶æ.
acs_chars acsc ac graficzne pary zestawu znaków, oparte o vt100     



back_tab
bell
bl sygna³ audiofoniczny (dzwonek) (P)



carriage_return cr cr powrót karetki (P*) (P*)


change_char_pitch
change_line_pitch     lpi    
change_res_horz chr ZC Zmieñ rozdzielczo¶æ poprzeczn±

change_res_vert

csr
zmieñ region na liniê #1 do linii #2 (P)

    
    

rmp rP podobne do ip, lecz w trybie wstawiania (insert)          
    




clear_all_tabs

mgc    
clear     cl     czy¶æ ekran i wyzeruj kursor (home cursor) (P*)     




clr_bol
clr_eol
ce wyczy¶æ do koñca linii (P)





clr_eos ed cd
wyczy¶æ do koñca ekranu (P*)     

column_address
command_character
CC ustawialny w prototypie znak cmd terminala !?

create_window cwin CW
definiuj okno #1 od #2,#3 do #4,#5     

cursor_address
cursor_down cud1
w dó³ o 1 liniê



cursor_home home ho kursor do domu (je¶li bez cup)
    




cursor_invisible
cursor_left cub1
przejd¼ jedn± spacjê w lewo
    


cursor_mem_address mrcup CM adresowanie kursora wzglêdem pamiêci

    



cursor_normal
cursor_right      cuf1
niedestruktywna spacja (przejd¼ w prawo o spacjê)     
    
    
cursor_to_ll ll ll ostatnia linia, pierwsza kolumna (je¶li bez cup)


    

cursor_up

cvvis
uczyñ kursor bardzo widzialnym




define_char defc ZE zdefiniuj znak

    

    


    
delete_character

dl1
usuñ liniê (P*)

    


dial_phone dial DI wykrêæ numer #1

    

    




dis_status_line

dclk
wy¶wietl w pozycji (#1,#2) zegar
    


down_half_line hd hd pó³ linii w dó³     
    


    
ena_acs

smacs
rozpocznij tryb alternatywnego zestawu znaków (P)

smam SA    
w³±cz automatyczne marginesy
    
enter_blink_mode
enter_bold_mode     
enter_ca_mode smcup ti ³añcuch do rozpoczynania programów, u¿ywaj±cych cup
    




enter_delete_mode
enter_dim_mode
enter_doublewide_mode
enter_draft_quality
enter_insert_mode
enter_italics_mode
enter_leftward_mode
enter_micro_mode
enter_near_letter_quality
enter_normal_quality
enter_protected_mode
enter_reverse_mode
enter_secure_mode
enter_shadow_mode
enter_standout_mode
enter_subscript_mode
enter_superscript_mode
enter_underline_mode
enter_upward_mode
enter_xon_mode
erase_chars
exit_alt_charset_mode
exit_am_mode
exit_attribute_mode
exit_ca_mode
exit_delete_mode
exit_doublewide_mode
exit_insert_mode
exit_italics_mode
exit_leftward_mode
exit_micro_mode
exit_shadow_mode
exit_standout_mode
exit_subscript_mode
exit_superscript_mode
exit_underline_mode
exit_upward_mode
exit_xon_mode
fixed_pause
flash_hook
flash_screen
form_feed
from_status_line
goto_window
hangup
init_1string
init_2string
init_3string
init_file
init_prog
initialize_color
initialize_pair
insert_character
insert_line
insert_padding
key_a1
key_a3
key_b2
key_backspace
key_beg
key_btab
key_c1
key_c3
key_cancel
key_catab
key_clear
key_close
key_command
key_copy
key_create
key_ctab
key_dc
key_dl
key_down
key_eic
key_end
key_enter
key_eol
key_eos
key_exit
key_f0
key_f1
key_f10
key_f11
key_f12
key_f13
key_f14
key_f15
key_f16
key_f17
key_f18
key_f19
key_f2
key_f20
key_f21
key_f22
key_f23
key_f24
key_f25
key_f26
key_f27
key_f28
key_f29
key_f3
key_f30
key_f31
key_f32
key_f33
key_f34
key_f35
key_f36
key_f37
key_f38
key_f39
key_f4
key_f40
key_f41
key_f42
key_f43
key_f44
key_f45
key_f46
key_f47
key_f48
key_f49
key_f5
key_f50
key_f51
key_f52
key_f53
key_f54
key_f55
key_f56
key_f57
key_f58
key_f59
key_f6
key_f60
key_f61
key_f62
key_f63
key_f7
key_f8
key_f9
key_find
key_help
key_home
key_ic
key_il
key_left
key_ll
key_mark
key_message
key_move
key_next
key_npage
key_open
key_options
key_ppage
key_previous
key_print
key_redo
key_reference
key_refresh
key_replace
key_restart
key_resume
key_right
key_save
key_sbeg
key_scancel
key_scommand
key_scopy
key_screate
key_sdc
key_sdl
key_select
key_send
key_seol
key_sexit
key_sf
key_sfind
key_shelp
key_shome
key_sic
key_sleft
key_smessage
key_smove
key_snext
key_soptions
key_sprevious
key_sprint
key_sr
key_sredo
key_sreplace
key_sright
key_srsume
key_ssave
key_ssuspend
key_stab
key_sundo
key_suspend
key_undo
key_up
keypad_local
keypad_xmit
lab_f0
lab_f1
lab_f10
lab_f2
lab_f3
lab_f4
lab_f5
lab_f6
lab_f7
lab_f8
lab_f9
label_format
label_off
label_on
meta_off
meta_on
micro_column_address
micro_down
micro_left
micro_right
micro_row_address
micro_up
newline
order_of_pins
orig_colors
orig_pair
pad_char
parm_dch
parm_delete_line
parm_down_cursor
parm_down_micro
parm_ich
parm_index
parm_insert_line
parm_left_cursor
parm_left_micro
parm_right_cursor
parm_right_micro
parm_rindex
parm_up_cursor
parm_up_micro
pkey_key
pkey_local
pkey_xmit
plab_norm
print_screen
prtr_non
prtr_off
prtr_on
pulse
quick_dial
remove_clock
repeat_char
req_for_input
reset_1string
reset_2string
reset_3string
reset_file
restore_cursor
row_address
save_cursor
scroll_forward
scroll_reverse
select_char_set
set_attributes
set_background
set_bottom_margin
set_bottom_margin_parm
set_clock
set_color_pair
set_foreground
set_left_margin
set_left_margin_parm
set_right_margin
set_right_margin_parm
set_tab
set_top_margin
set_top_margin_parm
set_window
start_bit_image
start_char_set_def
stop_bit_image
stop_char_set_def
subscript_characters
superscript_characters
tab
these_cause_cr
to_status_line
tone
underline_char
up_half_line
user0
user1
user2
user3
user4
user5
user6
user7
user8
user9
wait_tone
xoff_character
xon_character
zero_motion

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.

T}
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

setab
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

smglr
ustaw lewy i prawy margines na #1, #2     
    

set_page_length slines    
YZ
ustaw rozmiar strony na #1 linii     


set_tb_margin

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ê!

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,




 

bia³ymi spacjami (poza pierwsz± lini±). Komentarze mo¿na za³±czaæ w       
poszczególnych liniach przy u¿yciu ``#''.

    
    


    

    
    
 
    




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.
Wszystkie w³a¶ciwo¶ci maj± nazwy. Na przyk³ad fakt, ¿e terminale ANSI maj±
(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
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
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
z powy¿szego przyk³adu.
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.)
Wyja¶nimy teraz jak przygotowywaæ opisy terminali.
Najefektywniejszym sposobem jest wykorzystanie podobnego terminala z
i budowanie opisu stopniowo, wykorzystuj±c czê¶ciowe opisy z u¿yciem
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
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.
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
jak i
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
(Zwykle jest to powrót karetki, control M.)
Je¶li istnieje kod dzwonka (bell, beep, itp.), to powinien byæ on podany
jako
Je¶li istnieje kod, przesuwaj±cy kursor o jedn± pozycjê w lewo (jak
backspace), to w³a¶ciwo¶æ ta powinna byæ podana jako
Podobnie, kod przesuwaj±cy w prawo, górê i dó³ powinien byæ podany jako
i
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
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
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
(index).
Aby przewin±æ tekst w dó³, program idzie do lewego górnego naro¿nika i
wysy³a ³añcuch
(reverse index).
£añcuchy
i
nie s± zdefiniowane w przypadku przebywania w nieodpowiednich miejscach
ekranu.
Wersjami parametryzowanymi sekwencji przewijaj±cych s±
i
które maj± tak± sam± semantykê jak
i
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ê
z ostatniej kolumny.
Jedyny ruch lokalny, który jest zdefiniowany z lewego krañca przy podaniu
to
który przejdzie do prawego krañca poprzedniego wiersza.
Je¶li
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
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
(nowa linia).
Nie ma znaczenia czy polecenie to czy¶ci resztê bie¿±cej linii, wiêc je¶li
terminal nie posiada
i
to mo¿e wci±¿ uda siê z³o¿yæ z czego¶ dzia³aj±cy
W³a¶ciwo¶ci te wystarczaj± do opisania terminala hard-copy i
``glass-tty''. W konsekwencji, model teletype 33 jest opisany jako
a Lear Siegler ADM-3 jako
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
jak %x.
Na przyk³ad aby adresowaæ kursor, podana jest w³a¶ciwo¶æ
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
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:
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.
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
Je¶li terminal posiada bezwzglêdne (absolute) adresowanie wierszy lub kolumn,
to mo¿e to byæ podane jako pojedyncze w³a¶ciwo¶ci parametryczne,
(bezwzglêdna pozycja pozioma)
i
(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¿
Je¶li istniej± sparametryzowane ruchy lokalne (np. przesuñ
spacji w prawo), to mog± byæ one podane jako
i
z pojedynczym parametrem, okre¶laj±cym ilo¶æ spacji przesuniêcia.
Sekwencje te s± przydatne je¶li terminal nie ma
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
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.
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
nie jest dostêpne.)
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
i
które mog± pobieraæ parametr, okre¶laj±cy ile linii skasowaæ lub wstawiæ,
mog± byæ podawane jako
i
Je¶li terminal ma ustawialny region przewijania (jak vt100), to komenda
ustawiaj±ca to mo¿e byæ opisana z pomoc± w³a¶ciwo¶ci
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
na odpowiednio wybranym regionie; komendy
i
(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
lub
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
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.
Istniej± dwa podstawowe rodzaje inteligentnych terminali, je¶li braæ pod
uwagê obs³ugê wstawiania/kasowania znaków opisywan± w
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æ
oraz
i obydwie sekwencje zostan± u¿yte.
W³a¶ciwo¶æ
z jednym parametrem powtarza rezultat
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æ
albo
do kasowania z parametrem
który mówi, by skasowaæ
lub sekwencje wchodzenia (smdc) i wychodzenia (rmdc) z trybu
kasowania (dowolny tryb, którego terminal wymaga dla zadzia³ania
Komenda do kasowania
znaków (równowa¿na wypuszczeniu
spacji bez przesuwania kursora)
mo¿e byæ okre¶lona jako
z jednym parametrem.
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
(migotanie)
(wyt³uszczenie, lub rozja¶nienie)
(¶rednia-jasno¶æ)
(tekst niewidzialny, lub `spacjowanie')
(chronione)
(inwersja kolorów)
(wy³±cz
tryby atrybutów)
(wejd¼ w tryb alternatywnego zestawu znaków)
i
(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
(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
powinny byæ natomiast te, dla których istniej± oddzielne komendy atrybutów.
Na przyk³ad DEC vt220 wspiera wiêkszo¶æ trybów:
center;
l c c
l c c
lw28 lw6 lw2 lw20.
parametr tparm
brak
p1
p2
p3
p4
p5
p6
p7
p8
p9

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

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)
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
         
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
Je¶li istnieje sposób na uniewidzialnienie kursora, to podaj to jako
w³a¶ciwo¶æ
W³a¶ciwo¶æ
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.
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:
(home down),
(backspace),
(czy¶æ wszystkie tabulacje),
(czy¶æ tabulator w tej kolumnie),
(klawisz czyszczenia ekranu klub wymazywania),
(klawisz kasowania (delete)),
(kasowanie linii),
(wyj¶cie z trybu wstawiania),
(czyszczenie do koñca linii),
(czyszczenie do koñca ekranu),
(wstaw znak, lub wejd¼ w tryb wstawiania),
(wstaw liniê),
(nastêpna strona (next page)),
(poprzednia strona (previous page)),
(przewijaj w przód),
(przewijaj w ty³),
(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
oraz
Klawisze te s± przydatne gdy potrzebne s± efekty kierunkowego padu 3x3.
£añcuchy programowania klawiszy funkcyjnych mog± byæ podawane jako
oraz
£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
powoduje i¿ naci¶niêcie klawisza jest równowa¿ne wklepaniu przez u¿ytkownika
danego ³añcucha;
powoduje, ¿e ³añcuch jest wykonywany przez terminal lokalnie;
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.
Je¶li terminal posiada sprzêtowe tabulacje, to komenda przej¶cia do
nastêpnego tabulatora mo¿e byæ podana jako
(zwykle control I).
Komenda ``lewej-tabulacji'', przenosz±ca w lewo do poprzedzaj±cego
tabulatora mo¿e byæ podana jako
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æ
czy
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
spacji, to powinien byæ podany parametr numeryczny
pokazuj±cy odstêpy miêdzy tabulatorami.
Zazwyczaj jest to u¿ywane przez komendê
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
oraz
s³u¿±ce do inicjalizacji terminala,
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ê
programu
przy ka¿dym logowaniu u¿ytkownika.
S± one drukowane w nastêpuj±cej kolejno¶ci:
uruchom program
wy¶lij
ustaw marginesy przy u¿yciu
ustaw tabulatory przy u¿yciu
i
wydrukuj plik
i w koñcu wy¶lij
Wiêkszo¶æ inicjalizacji jest wykonywana w
Tryby specjalne terminala mo¿na ustawiaæ bez duplikowania ³añcuchów,
wstawiaj±c wspólne sekwencje do
a specjalne elementy do
oraz
Para sekwencji, która dokonuje twardego resetu z kompletnie nieznanego stanu
mo¿e byæ podobnie podawana jako
i
analogicznie do
oraz
£añcuchy te s± wysy³ane przez program
s³u¿±cy do naprawiania terminala gdy ten wejdzie w dziwny stan. Komendy
zazwyczaj s± umieszczane w
i
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±
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
(czy¶æ wszystkie tabulatory)
i
(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
lub
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
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
u¿ywany jest jedynie pierwszy znak.
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.
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.
center expand;
c l l c
c l l c
lw28 lw6 lw2 lw20.
Nazwa
glifu
UK znak funta
strza³ka w dó³
strza³ka w lewo
strza³ka w prawo
strza³ka w górê
plansza kwadratów
kula
plansza szachowa
symbol stopnia
diamond
wiêkszylubrówny
greckie pi
linia poprzeczna
symbol latarni
du¿y plus/skrzy¿owanie
mniejszylubrówny
lewy niski naro¿nik
prawy niski naro¿nik
nierówny
plus/minus
scan line 1
scan line 3
scan line 7
scan line 9
czysty blok kwadratowy
T wskazuj±ce w dó³
T wskazuj±ce w lewo
T wskazuj±ce w prawo
T wskazuj±ce w górê
lewy wysoki naro¿nik
prawy wysoki naro¿nik
linia pionowa

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:

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.
    


      
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
(pó³-linii w górê)
i
(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
(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
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
Wybierany jest prototypowy znak komendy, u¿ywany we wszystkich
w³a¶ciwo¶ciach.
Znak ten jest podawany przez w³a¶ciwo¶æ
Na niektórych systemach uniksowych obs³ugiwana jest nastêpuj±ca konwencja:
W ¶rodowisku szukana jest zmienna
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
i
powinny zawieraæ w³a¶ciwo¶æ
(generic), aby programy mog³y stwierdziæ, ¿e nie wiedz± jak rozmawiaæ z
terminalem. (W³a¶ciwo¶æ ta nie tyczy siê opisów terminali
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±
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
i
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
Nadanie warto¶ci
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
£añcuchy media copy, steruj±ce zewnêtrzn± drukark±, pod³±czon± do terminala
mog± byæ podawane jako
drukuj zawarto¶æ ekranu,
wy³±cz drukarkê i
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
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
jest podczas dzia³ania
przezroczy¶cie przekazywany drukarce.
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
(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¶æ
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.
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
przes³aniaj± te z typu wybranego przez
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,
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.
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.
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.
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 xte