summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/termsupport.zsh43
-rw-r--r--plugins/terminalapp/terminalapp.plugin.zsh39
2 files changed, 33 insertions, 49 deletions
diff --git a/lib/termsupport.zsh b/lib/termsupport.zsh
index e1c2e2f93..da74dfdba 100644
--- a/lib/termsupport.zsh
+++ b/lib/termsupport.zsh
@@ -53,14 +53,37 @@ precmd_functions+=(omz_termsupport_precmd)
preexec_functions+=(omz_termsupport_preexec)
-# Runs before showing the prompt, to update the current directory in Terminal.app
-function omz_termsupport_cwd {
- # Notify Terminal.app of current directory using undocumented OSC sequence
- # found in OS X 10.9 and 10.10's /etc/bashrc
- if [[ $TERM_PROGRAM == Apple_Terminal ]] && [[ -z $INSIDE_EMACS ]]; then
- local PWD_URL="file://$HOSTNAME${PWD// /%20}"
- printf '\e]7;%s\a' "$PWD_URL"
- fi
-}
+# Keep Apple Terminal.app's current working directory updated
+# Based on this answer: http://superuser.com/a/315029
+
+if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]] && [[ -z "$INSIDE_EMACS" ]]; then
+ # Emits the control sequence to notify Terminal.app of the cwd
+ function update_terminalapp_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"
+ printf '\e]7;%s\a' "$PWD_URL"
+ }
-precmd_functions+=(omz_termsupport_cwd)
+ # Use a precmd hook instead of a chpwd hook to avoid contaminating output
+ precmd_functions+=(update_terminalapp_cwd)
+ # Run once to get initial cwd set
+ update_terminalapp_cwd
+fi
diff --git a/plugins/terminalapp/terminalapp.plugin.zsh b/plugins/terminalapp/terminalapp.plugin.zsh
deleted file mode 100644
index 6e47ee188..000000000
--- a/plugins/terminalapp/terminalapp.plugin.zsh
+++ /dev/null
@@ -1,39 +0,0 @@
-# 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