do_su_0805's blog

dairyquestions は typo です。

ghq look 廃止に伴う PS1 変更スクリプトを供養する

あとで Quyo | つづろう、モノの思い出 にも供養します

先日 ghqで仕事用と趣味用でディレクトリ分けしてリポジトリ管理しやすくなりました | おそらくはそれさえも平凡な日々 で発表されていましたが、ghq version 0.99.0 より、 ghq look コマンドが廃止となりました。

廃止の経緯などは上述の id:Songmu さんの記事に書かれていますが、僕もどちらかというと「普段使いに ghq look を使う」人間でした。 様々な「こうしたほうがいい」「王道」「回避策」などがありますが、ここではその辺りには触れずに、 ghq look 利用時に「 ghq look で開いたサブシェルかどうか」を判定していた方法を供養しておきます。

やってたこと

いたってシンプルなのですが、 ghq look で開かれたサブシェルの時は、環境変数 GHQ_LOOKghq.root 以下の移動先パスになります。 それを検知して、ghq look 配下時には PS1 先頭に [g] と出すようにしていました。

if [ "X${GHQ_LOOK}" != "X" ];then
  ghq_flag="[g]"
fi
PS1='\[\e[31;40m\]${ghq_flag}\[\e[m\]\[\e[36;40;4m\][bash] \u@\h:\W\[\e[m\]\[\e[31;40m\]$(__git_ps1 " (%s)") \[\e[m    \]\$ '

実際に使うとこんな感じ

[bash] do-su-0805@hostname:~ $ ghq get --look do-su-0805/repoA
    exists /Users/do-su-0805/.ghq/src/github.com/do-su-0805/repoA
[g][bash] do-su-0805@hostname:repoA (master) $

ある意味「サブシェルによって環境変数が引き継がれないこと」を便利に使っていたので、 ghq get --look を継続して使うかは悩みどころですが、まぁいい感じにしていきたいですね。

ちなみに

id:astj さんも同様のことをされていたらしいというのは調べていて見つけました。 対する id:Songmu さんの応答で ghq get --look で同等の動作をすることを知りました。