Pożytek z Caps Locka

21/02/2010

No właśnie – do czego administratorowi przydaje się Caps Lock? Do pewnego czasu niespecjalnie się nad tym zastanawiałem – Caps Lock siedział sobie po lewej stronie klawiatury a ja – przed nią. Ja go nie ruszałem, on zazwyczaj nie wchodził mi w paradę. Po prostu harmonia. Ale w pewnym momencie musiałem odciążyć nieco prawą, i duży, wygodny klawisz, kulący się pod serdecznym palcem lewej dłoni, doczekał się swoich pięciu minut sławy…

Szczerze mówiąc: w swej dotychczasowej roli Caps Lock nie przydaje mi się do niczego. Zdarza mi się pisać przykre komentarze, ale praktycznie nigdy nie krzyczę, więc do dużych literek wystarcza mi Shift. Więc mamy już kandydata. Tylko do czego go użyć?

Po odrobinie namysłu uznałem, że najczęściej używaną komendą są wariacje ls. Typowe ls -la to cztery uderzenia palcami prawej dłoni. Dobra nasza. Podepniemy komendę pod klawisz i oszczędzimy sobie wysiłku! I to była ta banalna część. Okazało się bowiem, że pracując na zdalnych maszynach, przy pomocy emulatora terminala uruchomionego pod kontrolą X Window, angażuję całą masę niezależnych systemów. Dość ładnie opisuje to ta strona. Streszcząjąc: nasz klawiatura generuje kod, serwer X przekłada to na własny symbol (keysym), potem terminal przekłada to na odpowiednie sekwencje, na podstawie definicji z Termcap/Terminfo a finalnie, aplikacja lub biblioteka interpretuje te sekwencje. W przypadku basha będzie do biblioteka readline. Uff!

Po dłuższych eksperymentach zdecydowałem się iść po linii najmniejszego oporu i stworzyć konfigurację, która będzie wymagać jak najmniejszej ilości zmian. Po kolei:

Sprawdzamy, jaki kod generuje i nas klawisz Caps Lock. Ten krok można pominąć, bo zazwyczaj powinien być to kod 66, ale dla porządku: użyjemy polecenia ‚xev’:

$ xev

[naciskamy Caps]

KeyRelease event, serial 31, synthetic NO, window 0x3600001,
root 0x1f9, subw 0x0, time 5131660, (493,191), root:(497,212),
state 0x0, keycode 66 (keysym 0xffc9, Caps), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False


Czyli ‚keycode 66’. Świetnie. Wyłączymy funckcjonalnośc Caps Lock a sam klawisz przemapujemy pod coś co występuje w większości terminali, ale jest niezbyt często używane… u mnie jest to klawisz F12. W tym celu do ~/.Xmodmap wpisujemy:

clear lock
keycode 66 = F12

W większości przypadków zawartość .Xmodmap jest wykorzystywana przez skrypty uruchamiające serwer X, jeśli mamy mniej typowy system to sami musimy zadbać o to, by zostało wydane polecenie xmodmap ~/.Xmodmap. Oczywiście możemy je wydać od razu, żeby nie restartować sobie sesji.

Od tego momentu Caps Lock generuje nam to samo, co F12, ale co dalej?

W przypadku basha należy wpisać odpowiednie wartości do ~/.inputrc:

"e[24~": "lsn"
"e[24;2~": "ls -ln"

Pierwsza linijka odpowiada naciśnięciu F12 – druga kombinacji Shift-F12. Czyli, jak dla nas: Caps Lock oraz Shift-Caps Lock ;). Swoją drogą, w definicjach wykorzystywanych przez terminal występuje ona pod oznaczeniem kf24, ale o tym za chwilę. Na razie uruchamiamy nową powłokę i cieszymy się efektem.

W przypadku zsh możemy dopisać do ~/.zshrc.

bindkey -s "$(tput kf12)" "lsn"
bindkey -s "$(tput kf24)" "ls -ln"

Jest to rozwiązanie o tyle sympatyczne, że powinno działać w różnych terminalach. Komenda tput kf12 podaje nam bowiem kod przypisany danemu symbolowi w bazie terminfo.

Zróbmy coś dobrego w VIMie! Skoro już wykorzystujemy Caps Lock w sposób przeciwny naturze, to nie ograniczajmy się do powłoki – najczęściej (w moim przypadku) naciskaną sekwencją jest poczciwy dwukropek. Kto używa tego edytora, ten zrozumie – kto nie używa ten powinien zacząć ;) Ale do rzeczy. Za pomocą małego dopisku do ~/.vimrc sprawimy, że Caps Lock będzie odpowiadać sekwencji Shift-;

map! <F12> :

Jeśli ktoś ma ochotę na inne przypisania to powinien zainteresować się poleceniem infocmp. Wyświetli mu aktualną listę tego, co rozpoznaje jego terminal.

Podsumowując: tematu dotknąłem na razie pobieżnie – dlatego chętnie wysłucham sugestii i krytyk. Gdyby ktoś miał ochotę popełnić mały panegiryk to też będzie fajnie.

PS. Przerwa była długa, ale to nie znaczy, że znudziło mi się pisanie – po prostu od miesiąca pracuję przy migracji pewnej serwerowni a przeprowadzenie takiej operacji w sposób możliwie bezstratny i nieodczuwalny dla użytkowników wymaga pewnego zaangażowania. Szczególnie, gdy weźmiemy pod uwagę, że wiele systemów ma więcej niż pięć-sześć – a część z nich nie była nawet restartowana (nie mówiąc o odłączeniu od prądu) przez ostatnie trzy – lata. Niemniej, gdyby ktoś miał jakieś systemy do przetransportowania, to dysponuję wykwalifikowaną ekipą – dla niektórych jest to już trzecia przeprowadzka serwerowni w karierze. ;)

%d blogerów lubi to: