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

関連情報