轉換 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']/#}"
}

相關內容