ターミナルセッションのウィンドウタブにラベルを付けたいのですが。 OSXのiterm2でzshellを使用しています。ターミナルでウィンドウタブのラベルを動的に変更することは可能ですか?
zsh
に次のように入力して、iTerm2のウィンドウタイトルを設定できます。
_echo -ne "\e]1;this is the title\a"
_
自動化したい場合は、現在の時刻または作業ディレクトリの場合、zsh
構成ファイルを編集して、precmd()
関数のタイトルを次のように設定します。 _$PWD
_。
_echo -ne "\e]1;$PWD\a"
_
precmd
関数については、セクション_man zshmisc
_の_SPECIAL FUNCTIONS
_を参照してください。
私のために働くもの:
echo -e "\033];this is the title\007"
Mac OSXとiTermを使用している場合、iTerm2 ::
Zshを使用している場合は、設定を編集する必要があります。通常、設定は~/.zshrc
ファイルにあります。設定を追加または編集して、この行が存在することを確認します。
DISABLE_AUTO_TITLE="true"
ITermの便利な機能の1つは、ウィンドウタイトルとタブタイトルを個別に設定できることです。
# $1 = type; 0 - both, 1 - tab, 2 - title
# rest = text
setTerminalText () {
# echo works in bash & zsh
local mode=$1 ; shift
echo -ne "\033]$mode;$@\007"
}
stt_both () { setTerminalText 0 $@; }
stt_tab () { setTerminalText 1 $@; }
stt_title () { setTerminalText 2 $@; }
これにより、接続しているホストをどのウィンドウですぐに確認でき、各タブのウィンドウタイトルにユーザーとCWDが表示されます。
precmd
がうまくいきます。ただし、一部のoh-my-zshテーマはウィンドウタイトルを混乱させます。セットする PR_TITLEBAR
を空の文字列に修正します。
set-window-title() {
# /Users/clessg/projects/dotfiles -> ~/p/dotfiles
window_title="\e]0;${${PWD/#"$HOME"/~}/projects/p}\a"
echo -ne "$window_title"
}
PR_TITLEBAR=''
set-window-title
add-zsh-hook precmd set-window-title
また、環境設定->外観のiTerm2のタブ設定をいじることもお勧めします。
おそらくiterm2バージョン(3.3.3)に対しては、答えがどれもうまくいかなかったようです。
私はこれを見つけました: https://Gist.github.com/phette23/5270658#gistcomment-3020766
基本的に、他のすべての回答で述べられていることは何でも行うことができますが、Preferences > Profiles > General > Title -> Name (Job)
も設定する必要があります
これでうまくいきました。
export Prompt_COMMAND='echo -ne "\033]0;$PWD\007"'
を~/.bash_profile
に追加するとうまくいきました。
受け入れられた回答は長い間私にとってはうまくいきましたが、現在iTerm2の最新バージョンでは壊れています。私が見つけた回避策は、Python APIを有効にし、次のようにタブ名を設定するスクリプトを作成することでした:
#!/usr/bin/env python3.7
import argparse
import iterm2
def get_args():
parser = argparse.ArgumentParser(description='Set the tab name')
parser.add_argument('name')
return parser.parse_args()
ARGS = get_args()
async def main(connection):
app = await iterm2.async_get_app(connection)
window = app.current_terminal_window
if window is not None:
tab = window.current_tab
await tab.async_set_title(ARGS.name)
else:
# You can view this message in the script console.
print("No current window")
iterm2.run_until_complete(main)
「tab_name.py」として保存され、次のように呼び出されます:
~/Library/ApplicationSupport/iTerm2/iterm2env/versions/*/bin/python3 ~/Library/ApplicationSupport/iTerm2/Scripts/tab_name.py "new tab name"
受け入れられた答えほどナイスでもエレガントでもありませんが、機能します。