screen i strzałki

Jakub Bogusz qboosh w pld.org.pl
Pon, 3 Cze 2002, 22:09:47 CEST


Wraca nieśmiertelny temat strzałek pod screenem...
Czy ktoś wie, jakie kody powinny mieś strzałki pod TERM=screen?

Teraz to jest kompletnie zwalone: screen generuje kody typu "^[[A",
podczas gdy w bazie terminfo są kody typu "^[OA"!
Ponadto screen ustawia zmienną TERMCAP - także z kodami typu "^[OA"!
Przez w programach bazujących tylko na terminfo (np. slrn z patchem
keymap) strzałki działają (w slrn przy wyborze grupy działa strzałka
w górę z powodu przeoczenia jednego kodu w patchu).
Programy z zaszytymi kodami jakoś sobie radzą, czasem nieco dziwnie (np.
vim - poprawnie reaguje na strzałki, w dolnej linii widać, że dostaje
"^[[A", ale przy edycji po naciśnięciu ^V strzałka w górę wstawia
"^[OA").

Zauważyłem dwie rzeczy:
1. jakiś czas temu qrczak wrzucił patcha ncurses-screen_arrows.patch
(poprawiającego kody w bazie terminfo na to, co screen faktycznie
zwraca), ale z bliżej mi nieznanych powodów po 8 godzinach patcha
usunął:

| Revision 1.81  2001/12/27 18:46:51  qrczak
| - Hmm, the story of arrow keys on 'screen' is more complicated. Revert
|   the last change, I don't know why it works better that way.
| - Release 22.
| 
| Revision 1.80  2001/12/27 10:45:31  qrczak
| - ncurses-screen-arrows.patch: fix terminfo database: on screen arrow
|   keys generate ^[[A style codes, not ^[OA.
| - Release 21.

2. niesławny patch screen-no_hardcoded_term_sequences.patch - wcale
niczego nie naprawia, tylko nawet więcej psuje w zależności od terminala
- ponieważ sekwencje generowane przez strzałki są pobierane z bazy
terminfo, ale... dla terminala na którym screen jest uruchamiany, a nie
dla TERM=screen (a przynajmniej to tak wygląda[1] - na konsoli jest "^[[A",
pod xtermem "^[OA"). Co więcej - zmienna TERMCAP jest ustawiana zgodnie
z tymi kodami (bez przeglądania kodu - nie mam pojęcia dlaczego,
przecież bez tego patcha wygląda, jakby te ustawienia były dla
TERM=screen, a patch niczego takiego nie zmienia) - co na konsoli daje
efekt jeszcze dziwniejszy (programy działają zależnie od priorytetów -
np. vim i mutt nie działają, slrn działa bo TERMCAP ma dla slanga wyższy
priorytet); pod xtermem kody akurat się pokrywają i wszystko działa OK.
A, dodatkowo mamy zabawę, jeśli sesję kontynuujemy na innym terminalu
niż zaczynaliśmy (kody przesyłane się zmieniają, $TERMCAP nie).

[1] inna hipoteza: kody są pobierane dla TERM=screen, ale ponieważ tych
wysyłanych z konsoli (TERM=linux) nie ma wtedy w tablicy[2], to nie są
tłumaczone; tylko skąd w takim razie te kody w $TERMCAP?

[2] właściwie do czego jest tablica term w screenie - to właściwości
terminala udostępnianego przez screena, czy terminala na którym screena
uruchamiamy?


-- 
Jakub Bogusz    http://prioris.mini.pw.edu.pl/~qboosh/



Więcej informacji o liście dyskusyjnej pld-devel-pl