转换 bash 脚本以在 zsh 中使用

转换 bash 脚本以在 zsh 中使用

以下 bash 脚本发布在此线作为在 DWM(X 窗口管理器)中设置 ST(终端窗口)标题的一种方法。虽然通过 .bashrc 添加此段具有所需的结果,但我希望能够在 zsh 中使用它。

set_title(){
   local cmd=$BASH_COMMAND
   case $cmd in
   fg) cmd=$(jobs %); cmd=${cmd##"${cmd%  *}  "};;
   fg\ *|%*) cmd=$(jobs "${cmd#fg }"); cmd=${cmd##"${cmd%  *}  "};;
   esac
   printf '\e]2;%s\e\\' "${TERM%%-*} ${cmd//[$'\e\a']/#}"
}
trap set_title DEBUG

我已经尝试在 .zshrc 中将其称为 bash 脚本,但这不会按预期更改窗口标题。任何将其转换为在 zsh 中使用的帮助将不胜感激。

答案1

可能是这样的:

TRAPDEBUG() {
  [[ $zsh_eval_context[1] = toplevel ]] || return
  local cmd=$ZSH_DEBUG_CMD
  case $cmd in
    (fg)
      cmd=$jobtexts[${(k)jobstates[(r)*:+:*]}];;
    (('fg '|%)<->)
      cmd=$jobtexts[${(M)cmd%%<->}];;
  esac
  printf '\e]2;%s\e\\' "${TERM%%-*} ${cmd//[$'\e\a']/#}"
}

相关内容