]> git.rmz.io Git - dotfiles.git/blobdiff - zsh/plugins/screen/screen.plugin.zsh
merge oh-my-zsh into subdir
[dotfiles.git] / zsh / plugins / screen / screen.plugin.zsh
diff --git a/zsh/plugins/screen/screen.plugin.zsh b/zsh/plugins/screen/screen.plugin.zsh
new file mode 100644 (file)
index 0000000..7009e7a
--- /dev/null
@@ -0,0 +1,54 @@
+# if using GNU screen, let the zsh tell screen what the title and hardstatus
+# of the tab window should be.
+if [[ "$TERM" == screen* ]]; then
+  if [[ $_GET_PATH == '' ]]; then
+    _GET_PATH='echo $PWD | sed "s/^\/Users\//~/;s/^\/home\//~/;s/^~$USER/~/"'
+  fi
+  if [[ $_GET_HOST == '' ]]; then
+    _GET_HOST='echo $HOST | sed "s/\..*//"'
+  fi
+
+  # use the current user as the prefix of the current tab title 
+  TAB_TITLE_PREFIX='"`'$_GET_HOST'`:`'$_GET_PATH' | sed "s:..*/::"`$PROMPT_CHAR"'
+  # when at the shell prompt, show a truncated version of the current path (with
+  # standard ~ replacement) as the rest of the title.
+  TAB_TITLE_PROMPT='$SHELL:t'
+  # when running a command, show the title of the command as the rest of the
+  # title (truncate to drop the path to the command)
+  TAB_TITLE_EXEC='$cmd[1]:t'
+
+  # use the current path (with standard ~ replacement) in square brackets as the
+  # prefix of the tab window hardstatus.
+  TAB_HARDSTATUS_PREFIX='"[`'$_GET_PATH'`] "'
+  # when at the shell prompt, use the shell name (truncated to remove the path to
+  # the shell) as the rest of the title
+  TAB_HARDSTATUS_PROMPT='$SHELL:t'
+  # when running a command, show the command name and arguments as the rest of
+  # the title
+  TAB_HARDSTATUS_EXEC='$cmd'
+
+  # tell GNU screen what the tab window title ($1) and the hardstatus($2) should be
+  function screen_set()
+  {
+    # set the tab window title (%t) for screen
+    print -nR $'\033k'$1$'\033'\\\
+
+    # set hardstatus of tab window (%h) for screen
+    print -nR $'\033]0;'$2$'\a'
+  }
+  # called by zsh before executing a command
+  function preexec()
+  {
+    local -a cmd; cmd=(${(z)1}) # the command string
+    eval "tab_title=$TAB_TITLE_PREFIX:$TAB_TITLE_EXEC"
+    eval "tab_hardstatus=$TAB_HARDSTATUS_PREFIX:$TAB_HARDSTATUS_EXEC"
+    screen_set $tab_title $tab_hardstatus
+  }
+  # called by zsh before showing the prompt
+  function precmd()
+  {
+    eval "tab_title=$TAB_TITLE_PREFIX:$TAB_TITLE_PROMPT"
+    eval "tab_hardstatus=$TAB_HARDSTATUS_PREFIX:$TAB_HARDSTATUS_PROMPT"
+    screen_set $tab_title $tab_hardstatus
+  }
+fi
\ No newline at end of file