- はじめに -
xonshで作業をしているとつい時間を忘れてしまうので、時間を表示してやるメモ。
POWERLINEで良くみるやつをxonshrcで実装。
- timeを表示する -
コンソール上の右側に表示するにはこんな感じ
from time import strftime $RIGHT_PROMPT = lambda: strftime('[ %H:%M:%S ]')
xonshrcを書く - Stimulatorでも書いた通り、コマンド前は$PROMPT、右は$RIGHT_PROMPT、下にバー状に出しておきたければ$BOTTOM_TOOLBARに関数を突っ込む。
上記をlambda使わずに書くと以下
文字列を返す関数をPROMPT系の変数に突っ込んでおけば、キー入力時に評価される。
from time import strftime def get_time(): def prompt(): return strftime('[ %H:%M:%S ]') return prompt $RIGHT_PROMPT = get_time() $UPDATE_PROMPT_ON_KEYPRESS=True
文字色や背景色などのフォーマットは、xonshのprompt-toolkitの普通のやつと似たような感じにすれば良い。
- datetimeを出す -
右にあっても見なさそうだったのでPROMPTに出す。
from datetime import datetime as dt prompt = " {INTENSE_RED}{user}{INTENSE_GREEN}@{INTENSE_BLUE}{hostname}{INTENSE_YELLOW} [ {cwd} ] {GREEN}$ " $PROMPT = lambda: dt.now().strftime('[ %Y-%m-%d %H:%M:%S ]') + prompt $UPDATE_PROMPT_ON_KEYPRESS=True
キー入力ごとに更新される。
以下参考
https://github.com/xonsh/xonsh/blob/adcd20f72fcbe6962533cb3ad78a4a9ec396e150/xonsh/readline_shell.py
https://github.com/xonsh/xonsh/blob/72f3bc0d089ea91d4e5288bb1c44ebfbe81db43e/xonsh/ptk/shell.py
- おわりに -
xonshにはそもそもxonsh.tools内に時間表記のメソッドがあったりするが、イマイチだったのでtime、datetimeを入れてきた方が早そう。
(Tools (xonsh.tools) — xonsh 0.8.3 documentation)
リアルタイムに表示したくなって数日試したけど、あんまり良い方法がなかったのでアイデアが欲しい。
xonshではなくprompt-toolkit側を見ないとダメそうなのでちょっとしんどそう