From 104041a018dc9a3eb74f93815192dba4c9386e1a Mon Sep 17 00:00:00 2001
From: Peat Bakke <peat@peat.org>
Date: Thu, 19 Oct 2023 02:49:38 -0700
Subject: [PATCH] feat(tmux): add `tds` alias for directory sessions (#11987)

---
 plugins/tmux/README.md       |  1 +
 plugins/tmux/tmux.plugin.zsh | 13 +++++++++++++
 2 files changed, 14 insertions(+)

diff --git a/plugins/tmux/README.md b/plugins/tmux/README.md
index 0f8473da..b4516ef2 100644
--- a/plugins/tmux/README.md
+++ b/plugins/tmux/README.md
@@ -25,6 +25,7 @@ The plugin also supports the following:
 | `tkss`     | tmux kill-session -t       | Terminate named running tmux session                     |
 | `tmux`     | `_zsh_tmux_plugin_run`     | Start a new tmux session                                 |
 | `tmuxconf` | `$EDITOR $ZSH_TMUX_CONFIG` | Open .tmux.conf file with an editor                      |
+| `tds`      | `_tmux_directory_session`  | Creates or attaches to a session for the current path    |
 
 ## Configuration Variables
 
diff --git a/plugins/tmux/tmux.plugin.zsh b/plugins/tmux/tmux.plugin.zsh
index 6ed91c44..72cdd481 100644
--- a/plugins/tmux/tmux.plugin.zsh
+++ b/plugins/tmux/tmux.plugin.zsh
@@ -108,6 +108,19 @@ compdef _tmux _zsh_tmux_plugin_run
 # Alias tmux to our wrapper function.
 alias tmux=_zsh_tmux_plugin_run
 
+function _tmux_directory_session() {
+  # current directory without leading path
+  local dir=${PWD##*/}
+  # md5 hash for the full working directory path
+  local md5=$(printf '%s' "$PWD" | md5sum | cut -d  ' ' -f 1)
+  # human friendly unique session name for this directory
+  local session_name="${dir}-${md5:0:6}"
+  # create or attach to the session
+  tmux new -As "$session_name"
+}
+
+alias tds=_tmux_directory_session
+
 # Autostart if not already in tmux and enabled.
 if [[ -z "$TMUX" && "$ZSH_TMUX_AUTOSTART" == "true" && -z "$INSIDE_EMACS" && -z "$EMACS" && -z "$VIM" && -z "$INTELLIJ_ENVIRONMENT_READER" ]]; then
   # Actually don't autostart if we already did and multiple autostarts are disabled.