From 9f95db30e53a8b044c69ed9f2d108560ce463326 Mon Sep 17 00:00:00 2001 From: Toby Vincent Date: Tue, 13 Sep 2022 19:20:46 -0500 Subject: feat(tmux): sessionizer now creates dir from prompt if non selected --- tmux/.local/bin/tmux-sessionizer | 58 +++++++++++++++++++++++++++------------- tmux/.local/bin/tmux-sessions | 5 ++-- 2 files changed, 42 insertions(+), 21 deletions(-) (limited to 'tmux/.local') diff --git a/tmux/.local/bin/tmux-sessionizer b/tmux/.local/bin/tmux-sessionizer index 927fb41..e433371 100755 --- a/tmux/.local/bin/tmux-sessionizer +++ b/tmux/.local/bin/tmux-sessionizer @@ -1,33 +1,53 @@ #!/bin/sh # shellcheck disable=2016 -if [ "$#" -eq 1 ]; then - selected="$1" -else - selected=$( - find ~/src ~/.dotfiles -maxdepth 2 -type d,f -path '*/.git' -printf '%h\n' -prune | - xargs -I{} sh -c 'stat -c %Y:"{}" $XDG_DATA_HOME/nvim/sessions/$(echo "{}" | sed "s|/|%|g").vim || - (git -C "{}" rev-parse HEAD &>/dev/null && - git -C "{}" --no-pager log -1 --all --format="%at:{}" 2>/dev/null || - stat -c %Y:"{}" "{}"/.git)' | sort -r | cut -d':' -f2- | - fzf-tmux -p -- -d/ --with-nth -2.. --preview="exa --tree --icons --git-ignore {}" - ) +get_timestamp() { + session_file="$XDG_DATA_HOME/nvim/sessions/$(echo "$1" | sed "s|/|%|g").vim" + if [ -f "$session_file" ]; then + stat -c %Y:"$1" "$session_file" + elif git -C "$1" rev-parse HEAD >/dev/null 2>&1; then + git -C "$1" --no-pager log -1 --all --format="%at:$1" 2>/dev/null + elif [ -e "$1/.git" ]; then + stat -c %Y:"$1" "$1"/.git + else + stat -c %Y:"$1" "$1" + fi +} + +if [ "$#" -eq 0 ]; then + PROJECT_DIR="$HOME/src" + DIRS="$(get_timestamp "$HOME/.dotfiles")" + + for entry in "$PROJECT_DIR"/*; do + if [ -d "$entry" ]; then + DIRS="$DIRS $(get_timestamp "$entry")" + fi + done + + output="$(echo "$DIRS" | tr -s '[:space:]' '\n' | sort -r | cut -d':' -f2- | + fzf-tmux -p -- --print-query -d/ --with-nth -2.. --preview="$FZF_PREVIEW_COMMAND {}")" + + set -f + set -- "$output" + set -- "${1:-$2}" + set -f fi -if [ -z "$selected" ]; then +if [ -z "$1" ]; then exit 0 fi -selected_name=$(basename "$selected" | tr . _) -tmux_running=$(pgrep tmux) +mkdir -p "$1" + +name=$(basename "$1" | tr . _) -if [ -z "$TMUX" ] && [ -z "$tmux_running" ]; then - tmux new-session -s "$selected_name" -c "$selected" +if [ -z "$TMUX" ] && pgrep tmux; then + tmux new-session -s "$name" -c "$1" exit 0 fi -if ! tmux has-session -t="$selected_name" 2>/dev/null; then - tmux new-session -ds "$selected_name" -c "$selected" +if ! tmux has-session -t="$name" 2>/dev/null; then + tmux new-session -ds "$name" -c "$1" fi -tmux switch-client -t "$selected_name" +tmux switch-client -t "$name" diff --git a/tmux/.local/bin/tmux-sessions b/tmux/.local/bin/tmux-sessions index ac44580..9449b11 100755 --- a/tmux/.local/bin/tmux-sessions +++ b/tmux/.local/bin/tmux-sessions @@ -5,6 +5,7 @@ # shellcheck disable=2016 session=$(tmux list-sessions -F '#{session_last_attached}:#{session_name}' 2>/dev/null | sort -r | cut -d':' -f2 | sed "/$(tmux list-panes -F '#S')/d" | - fzf-tmux -p -- --preview-window=right,80% --preview='tmux capture-pane -ep -t {}' \ - --bind 'ctrl-d:execute(tmux kill-session -t{})+reload(tmux list-sessions -F "#{session_name}" 2>/dev/null | sed "/$(tmux list-panes -F "#S")/d" )') && + fzf-tmux -p -- --select-1 --exit-0 --preview-window=right,80% --preview='tmux capture-pane -ep -t {}' \ + --bind 'ctrl-q:execute(tmux kill-session -t{})+reload(tmux list-sessions -F "#{session_name}" 2>/dev/null | + sed "/$(tmux list-panes -F "#S")/d" )') && tmux $change -t "$session" || exit 0 -- cgit v1.2.3-70-g09d2