ターミナルのプロンプトにflutterのchannelを表示する
注意: 実用性は低いです
サンプル
モチベーション
- flutterのweb supportを使うにはbeta channelを使う必要があるが、他のweb supportの必要のないプロジェクトではmasterを使いたい
- masterとbetaをすぐ判別がつくようにしたい
Building a web application with Flutter - Flutter より
As of 1.12, Flutter has early support for running web applications, but you need to be running the beta channel of Flutter at present. If you experience a problem that hasn’t yet been reported, please file an issue and make sure that “web” appears in the title.
zshrcのカスタマイズ
環境
- macOS catalina 10.15.4
- zsh
- git-prompt(なくてもOK)
git-promptを使っている場合
~/.zshrc
# flutterのパスを追加 export PATH=/Users/xxx/development/flutter/bin:$PATH # flutter channelの結果から、現在のchannel名を取得 (* stable なら、stableを取得) flutter_channel=$(flutter channel | tr '\n' ':' | sed -E "s/.+\* ([^:]+):.*/\1/") # gitのプロンプト設定 export GIT_PS1_SHOWCOLORHINTS=1 export GIT_PS1_SHOWDIRTYSTATE=1 git_prompt_sh=/usr/local/etc/bash_completion.d/git-prompt.sh if [ -e $git_prompt_sh ]; then source $git_prompt_sh # $flutter_channelをプロンプトに表示 precmd () { __git_ps1 "%F{cyan}(flutter: $flutter_channel)%f " "%F{yellow}%c%f $ " " (%s) " } fi
git-promptを使わない場合
git-promptを使っているのでわかりにくいですが、内部ではzshのPROMPT変数?を使うことで実現しているため、git-promptを使っていない人はPROMPT(bashの場合はPS1だったはず)を使うことで同様に使うことができます。
~/.zshrc
# flutterのパスを追加 export PATH=/Users/xxx/development/flutter/bin:$PATH # flutter channelの結果から、現在のchannel名を取得 (* stable なら、stableを取得) flutter_channel=$(flutter channel | tr '\n' ':' | sed -E "s/.+\* ([^:]+):.*/\1/") # プロンプト設定 PROMPT="%F{cyan}(flutter: $flutter_channel) $ "
簡単な解説
$ flutter channelの出力は以下のようになります。
Flutter channels: beta dev master * stable
この * stable
のように *
がついているのが現在のchannelになるので、sedにより正規表現で「stable」だけを抜き出します。それだけです。
この方法の問題点
- シェルの起動が重くなる
- $ flutter channel が重いため、コマンド実行ごとに channel 表示を切り替える用途には待ち時間の問題上、使えない
- $ flutter channel stable などを使った際、表示は切り替わらず、シェルを再起動する必要あり
- しかも切り替えたあとすぐは余計な出力が出るためにsedの処理に1分ほど時間がかかる
- しかし、Android Studioで他のプロジェクトを開いた際にはシェルが再起動されるので実用上あまり問題はない