From 7ad9868c208a8aafd6564dc12182de1c091c8ffc Mon Sep 17 00:00:00 2001 From: Daniel Lundin Date: Fri, 5 Apr 2024 20:30:39 +0200 Subject: [PATCH] tmux: gnome-style app-shortcuts for switching panes --- .tmux.conf | 30 +++++++++++------------------- bin/tmux-hx-helper | 45 +++++++++++++++++++++++---------------------- bin/tmux-shortcut | 20 ++++++++++++++++++++ 3 files changed, 54 insertions(+), 41 deletions(-) create mode 100755 bin/tmux-shortcut diff --git a/.tmux.conf b/.tmux.conf index 9432e59..7f504be 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -39,16 +39,17 @@ bind -n M-k copy-mode \; send-keys -X previous-prompt -o \; send-keys -X cursor- bind -n M-j copy-mode \; send-keys -X previous-prompt -o \; send-keys -X cursor-up bind -n M-Up select-pane -U bind -n M-Down select-pane -D -bind -n M-1 select-window -t 42 -bind -n M-2 select-window -t 2 -bind -n M-3 select-window -t 3 -bind -n M-4 select-window -t 4 -bind -n M-5 select-window -t 5 -bind -n M-6 select-window -t 6 -bind -n M-7 select-window -t 7 -bind -n M-8 select-window -t 8 -bind -n M-9 select-window -t 9 -bind -n M-0 select-window -t 10 +bind -n M-1 run-shell -b "tmux-shortcut 1 helix" +bind -n M-2 run-shell -b "tmux-shortcut 2" +bind -n M-3 run-shell -b "tmux-shortcut 3" +bind -n M-4 run-shell -b "tmux-shortcut 4" +bind -n M-5 run-shell -b "tmux-shortcut 5" +bind -n M-6 run-shell -b "tmux-shortcut 6" +bind -n M-7 run-shell -b "tmux-shortcut 7" +bind -n M-8 run-shell -b "tmux-shortcut 8" +bind -n M-9 run-shell -b "tmux-shortcut 9" +bind -n M-0 run-shell -b "tmux-shortcut 10" + bind -n M-m send-keys -t 9 q C-u "clear; tmux clear-history -t 9" C-m C-p C-p C-p C-m bind C-o send-keys C-o bind r source-file ~/.tmux.conf @@ -85,14 +86,5 @@ set -g set-titles on set -g set-titles-string "#H - #T" new -s0 -n 1 -new-window -n 2 -new-window -n 3 -new-window -n 4 -new-window -n 5 -new-window -n 6 -new-window -n 7 -new-window -n 8 -new-window -n 9 -new-window -n 0 # vim:set ft=tmux: diff --git a/bin/tmux-hx-helper b/bin/tmux-hx-helper index 56bdb95..de73970 100755 --- a/bin/tmux-hx-helper +++ b/bin/tmux-hx-helper @@ -18,26 +18,27 @@ fi fre --store_name "edit-history" --add "$_file" -(tmux select-window -t helix && -tmux send-keys -t helix Escape && -tmux send-keys -t helix ":open ${_file}" Enter) || tmux new-window -t 42 -n helix \ - -e "AR=$AR" \ - -e "AS=$AS" \ - -e "BUILD_COMMAND=$BUILD_COMMAND" \ - -e "CC=$CC" \ - -e "CXX=$CXX" \ - -e "GOFLAGS=$GOFLAGS" \ - -e "GOPACKAGESDRIVER=$GOPACKAGESDRIVER" \ - -e "LC_ALL=$LC_ALL" \ - -e "LD=$LD" \ - -e "NM=$NM" \ - -e "NM=$NM" \ - -e "OBJCOPY=$OBJCOPY" \ - -e "OBJDUMP=$OBJDUMP" \ - -e "PATH=$PATH" \ - -e "RANLIB=$RANLIB" \ - -e "READELF=$READELF" \ - -e "RUST_SRC_PATH=$RUST_SRC_PATH" \ - -e "SIZE=$SIZE" \ - -e "STRIP=$STRIP" \ +tmux-shortcut 1 env \ + "AR=$AR" \ + "AS=$AS" \ + "BUILD_COMMAND=$BUILD_COMMAND" \ + "CC=$CC" \ + "CXX=$CXX" \ + "GOFLAGS=$GOFLAGS" \ + "GOPACKAGESDRIVER=$GOPACKAGESDRIVER" \ + "LC_ALL=$LC_ALL" \ + "LD=$LD" \ + "NM=$NM" \ + "NM=$NM" \ + "OBJCOPY=$OBJCOPY" \ + "OBJDUMP=$OBJDUMP" \ + "PATH=$PATH" \ + "RANLIB=$RANLIB" \ + "READELF=$READELF" \ + "RUST_SRC_PATH=$RUST_SRC_PATH" \ + "SIZE=$SIZE" \ + "STRIP=$STRIP" \ helix "${_file}" +sleep 0.1 +tmux send-keys Escape && + tmux send-keys ":open ${_file}" Enter diff --git a/bin/tmux-shortcut b/bin/tmux-shortcut new file mode 100755 index 0000000..536ab54 --- /dev/null +++ b/bin/tmux-shortcut @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +set -eo pipefail + +nr="@app-${1}" +shift + +pane="$(tmux show -vg ${nr} || true)" +if [[ -n "${pane}" ]] && tmux has-session -t "${pane}" ; then + if tmux list-panes -F "#{pane_id}" | grep "^${pane}\$" >>/dev/null ; then + # Pane is on this window. Focus it and exit. + exec tmux select-pane -t "${pane}" + fi +else + # App pane does not exist, so create a new window. + pane=$(tmux new-window -d -P -F '#{pane_id}' "$@") + tmux set -g "${nr}" "${pane}" +fi + +# Swap active pane for app +tmux swap-pane -s "${pane}"