summaryrefslogtreecommitdiff
path: root/plugins/terminalapp/terminalapp.plugin.zsh
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/terminalapp/terminalapp.plugin.zsh')
-rw-r--r--plugins/terminalapp/terminalapp.plugin.zsh39
1 files changed, 39 insertions, 0 deletions
diff --git a/plugins/terminalapp/terminalapp.plugin.zsh b/plugins/terminalapp/terminalapp.plugin.zsh
new file mode 100644
index 000000000..6e47ee188
--- /dev/null
+++ b/plugins/terminalapp/terminalapp.plugin.zsh
@@ -0,0 +1,39 @@
+# Set Apple Terminal.app resume directory
+# based on this answer: http://superuser.com/a/315029
+# 2012-10-26: (javageek) Changed code using the updated answer
+
+# Tell the terminal about the working directory whenever it changes.
+if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]] && [[ -z "$INSIDE_EMACS" ]]; then
+ update_terminal_cwd() {
+ # Identify the directory using a "file:" scheme URL, including
+ # the host name to disambiguate local vs. remote paths.
+
+ # Percent-encode the pathname.
+ local URL_PATH=''
+ {
+ # Use LANG=C to process text byte-by-byte.
+ local i ch hexch LANG=C
+ for ((i = 1; i <= ${#PWD}; ++i)); do
+ ch="$PWD[i]"
+ if [[ "$ch" =~ [/._~A-Za-z0-9-] ]]; then
+ URL_PATH+="$ch"
+ else
+ hexch=$(printf "%02X" "'$ch")
+ URL_PATH+="%$hexch"
+ fi
+ done
+ }
+
+ local PWD_URL="file://$HOST$URL_PATH"
+ #echo "$PWD_URL" # testing
+ printf '\e]7;%s\a' "$PWD_URL"
+ }
+
+ # Register the function so it is called whenever the working
+ # directory changes.
+ autoload add-zsh-hook
+ add-zsh-hook precmd update_terminal_cwd
+
+ # Tell the terminal about the initial directory.
+ update_terminal_cwd
+fi