screen, backspace i nie tylko
Jacek Konieczny
jajcus w bnet.pl
Śro, 23 Lip 2003, 13:23:42 CEST
Witam,
Piszę klienta Jabberowego pod konsolę. Użyłem do tego biblioteki curses
(poprzez odpowiedni moduł pythona). I wszystko jest ładnie - dopóki nie
użyję screena.
Pod screenem klawisz BS zwraca kod 127 (DEL). Tak samo mówi zawartość
zmiennej $TERMCAP ustawionej przez screen. Jednak w PLD nie używamy
TERMCAP, a terminfo, a nasza baza terminfo zawiera inne informacje (że
BS zwraca kod 8 (BS)). Co dziwniejsze taką samą (błędną) informacje
zawierają pliki termcap i terminfo zawarte w źródłach screena. Nie
wygląda też na to, żeby to psuł któryś z naszych patch (jedyny
podejrzany jest wyhashowany w specu).
W wielu programach nie ma z tym problemu bo są tam na to jakieś
obejścia, ale ja obejść dla cudzych błędów nie chcę robić. Trzebaby to
poprawić w PLD.
Widzę następujące możliwości rozwiązania problemu:
- poprawić screena, żeby zwracał kody jak w naszej i dołączonej do jego
źródeł bazie terminfo
- poprawić bazę terminfo, aby działała z obecnym screenem
- dodać do ncurses.spec automatyczne generowanie bazy dla aktualnego
screena - wymagało by "BuildRequires: screen", ale rozwiązywałoby
(częściowo) problem przyszłych zmian.
- generować bazę jw., ale w screen.spec. Jednak użycie screena do
logowania na zdalną maszyne wymagałoby, żeby na tamtej maszynie był
zainstalowany pakiet z odpowiednią bazą terminfo (czyli screen, albo
inny wygenerowany ze screen.spec).
Odpowiednią bazę terminfo można wygenerować automatycznie w następujący
sposób:
screen -a sh -c 'echo "$TERMCAP" | captoinfo > screen.src'
Otrzymany screen.src będzie zawierał wszystkie właściwości screena.
Można (i chyba warto) wynenerować też wpisy zoptymalizowane dla
niektórych terminali (które mogą nieobsługiwać pewnych funkcji) np.:
TERM=vt100 screen -a sh -c 'echo "$TERMCAP" | captoinfo > screen-vt100.src'
Po zainstalowaniu terminfo, otrzymanego z pliku screen.src z pierwszego
przykładu w następujący sposób:
export TERMINFO=~/.terminfo
mkdir $TERMINFO
tic screen.src
Otrzymałem "pełnosprawnego" screena, w którym nie tylko BS działał
poprawnie, ale i cały ekran mojego programu wyglądał duuużo lepiej.
To jak ten problem rozwiązujemy?
Pozdrowienia,
Jacek
Więcej informacji o liście dyskusyjnej pld-devel-pl