Czas na 24-bitowy terminal (tmux + zsh + vim)

Posted on Sat 01 February 2020 in Linux, Tips4Unices, Tips 4 VIM • 2 min read

Koniec dziadowania, jest XXI wiek i skoro można mieć wygodny interfejs do programowania (i nie tylko), to trzeba go sobie zapewnić.

Przygotowuję sobie 24-bitowy (RGB) terminal, do kodowania na zdalnej maszynie z tmuxem i pokolorowanym VIM-em .

Po co? By korzystać z szablonów kolorów (colorscheme) w VIM-ie i WIDZIEĆ kod. Porównanie z odzyskiwaniem wzroku jest tu chyba na miejscu.

Pierwszym elementem układanki jest użycie emulatora terminala, który jest w stanie wyświetlać 24-bitowy kolor. Pod macOS-em używam iTerm2, a w Linuksie (na razie) konsole ale zmaierzam dać szansę: st. Piszę o tym czego używam bo wiem, że po prostu to działa.

Listę terminali, wraz z opisem metody wykrywania "24-bitowości", można znaleźć tu: https://gist.github.com/XVilka/8346728.

Następnym krokiem jest instalacja tmux-a, czyli tzw. multipleksera terminali. tmux, podobnie jak screen, pozwala tworzyć nowe okna terminala i nimi zarządzać.
Uważam, że języku polskim istnieje dużo ładniejsze słowo od angielskiego (czy może pierwotnie łacińskiego) multiplekser, jest to komutator. Dobrze... dobrze... żartowałem, jest przecież przełącznik, bo co innego robi tmux, jak nie przełączanie z jednego, na inne, okien terminala?

Przełącznik terminali. Piękne.

W Debianie 10, bo takiego obecnie używam, mogę zainstalować tmuxa z paczki i jest to wersja wyższa niż 2.2 czyli już ze wsparciem 24-bitów. Wystarczy zatem wydać komendę:
sudo apt install tmux
Teraz zaczyna się cała magia z włączeniem pełnego koloru.
Używam powłoki zsh, więc do pliku konfiguracyjnego .zshrc dopisuję (lub zmieniam istniejącą) linię:
export TERM=xterm-color
i po zapisie wczytuję zmienioną konfigurację:
. .zshrc
(kropka jest synonimem polecenia source, wbudowanym w wiele powłok, zdaje się, że do Basha została dodana w 1976 roku).
Dla ciekawskich: man zshbuiltins albo https://www.wikiwand.com/en/Dot_(command).
Następnie zmuszam tmuxa to włączenia żadanego trybu, bo domyślnie pełny kolor nie jest używany. W tym celu tworzę (lub dodaję do istniejącego) plik: .tmux.conf i wpisuje do niego takie 2 linie:
set -g default-terminal "xterm-color"
set-option -ga terminal-overrides ",xterm-color:Tc"
Uruchamiam tmuxa i sprawdzam czy mam 24-bity w konsoli. Do tego służy krótki skrypt w awku, do pobrania stąd: https://fubar.pl/test/shitz/24.awk. Po ściągnięciu trzeba nadać mu bit wykonywalności:
chmox +x ./24.awk
i uruchomić w terminalu.

Efekt w 24-bitowym terminalu wygląda tak:

24-bit AWK

W terminalu obsługującym jedynie 256 kolorów wyraźnie widać poszczególne bloki kolorów, bez płynnych przejść. Cóż, terminal próbuje się "wyrobić" w ograniczonej palecie barw:

256-bit AWK

Ostatnim krokiem, jest sprawdzenie czy w uruchomonym przełączniku terminali (tmux) VIM ładnie wyświetla 24-bitowe szablony kolorów.

W VIM-ie używam menedżera pluginów o nieszablonowej nazwie: vim-plug. Dzięki niemu zainstalowanie szablonu sprowadza się do dodania jednej, krótkiej linijki kodu do pliku konfiguacyjnego edytora i wydaniu jednego polecenie. Muszę już kończyć ten wpis, bo wkrótce przekroczę barierę po której będzie on TLTR;, więc opis ustawiania edytora przeniosę do następnego artykułu.

Dość, że po zainstalowaniu szablonu o nazwie: true.vim, mój edytor wygląda tak:

tmux zsh vim

p.s. Niech się tmux automtycznie podłącza do istniejącej sesji, a jeśli takowej nie znajdzie, niech uruchamia świeżą. Dodaję do .zshrc to:

# włączam obsugę UTF-8
alias tmux="tmux -u"

if [[ "$TERM" != "screen" ]]; then
     WHOAMI=$(whoami)
    if tmux has-session -t $WHOAMI 2>/dev/null; then
        tmux attach-session -t $WHOAMI
    else
        tmux new-session -s $WHOAMI
    fi
else
         hostname -A
fi