Dopieszczanie Zellij-a

Ostatnio “przeprosiłem się” z Zellije-m. Idea multiplekserów zawsze do mnie trafiała… ale nie na tyle, żebym przebijał się przez konfigurację Tmux-a ;) .

Jakie problemy te narzędzia rozwiązują? Umożliwiają uruchomienie równolegle kilku sesji terminalowych i ułatwiają nawigację między nimi. Można z ich pomocą podzielić ekran terminalowy na kilka części, utworzyć odpowiednik zakładek - i pracować z kilkoma aplikacjami równolegle. Ponadto taką sesję da się zapisać - i odtworzyć później. Tym samym można kontynuować pracę później (następnego dnia etc) niemal dokładnie w miejscu w którym się skończyło. Nic nie stoi na przeszkodzie żeby multiplekser działał na zdalnym serwerze - można więc delegować pracę na urządzenie do którego mamy dostęp z wielu miejsc.

Zellij jest dobrym startem w tym temacie - wyposażony jest w paski z podpowiedziami pomocne dla początkujących. Ponadto ma dość sensowne ustawienia domyślne.

Ma jednak trochę wad:

… co w praktyce oznacza, że bez wprowadzenia modyfikacji szanse na używanie go przeze mnie na co dzień były nikłe.

Domyślnie to narzędzie wygląda mniej więcej tak:

Skróty klawiszowe

Dużą część problemów z skrótami klawiszowymi rozwiązuje włączenie trybu w którym ustawienia można zmienić dopiero po odblokowaniu. Można to zrobić bezpośrednio z panelu aplikacji:

Odpowiada też za to wpis w pliku konfiguracyjnym (domyślnie zlokalizowanym w $HOME/.config/zellij/config.kdl) default_mode "locked".

Pozostałe konflikty można łatwo wyeliminować edytując właśnie ten plik.

Na tym etapie dodałem też od razu w sekcji keybinds, locked skrót umożliwiający rozciągnięcie wybranego sektora na pełen ekran:

bind "Ctrl Shift f" { ToggleFocusFullscreen; SwitchToMode "locked"; }

Optymalizacje układu

Początkowo chciałem po prostu skorzystać z wbudowanego trybu kompaktowego. Wtedy jest tylko jeden pasek na dole… ale z mocno obciętą funkcjonalnością i nadal ze zbędną informację o tym, że właśnie używany jest Zellij ;) .

Zdecydowałem się stworzyć własny szablon wykorzystujący 2 pluginy:

https://github.com/dj95/zjstatus

https://github.com/b0o/zjstatus-hints

Pliki z nimi umieściłem w $HOME/.config/zellij/plugins/ i dodałem ich automatyczne ładowanie w config.kdl.

Drażniła mnie też nieco ramka wokół głównego sektora w którym zamierzam mieć uruchomionego przede wszystkim Neovim-a. Stąd też w obecnym, roboczym szablonie, jest ona wyłączona (zostawiłem ja dla reszty sekcji) i kod do niego wygląda tak:

layout {
  pane split_direction="vertical" {
    pane size="75%" name="code" borderless=true
    pane name="terminal"
  }

  pane size=1 borderless=true {
    plugin location="zjstatus" {
      format_left "#[fg=black,bg=#707070,bold]{mode}"
      format_center "#[bg=#303030]{pipe_zjstatus_hints}"
      format_right "#[bg=#303030]{tabs}#[fg=white,bg=#303030] {session} "
      format_space "#[bg=#303030]"

      border_enabled "false"

      mode_normal        "#[fg=black,bg=#98c379] {name} #[fg=#98c379,bg=#303030]"
      mode_locked        "#[fg=black,bg=#707070,bold]  {name} #[fg=#707070,bg=#303030] unlock with ctrl+g"
      mode_resize        "#[fg=black,bg=#89B4FA] {name} "
      mode_pane          "#[fg=black,bg=#89B4FA] {name} "
      mode_tab           "#[fg=black,bg=#89B4FA] {name} "
      mode_scroll        "#[fg=black,bg=#89B4FA] {name} "
      mode_enter_search  "#[fg=black,bg=#89B4FA] {name} "
      mode_search        "#[fg=black,bg=#89B4FA] {name} "
      mode_rename_tab    "#[fg=black,bg=#89B4FA] {name} "
      mode_rename_pane   "#[fg=black,bg=#89B4FA] {name} "
      mode_session       "#[fg=black,bg=#89B4FA] {name} "
      mode_move          "#[fg=black,bg=#89B4FA] {name} "
      mode_prompt        "#[fg=black,bg=#89B4FA] {name} "
      mode_tmux          "#[fg=black,bg=#ffc387] {name} "

      pipe_zjstatus_hints_format "#[bg=#303030]{output}"

      tab_normal   "#[fg=#6C7086,bg=#303030] {name} "
      tab_active   "#[fg=#9399B2,bg=#303030,bold] {name} "
    }
  }

}

Co daje następujący wynik :) :

Zellij with Neovim after tuning

Być może jeszcze coś pozmieniam - ale już jestem w miarę zadowolony i zachęcony do tworzenia kolejnych szablonów pod konkretne zadania.

Edytowałem też używany schemat kolorystyczny, tak aby te ramki, które zostały były mniej nachalne.

Codzienna praca

Na tę chwilę uruchamiam Zellij-a przede wszystkim wtedy gdy programuję. Przydaje się wtedy uruchomienie poprzez:

zellij -l welcome

W tym powitalnym ekranie można sobie skonfigurować nową sesję (wybrać szablon oraz folder roboczy!), lub przywrócić wcześniejszą.

Multiplekser okazał się też bardzo przydatny gdy ćwiczyłem Docker Swarm-a - bardzo ułatwiał podgląd węzłów wchodzących w skład klastra.

Ciekawym zastosowaniem, którym na pewno będę się jeszcze bawił jest uruchomieniem go na domowym serwerze. Posiadanie jednego urządzenia do pracy z którym się łączę i mam od razu wszystko skonfigurowane i pozostawione dokładnie w miejscu w którym skończyłem pracę to ciekawe doświadczenie. Zwłaszcza, że dostęp do niego mam właściwie wszędzie dzięki Netbird-owi / Tailscale.

Obrazek(-ki):

Ayush Kumar, @Unsplash

Przemek Jeske