Urxvt i zmodyfikowane rozszerzenie tabbed
Rxvt-unicode, bo taka jest oficjalna nazwa tego niepozornego emulatora terminala, oprócz wielu innych cech, posiada możliwość używania wraz z nim rozszerzeń napisanych w Perlu. Wśród kilkunastu dostarczanych wraz ze źródłami rozszerzeń jest tabbed. Rozszerzenie te, pozwala na uzyskanie funkcjonalności kart (tabów) zbliżonej do tej oferowanej przez "duże" terminale - Gnome-Terminal, Konsole czy świetny Multi-Gnome-Terminal.
Jako, że musiałem zrezygnować z tego ostatniego (zależności do bibliotek Gnome1, brak wsparcia dla UTF8), zacząłem poszukiwania terminala, który posiadałby kilka cech:
- Był lekki (najchętniej bez tony zależności ciągniętej od takich bibliotek jak libgnome czy libkde)
- Posiadał wsparcie dla UTF8
- Posiadał karty (taby) i żeby nie były obrzydliwe :)
- Klikalne URL-e
To były główne założenia. Dodatkowo miło by było jakby terminal ów był w stanie:
- Zapamiętywać sesje, podobnie jak to robił MGT, tzn. pamiętać co który tab zawierał włącznie z ostatnią ścieżką
- Wyświetlać aktywność w tytule karty (MGT wyświetlał tytuł karty na czerwono, gdy coś się tam aktualnie działo, na niebiesko, gdy przestało)
- Pozwalać na łatwe dodawanie nowych "typów terminali", czyli pozwolić
zdefiniować sobie np.
ssh serwer
i zdefiniować do niego skrót - Wyświetlić przynajmniej 256 kolorów
Znalazłem urxvt, który spełniał wszystkie podstawowe wymagania oraz część z tych o drugorzędnej ważności. By skorzystać z rozszerzenia tabbed wystarczy dodać odpowiedni parametr:
gryf@mslug ~ $ urxvt -pe tabbed
Tworzenie nowej karty odbywa się poprzez kliknięcie w przycisk [NEW]
lub
użycie skrótu SHIFT+down
(czyli strzałka w dół). Przemieszczanie się
pomiędzy tabami można uzyskać przez kliknięcie we właściwą kartę myszą, bądź
poprzez SHIFT+left/right
. Przemieszczanie kart pomiędzy sobą jest możliwe
poprzez CTRL+SHIFT+left/right
.
Po pierwszym uruchomieniu tego terminala jego wygląd może dość poważnie zrazić, dlatego też niezbędne jest poświęcenie mu nieco czasu na skonfigurowanie pod siebie. Przykładowa konfiguracja, którą stosuję, wygląda mniej więcej tak:
! URXVT URxvt.background: Black URxvt.foreground: rgb:aa/aa/aa URxvt.visualBell: false URxvt.scrollTtyKeypress: true URxvt.scrollstyle: next URxvt*scrollBar: false ! Font configuration. If compiled with xft support it's possible to use any ! other font like Lucida Typewriter. URxvt.font: xft:Fixed:pixelsize=16 URxvt.boldFont: xft:Fixed:bold:pixelsize=16 URxvt.italicFont: xft:Fixed:italic:pixelsize=16 URxvt.boldItalicFont: ! or, if XFT is not compiled into urxvt, use regular X font definition: URxvt.font: -misc-fixed-medium-r-normal-*-*-140-*-*-c-*-* URxvt.boldFont: -misc-fixed-bold-r-normal-*-*-140-*-*-c-*-* URxvt.italicFont: -misc-fixed-medium-o-normal-*-*-140-*-*-c-*-* URxvt.boldItalicFont: ! Different colors URxvt.color0: rgb:00/00/00 URxvt.color1: rgb:b8/36/36 URxvt.color2: rgb:5f/99/22 URxvt.color3: rgb:cd/7b/21 URxvt.color4: rgb:26/30/8a URxvt.color5: rgb:65/26/8a URxvt.color6: rgb:26/7a/8a URxvt.color7: rgb:aa/aa/aa URxvt.color8: rgb:55/55/55 URxvt.color9: rgb:ee/49/4b URxvt.color10: rgb:ac/ee/49 URxvt.color11: rgb:f3/ee/49 URxvt.color12: rgb:49/77/f3 URxvt.color13: rgb:ac/49/f3 URxvt.color14: rgb:49/c4/f3 URxvt.color15: rgb:ff/ff/ff ! Perl extension config URxvt.perl-ext-common: default URxvt.perl-ext: tabbed ! Any scripts placed here will override global ones with the same name URxvt.perl-lib: /home/user/.urxvt/ ! Tabbed extension configuration URxvt.tabbed.tabbar-fg: 8 URxvt.tabbed.tabbar-bg: 0 URxvt.tabbed.tab-fg: 15 URxvt.tabbed.tab-bg: 8 URxvt.tabbed.new-button: false
Konfiguracji dokonuje się w pliku ~/.Xdefaults
. A oto efekt:
Zmodyfikowany tabbed
Po jakimś czasie przestały mi wystarczać "bezimienne", ponumerowane taby oraz sposób tworzenia nowych kart. Zmodyfikowałem więc skrypt tabbed:
każda karta ma nazwę
możliwe jest dodawanie własnych specyficznych konsolowych narzędzi pod własnymi skrótami. Domyślnie dodane są trzy:
- shell (CTRL+SHIFT+n): uruchamia powłokę.
- root (CTRL+SHIFT+r): wykonuje
su -
- mc (CTRL+SHIFT+m): wywołuje
mc
Skróty można przypisywać pod zwykle mało używane klawisze Super_L i Super_R (klawisze z flagą Windows). W kodzie, jako przykład, znajduje się
mutt
uruchamiany skrótemSuper+m
możliwa jest szybka nawigacja do pierwszych dziesięciu kart poprzez skrót
CTRL+[num]
. Dziesiąta karta to numer 0.numery w nazwach kart można wyłączyć poprzez ustawienie
URxvt.tabbed.tab-numbers: false
zintegrowałem wygasanie aktywności, które zamiast tylko pokazywać gwiazdkę, zmienia znak w zależności jaki czas upłynął od ostatniego zdarzenia w danej karcie
dodałem kolorowanie dla poszczególnych stanów kart. Domyślnie czerwony oznacza aktywność, niebieski koniec aktywności a fioletowy to stan przejściowy między stanem jednym a drugim.
Rozszerzenie można pobrać z Bitbucket i używać na własną odpowiedzialność. Jako, że nie znam Perla w ogóle, mogłem, i zapewne narobiłem głupot w tym pliku, choć używam tej modyfikacji już jakiś czas i u mnie działa ;)
Instalacja jest banalna:
Potrzebny jest urxvt z wkompilowanym interpreterem Perl
root@mslug ~ # USE="perl" emerge rxvt-unicode
Plik ze zmodyfikowanym rozszerzeniem rozpakować i umieścić w katalogu
~/.urxvt
Do pliku
~/.Xdefaults
dodać:! Perl extension config URxvt.perl-ext-common: default URxvt.perl-ext: tabbed ! Any scripts placed here will override global ones with the same name URxvt.perl-lib: /home/user/.urxvt/ ! Tabbed extension configuration URxvt.tabbed.tabbar-fg: 8 URxvt.tabbed.tabbar-bg: 0 URxvt.tabbed.tab-fg: 15 URxvt.tabbed.tab-bg: 8 URxvt.tabbed.new-button: false
lub zaadaptować przytoczony wcześniej przykład konfiguracji.