diff --git a/TARGETS.sh b/TARGETS.sh index d407d0b..4a25b62 100644 --- a/TARGETS.sh +++ b/TARGETS.sh @@ -1,6 +1,6 @@ declare -r -A TARGETS=( ["colors"]=".config/terminal-colors.d" - ["tmux"]=".config/tmux .tmux .config/systemd/user/tmux.service .local/bin/tmux_start_session.sh .local/bin/tmux_attach_session.sh .local/bin/tmux_choose_session.sh" + ["tmux"]=".config/tmux .tmux .config/systemd/user/tmux.service .local/bin/tmux_start_session.sh .local/bin/tmux_attach_session.sh .local/bin/tmux_choose_session.sh .local/bin/tmux_kill_session.sh" ["bash"]=".config/bash .bashrc .profile %tmux %colors" ["zsh"]="%bash .config/zsh .zshenv .inputrc" ["alacritty"]=".config/alacritty" diff --git a/home/user/.config/tmux/mappings.conf b/home/user/.config/tmux/mappings.conf index 325a52f..f9368a1 100644 --- a/home/user/.config/tmux/mappings.conf +++ b/home/user/.config/tmux/mappings.conf @@ -190,5 +190,6 @@ bind -T copy-mode-vi WheelDownPane select-pane \; send-keys -X -N 2 scroll-down # Session managment -bind s display-popup -EE -w 80% -h 80% -T 'Attach existing session' '~/.local/bin/tmux_choose_session.sh' -bind a display-popup -EE -w 80% -h 80% -T 'Start new session' '~/.local/bin/tmux_start_session.sh' \ No newline at end of file +bind s display-popup -EE -w 80% -h 80% -T 'Attach session' '~/.local/bin/tmux_attach_session.sh' +bind a display-popup -EE -w 80% -h 80% -T 'Start session' '~/.local/bin/tmux_start_session.sh' +bind f display-popup -EE -w 80% -h 80% -T 'Kill session' '~/.local/bin/tmux_kill_session.sh' \ No newline at end of file diff --git a/home/user/.local/bin/tmux_choose_session.sh b/home/user/.local/bin/tmux_attach_session.sh similarity index 96% rename from home/user/.local/bin/tmux_choose_session.sh rename to home/user/.local/bin/tmux_attach_session.sh index 2dc80b5..2611d5a 100755 --- a/home/user/.local/bin/tmux_choose_session.sh +++ b/home/user/.local/bin/tmux_attach_session.sh @@ -5,7 +5,7 @@ export FZF_DEFAULT_OPTS="\ --cycle \ --pointer='' \ --marker='+' \ ---color='pointer:green' \ +--color='pointer:blue,prompt:blue' \ --bind \ ctrl-/:toggle-preview,\ ctrl-p:preview-up,\ diff --git a/home/user/.local/bin/tmux_kill_session.sh b/home/user/.local/bin/tmux_kill_session.sh new file mode 100755 index 0000000..3faa21f --- /dev/null +++ b/home/user/.local/bin/tmux_kill_session.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + + +export FZF_DEFAULT_OPTS="\ +--cycle \ +--pointer='' \ +--marker='+' \ +--color='pointer:red,prompt:red' \ +--bind \ +ctrl-/:toggle-preview,\ +ctrl-p:preview-up,\ +ctrl-n:preview-down,\ +ctrl-u:clear-query,\ +ctrl-q:toggle+down\ +" + +declare current_session +current_session="$(tmux display-message -p '#S')" +readonly current_session + +declare last_session +last_session="$(tmux display-message -p '#{client_last_session}')" +readonly last_session + +declare sessions +sessions="$(tmux list-session -F '#S#{?session_attached, (attached) , }')" +sessions="$(echo "${sessions}" | sed "s/^${current_session} /${current_session} (current) /")" +sessions="$(echo "${sessions}" | sed "s/^${last_session} /${last_session} (last) /")" +readonly sessions + + +declare sessions_to_kill +sessions_to_kill="$(echo "${sessions}" | fzf -m --preview-window 70%,follow --preview 'tmux capture-pane -p -e -t {1}' | awk '{printf $1"\n"}')" +readonly sessions_to_kill + +if [[ -n "${sessions_to_kill}" ]]; then + echo "${sessions_to_kill}" | xargs -n 1 tmux kill-session -t +fi \ No newline at end of file diff --git a/home/user/.local/bin/tmux_start_session.sh b/home/user/.local/bin/tmux_start_session.sh index 7343670..6e9c81d 100755 --- a/home/user/.local/bin/tmux_start_session.sh +++ b/home/user/.local/bin/tmux_start_session.sh @@ -5,7 +5,7 @@ export FZF_DEFAULT_OPTS="\ --cycle \ --pointer='' \ --marker='+' \ ---color='pointer:green' \ +--color='pointer:green,prompt:green' \ --bind \ ctrl-/:toggle-preview,\ ctrl-p:preview-up,\