Browse Source

Merge pull request #1376 from javageek/master

Updated code
Robby Russell 12 years ago
parent
commit
d5eddc653f
1 changed files with 35 additions and 7 deletions
  1. 35 7
      plugins/terminalapp/terminalapp.plugin.zsh

+ 35 - 7
plugins/terminalapp/terminalapp.plugin.zsh

@@ -1,11 +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
 
-function chpwd {
-  local SEARCH=' '
-  local REPLACE='%20'
-  local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
-  printf '\e]7;%s\a' "$PWD_URL"
-}
+# 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.
 
-chpwd
+        # 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 chpwd update_terminal_cwd
+
+    # Tell the terminal about the initial directory.
+    update_terminal_cwd
+fi