Kitty – nowoczesny emulator terminala

Przez ponad 15 lat korzystałem z Konsole i byłem z niego ogólnie zadowolony. Wszystko działało jak trzeba i miałem swój config, który przenosiłem między maszynami i kolejnymi wersjami KDE/Plasmy... i wtedy poznałem Kitty. Pobawiłem się nim chwilkę i zauważyłem, że choć Konsole było szybkie, to Kitty jest zabójczo szybkie. Na Konsole miałem też problemy z używaniem nnn, które całkowicie zniknęły pod Kitty (pod Konsole musiałem je obchodzić wymuszając inny TERM, co z kolei psuło fzf). Samo to jeszcze by mnie nie przekonało do zmiany, ale czytając dokumentację byłem coraz bardziej przekonany, że to terminal dla mnie i że mogę go dostosować o wiele bardziej niż Konsole. Parę dodatkowych funkcji realnie przełożyło się na moją wygodę pracy. Napotkałem jednak pewne problemy i niespodzianki, które jednak szczęśliwie udało się rozwiązać albo obejść. Postanowiłem więc spisać swoje wrażenia i przygody z używania Kitty. Program ma tonę funkcji, z których jeszcze nie zdążyłem skorzystać, albo o których zapomniałem, więc siłą rzeczy nie jest to kompletny opis.

Integracja z pagerem

Z początku brakowało mi wbudowanej funkcji przeszukiwania bufora, ale odkryłem, że Kitty daje mi coś jeszcze lepszego - możliwość otwarcia scrollbacka (Ctrl+Shift+H) lub wyjścia ostatnio uruchomionego polecenia (Ctrl+Shift+G) za pomocą pagera systemowego. To ostatnie jest szczególnie przydatne. Tak wiele razy uruchamiałem jakąś komendę i dopiero po fakcie stwierdzałem, że należało użyć pagera... Integracja z pagerem to coś, czego nie wiedziałem, że potrzebuję, ale pokochałem od razu. A w sytuacjach, kiedy skaczę między kolejnymi komendami (gdzie wcześniej używałem wyszukiwania), bardzo przydatne są też skróty Ctrl+Shift+Z / Ctrl+Shift+X (poprzedni/następny prompt)

Problemy z vimem

Przewijanie w vimie powodowało czasem występowanie "dziur" na końcu wierszy. Problem był wywołany przez różnicę w implementacji atrybutu, którego vim używa do szybkiego wierszy, a można go rozwiązać przez taką wstawkę do vimrc:

let &t_ut=''

Zauważyłem też, że nie mogę użyć Ctrl+6 w vimie (alternative file). Działało tylko mniej wygodne Ctrl+^. Pomogło następujące obejście w ~/.config/kitty/kitty.conf:

map ctrl+shift+6 send_text ctrl+6
map ctrl+6 send_text ctrl+6

Zbyt ciemne kolory

W każdym innym terminalu atrybuty bold i bright są łączone w jeden. Co za tym idzie, wszystkie pogrubione litery (np. prompt basha i menusy w mc) są wyświetlane jako jasne. Przyczyny tego są głównie historyczne, tylko AIX oferował osobny atrybut do rozjaśniania tekstu. Autor Kitty uważa stare zachowanie za zwyczajny błąd i nie pozwala na zmianę tego zachowania za pomocą opcji (istnieje fork z tą opcją, ale wygląda na porzucony, i nie udało mi się przenieść zmian do aktualnej wersji Kitty). Byłem przyzwyczajony do starych, jaśniejszych kolorów. Mogłem albo zmienić przyzwyczajenia albo zedytować kolory. Zdecydowałem się na to drugie. Zamiast zrobić to samym configu Kitty i rozjaśnić zbyt wiele, postanowiłem zedytować ustawienia prompta basha. W Gentoo kolory prompta znajdują się w /etc/bash/bashrc i są ustawiane przez następujący kod:

	if [[ ${EUID} == 0 ]] ; then
		PS1+='\[\033[01;31m\]\h\[\033[01;34m\] \w \$\[\033[00m\] '
	else
		PS1+='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\] '
	fi

Dodanie atrybutu jasności sprowadza się do zmiany escape codes z ;3x na ;9x, krótko mówiąc w ten sposób:

	if [[ ${EUID} == 0 ]] ; then
		PS1+='\[\033[01;91m\]\h\[\033[01;94m\] \w \$\[\033[00m\] '
	else
		PS1+='\[\033[01;92m\]\u@\h\[\033[01;94m\] \w \$\[\033[00m\] '
	fi

Oszczędzę wam szczegółów edycji motywu Midnight Commandera, bo używam własnego skleconego przed laty. Powiem tylko tyle, że mc obsługuje od jakiegoś czasu definiowanie kolorów jako RGB, więc zmiana kolorów na jaśniejsze była wyjątkowo prosta.

Błędne kolory w sesjach SSH

Zauważyłem też zupełnie błędne kolory przy używaniu SSH. Problem wynikał z tego, że zdalnie nie były dostępne odpowiednie pliki terminfo, które są lokalnie instalowane przez Kitty. Można to obejść używając ssh kitten, ale zdecydowałem się po prostu wymusić inną zmienną TERM w ~/.ssh/config:

SetEnv TERM=xterm

Kopiowanie do schowka

Jedna rzecz, w której Kitty początkowo wypada gorzej niż Konsole, to obsługa schowka. Nie ma menu kontekstowego, do którego przywykłem, ale udało mi się znaleźć coś, co dla mnie działa wystarczająco dobrze: włączyłem copy_on_select (by zaznaczenie kopiowało do schowka), a do potrójnego prawokliku przypisałem skopiowanie wyjścia wybranej komendy. Dodatkowo podwójny prawoklik przypisałem do swojego skryptu uruchamiającego wyszukiwanie w Google. Na koniec przypisałem kopiowanie ze schowka pod shift+insert. Razem opcje prezentują się następująco w kitty.conf:

mouse_map right triplepress ungrabbed mouse_select_command_output
mouse_map right doublepress ungrabbed pass_selection_to_program google-search.sh
copy_on_select yes
map shift+insert paste_from_clipboard

Ścieżka po otwarciu nowej karty

Po przypisaniu komendy new_tab_with_cwd do skrótu klawiszowego zauważyłem, że Kitty zachowuje się inaczej w doborze katalogu roboczego niż Konsole. Dla przykładu: gdy miałem uruchomiony skrypt Basha, który zmienia katalog, nowa karta jest otwierana właśnie ze zmienioną ścieżką, a nie tą sprzed uruchomienia skryptu. Może nawet i ma to sens, ale kłóci się z moją pamięcią mięśniową. Próbowałem więc zmienić komendę na launch --type=tab --cwd=oldest, ale to też nie było to, czego szukałem. Aż przypadkiem odkryłem, że w Kitty 0.25 dodano jeszcze opcję ostatniej raportowanej ścieżki, czyli launch --type=tab --cwd=last_reported i robi ona dokładnie to, czego bym oczekiwał.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *