stは非常にシンプルなターミナルソフトウェアですが、私にとっては 1 つの機能が欠けています。それはマルチプレクサ(上下左右にウィンドウを分割する)です。他のターミナルソフトウェアには提供されていますが、例えば wezterm です。
一方、tmux はちょうどこの機能を提供することができます:
tmux split-window # 下に分割
tmux split-window -h # 右に分割
そして、st でショートカットキーを設定できます:
{{< block type="details" >}}
/* 分割 */
static char *sp[] = { "/bin/sh", "-c", "tmux split-window","externalpipe", NULL };
static char *sph[] = { "/bin/sh", "-c", "tmux split-window -h","externalpipe", NULL };
/* ウィンドウの切り替え */
static char *gd[] = { "/bin/sh", "-c", "tmux select-pane -D","externalpipe", NULL };
static char *gu[] = { "/bin/sh", "-c", "tmux select-pane -U","externalpipe", NULL };
static char *gr[] = { "/bin/sh", "-c", "tmux select-pane -R","externalpipe", NULL };
static char *gl[] = { "/bin/sh", "-c", "tmux select-pane -L","externalpipe", NULL };
/* ウィンドウサイズの調整 */
static char *rd[] = { "/bin/sh", "-c", "tmux resize-pane -D 2","externalpipe", NULL };
static char *ru[] = { "/bin/sh", "-c", "tmux resize-pane -U 2","externalpipe", NULL };
static char *rr[] = { "/bin/sh", "-c", "tmux resize-pane -R 2","externalpipe", NULL };
static char *rl[] = { "/bin/sh", "-c", "tmux resize-pane -L 2","externalpipe", NULL };
static Shortcut shortcuts[] = {
{ ControlMask, XK_minus, externalpipe, {.v = sp } },
{ ControlMask, XK_backslash, externalpipe, {.v = sph } },
{ MODKEY, XK_Up, externalpipe, {.v = gu} },
{ MODKEY, XK_Down, externalpipe, {.v = gd} },
{ MODKEY, XK_Left, externalpipe, {.v = gl} },
{ MODKEY, XK_Right, externalpipe, {.v = gr} },
{ ControlMask, XK_Up, externalpipe, {.v = ru} },
{ ControlMask, XK_Down, externalpipe, {.v = rd} },
{ ControlMask, XK_Left, externalpipe, {.v = rl} },
{ ControlMask, XK_Right, externalpipe, {.v = rr} },
};
{{< /block >}}
最後に、tmux のステータスラインを非表示にします。私は pane の機能だけが必要なので、他のものは邪魔です。
set -g status off
私のブランチ: https://github.com/fzdwx/st