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