aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/tmux/.local/bin
diff options
context:
space:
mode:
authorToby Vincent <tobyv13@gmail.com>2022-09-13 19:20:46 -0500
committerToby Vincent <tobyv13@gmail.com>2022-09-13 19:20:46 -0500
commit9f95db30e53a8b044c69ed9f2d108560ce463326 (patch)
tree51ea30cf2d182ffd72c9c924c0fabce8d6f4ba13 /tmux/.local/bin
parent38ce6abdf0018539d16d65483a2610d1c7ba8e9a (diff)
feat(tmux): sessionizer now creates dir from prompt if non selected
Diffstat (limited to 'tmux/.local/bin')
-rwxr-xr-xtmux/.local/bin/tmux-sessionizer58
-rwxr-xr-xtmux/.local/bin/tmux-sessions5
2 files changed, 42 insertions, 21 deletions
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