Portál AbcLinuxu, 1. května 2025 06:53
Článek předpokládá základní povědomost o práci v terminálu a tmuxu. Na internetu lze nalézt plno článků s úvodem do tmuxu, proto se základům nebudu věnovat a přejdu rovnou k věci. Ovládání tmuxu pomocí klávesových zkratek je rychlý způsob. Problém je v tom, že tmux tak často nemusím ovládat, tudíž zkratky vždycky zapomenu a nějaké procvičování se moc nevyplatí. To je rozdíl například oproti editaci textu pomocí vimu, kde se úsilí věnované naučení zkratek vrátí.
Tmux používám při vývoji aplikací. Například pro jeden projekt je potřeba spustit docker kontejnery, backend server, kompilační smyčku pro frontend a css styly. Pro ulehčení používám tmux skript, kdy jedním příkazem nahodím celé prostředí a vidím všechny výpisy z logů přehledně v panelech v rámci jednoho terminálu. Většinou mi vyhovuje výchozí rozložení, ale třeba jednou do měsíce je potřeba přeskupit panely. Protože jde o situaci která nastává velmi málo tak tu zkratku pro přepnutí vždycky zapomenu a musím hledat v manuálu, což zdržuje.
Tento problém je klasickou ukázkou dilematu mezi příkazovým řádkem a grafickým rozhraním. Klávesové zkratky a CLI jsou mocnější a rychlejší, ale mají časové nároky na počáteční naučení a paměť uživatele. GUI je naopak méně flexibilní a pomalejší, ale člověk zvládne pracovat bez větší počáteční investice nebo pokud daný program používá po delší době. Další častý problém CLI programů je organizace příkazů/argumentů v manuálových stránkách. Ty jsou často seřazeny abecedně, takže je to z logického pohledu přeházené a je těžké si udělat přehled co vlastně všechno program umí.
Ideální je podle mě se snažit zkombinovat to nejlepší z CLI a GUI. Tedy možnost ovládat klávesovými zkratkami a příkazy, ale ať je k dispozici i nějaké interaktivní rozhraní, které dovoluje funkce objevit v rámci programu.
Jako experiment jsou zkusil vytvořit interaktivní nabídku pro ovládání tmuxu. Používám dolní lištu statusu pro zobrazení nabídky a vlastní bindingy pro ovládání.
Menu se zobrazí klávesovou zkratkou podobně jako je pořeba tmux prefix. Jako výchozí jsem zvolil Alt+/
(zkratka pro zobrazení nabídky v Google Docs), ale je možné si nastavit vlastní. Hlavní menu je roztříděné podle logických kategorií - panel, layout, window, session. Po výběru v hlavním menu se zobrazí další menu, kde už jdou vybírat jednotlivé akce. Na screenshotu je vidět menu jako oranžový panel dole:
Například zmáčknu l
a dostanu menu pro práci s layoutem:
Zde zmáčknu například šipku doprava, layout se rozdělí a otevře se další panel napravo od aktuálního.
Následuje seznam výchozích akcí, které pokrývají moje používání tmuxu:
[f]ullscreen [b]reak-off-window [k]ill switch [right] [down] [left] [up]
layout [s]witch [r]otate-panes split [right] [down] [left] [up]
window [s]witch [right]next [left]prev [n]ew [r]ename [m]ove [k]ill
session [n]ew [r]ename [k]ill [l]ock
Výhodou je že i když si člověk nepamatuje klávesové zkratky tak je schopen program ovládat (stačí si pamatovat jednu zkratku pro otevření menu). Dále jsou zkratky zapamatovatelnější a pokročilí uživatelé mohou používat klávesové zkratky bez koukání do menu bez vlivu na rychlost. Pro příklad porovnání různých akcí:
Otevření nového okna:
ctrl+b c
alt+/ w n
(mnemotechnická pomůcka Window New)Horizontální rozdělení layoutu:
ctrl+b %
alt+/ l ->
(Layout split Right)%
je potřeba stisknout se shiftem)Kompletní konfiguraci je možné stáhnout z githubu.
Další varianta která mě napadla by bylo používat jako zkratky pro akce v menu výchozí zkratky tmuxu. Takto by šlo využívat menu, ale člověku by se pomalu vrývaly do paměti výchozí zkratky. Menu nepokrývá velkou část, ale ne celou funkčnost tmuxu. Podělte se v diskuzi pokud zde chybí nějaké často používané funkce, případně další způsoby jak se vypořádat s klávesovými zkratkami.
Jako příklad jsem zvolil tmux, ale podobný přístup by bylo možné aplikovat i pro jiné programy. Domnívám se, že je často schůdnější cesta doplnit grafické interaktivní prvky do CLI programů, než se snažit přidat programovatelnost do čistě grafických aplikací.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.