- はじめに -
//------------------------
追記 2018/06/22:
以下の通り、config.jsonはサポートされなくなり、xonshrcになりました。
WARNING! old style configuration (/Users/xxx/.config/xonsh/config.json) is no longer supported. Please migrate to xonshrc.
xonshrcは以下にまとめました
vaaaaaanquish.hatenablog.com
//------------------------
この記事は、Xonsh Advent Calendar 2017 - Qiita 21日目の記事です。
xonshには.xonshrcに加えて、staticなjson形式のconfigファイルで設定するパラメータがある。
本記事では、config.jsonの書き方について記載する。
xonshrcについては以下
vaaaaaanquish.hatenablog.com
- config.jsonとは -
config.jsonはデフォルトでは ~/.config/xonsh/config.json に配置する。
より正確なPathは $XONSH_CONFIG_DIR/config.json である。
このファイルは、xonshrcより前に読み込まれ、外部シェルからのデータロードや、xonshrc内でも採用されるような重要な環境変数の設定、xontribの記載などを行うものである。
以下参考
http://xon.sh/xonshconfig.html
- configを書く -
現状keyとして読み込まれるのは、env、xontribs、foreign_shellsの3つ。
ここに書いておくと良い点も含めて下記に示す。
env
xonshrcファイルでも設定できるけど環境変数。
静的なjsonファイルというだけなので、現状xonshとしてenv設定出来てメリットがあるのは以下くらいか。
{ "env": { "XONSH_DEBUG": 1, "FOREIGN_ALIASES_OVERRIDE": True } }
XONSH_DEBUGでデバッグ設定しておけば、xonshrc等のデバッグができる。
FOREIGN_ALIASES_OVERRIDEは、外部のShellのエイリアスを優先するかどうか。
Examples等では$EDITORとか設定してるけど、xonshrcの方が管理しやすい良い気がする。
Windowsなら$ALLUSERSPROFILEにrcファイルへのPathを書いておいてもよい。
Python系ならjupyterやpyenvへのPathなんかはここで書いても良い(気がする)。
xontribs
xontribsは、xonshの拡張であるxontribをlistで書いておくところ。
xonshrcでは以下のようにloadしないといけない所、パッケージ名をlistで書くだけになるのでちょっと楽。
xontrib load hoge
Sampleで自分のやつ。
名前を書いておくだけでよい。
{ "xontribs": ["z","docker_tabcomplete","fzf-widgets"] }
xontribは以下で書いたので参考に
vaaaaaanquish.hatenablog.com
foreign_shells
foreign_shellsでは、subprocessで呼び出す外部シェルの情報が記述できる。
より正確には、以下で呼び出されるforeign_shell_data()内で、subprocessとしてshellが一度起動され、該当shellのenvとaliasを読み込んでくる。
xonsh/foreign_shells.py at adcd20f72fcbe6962533cb3ad78a4a9ec396e150 · xonsh/xonsh · GitHub
list形式でdictを設定していく。dict中のkeyとしては以下が設定できる。
http://xon.sh/xonshconfig.html#foreign-shells
{ "foreign_shells":[ { # 起動したいshell "shell": "/bin/zsh", # 対話起動するか(しなくてもenv読み込めるshellなら不要) "interactive": True, # ユーザとしてlogin必要か "login": False, # 起動shellにおけるenvコマンド "envcmd": "env", # 起動shellにおけるaliasコマンド "aliascmd": "alias", # 起動するshellの引数(str) "extra_args": [], # 手動で起動shellにenv設定するためにdict "currenv": {}, # 例外を安全に処理するか(Falseにするとraiseされる) "safe": True, # 色々読み込む前後にshellで実行させるコマンド "prevcmd": "", "postcmd": "", # 呼び出すshellのrcみたいなもん(以下参考に) # https://github.com/xonsh/xonsh/blob/adcd20f72fcbe6962533cb3ad78a4a9ec396e150/xonsh/foreign_shells.py#L33:title "funcscmd": "", # 呼び出したshellでsourceするファイル "sourcer": "", # 該当shellでスクリプトを実行する時のコマンド "runcmd": "", # 該当shellでexit-on-errorを設定するためのコマンド # "set -e"や"if errorlevel 1 exit 1" "seterrprevcmd": "", "seterrpostcmd": "" } ] }
foreign_shellsで既に設定しているshell(xonshに乗り換える前に使っていた色々)をそのまま流用できたりする。
おわりに
あんまり書く機会がないかも知れないが、configについて記述した。
env、xontribs、foreign_shellsしか今の所書く事はないがxonshrcがちょっと簡略化される所がメリットか。
ひとまずアドベントカレンダー埋めた感じです。