9. "Tips and Tricks"


Możliwości dowolnego przedefiniowania kodów generowanych naciśnięciem klawisza, bez zmiany ustawień w systemie

Może się zdarzyć, że w przypadku ustawienia innego terminala, niż standardowy linux, bądź (w trybie graficznym) xterm zauważymy (przykładowo) niewłaściwą reakcję na naciśnięcie któregoś klawisza, najprawdopodobniej może to dotyczyć któregoś z klawiszy funkcyjnych.

Smabi udostępnia prosty sposób na całkowite "przemapowanie" klawiatury.

Wyjaśnimy to na prostym przykładzie - załóżmy, że z jakichś powodów chcemy korzystać z terminala o nazwie oterm, który to hipotetyczny terminal ma na tyle odmienne ustawienia obsługi klawiatury, że zauważamy tam problem z działaniem klawisza Backspace - co może brać się stąd, że ustawienia owego terminala powodują, że naciśnięcie tego klawisza powoduje przesłanie kodu 127 ( Control-? ). Należy zatem wymusić przesyłanie oczekiwanego przez program kodu 008 ( Control-H ).

Ustawienia par "kod pierwotnie generowany naciśnięciem danego klawisza - docelowy kod przesyłany do programu" można dowolnie przedefiniować w pliku /usr/share/terminfo/FSkeymap.def - po prostu, na końcu wspomnianego pliku dopisujemy:

#----- przykład przemapowania klawiatury dla innego terminala (oterm)

:oterm

0-126: *
127 : 8
128-255: *
#----- koniec

Powyższe oznacza:
Wiedząc powyższe, można dopasować sobie translację kodów w najzupełniej indywidualny sposób, niezgodny z żadnym w ogóle standardem.

Systemu restartować nie trzeba, tylko zakończyć działanie programu, i uruchomić go ponownie. Program wczytuje ten plik zawsze po uruchomieniu.

I jeszcze jedno: przyjmijmy dodatkowo, że Smabi używany jest w trybie wielostanowiskowym, na serwerze, i poszczególni użytkownicy z jakichś powodów chcieliby korzystać z terminali różnych typów. Jest wyjście i z takiej sytuacji - po prostu w katalogu /usr/share/terminfo zamieszczamy plik FSkeymap.def z ustawieniami "globalnymi", obejmującymi większość użytkowników programu. Natomiast ci korzystający z odmiennych terminali, winni zamieścić swoje indywidualnie przygotowane pliki FSkeymap.def po prostu w "korzeniu" swojego katalogu domowego. Program szuka tego pliku najpierw w katalogu domowym, a dopiero, gdy go tam nie znajduje - szuka go w /usr/share/terminfo. I dlatego plik zamieszczony w "korzeniu" katalogu domowego ma wyższy priorytet, niż ten "ogólnie dostępny" z /usr/share/terminfo.

Nazwę aktualnie używanego terminala sprawdzimy wydaniem polecenia set - wśród wielu zmiennych interesująca nas to TERM. Najczęściej będzie ona miała wartość TERM=linux.

Poprzednia strona | Następna strona | Spis treści
Strona główna serwisu programu