<msys2, tmux, powerline> 結局、少し自作。
msys2
上のtmux
でpowerline
をやりたい。
いろいろ試行の結果、本家powerline
のpython
でぐりぐり動かすのは、 どもmsys2
ではうまくなかった。
デーモンがうまく動いてないようで、python
が呼ばれるたびに、CPU
がブンブンうなるし、、、
次善の策として、tmux-powerline
があったが、いろいろ使えないモジュールがあり、IPアドレス
や天気
もいらないので、
結局、tmux.conf
に直接コードを埋め込むことにした。
やったこと。
その1) フォントをインストール。
DejaVuSansMono
をイントール。
その2) 下記のコードをtmux.conf
に書き書き。
# My powerline S_LEFT_BOLD="" S_LEFT_THIN="" S_RIGHT_BOLD="" S_RIGHT_THIN="" set-option -g status on set-option -g status-interval 1 set-option -g status-left-length 60 set-option -g status-right-length 90 set -g status-left "#{?client_prefix,#[fg=colour232]#[bg=colour170],#[fg=colour232]#[bg=colour245]} + #{?client_prefix,#[fg=colour170]#[bg=colour240],#[fg=colour245]#[bg=colour240]}${S_RIGHT_BOLD}#[fg=colour245,bg=colour240] #H #[default]${S_RIGHT_BOLD}" set -g status-right "#[fg=colour240,bg=colour235]${S_LEFT_BOLD}#[fg=colour245,bg=colour240] %a ${S_LEFT_THIN} %Y-%m-%d ${S_LEFT_THIN} %H:%M #[default]" set-window-option -g window-status-format "#[fg=colour235, bg=colour240]${S_RIGHT_BOLD}#[fg=colour245, bg=colour240] #I.#P ${S_RIGHT_THIN} #W #[fg=colour240, bg=colour235]${S_RIGHT_BOLD}" set-window-option -g window-status-current-format "#[fg=colour235, bg=colour170]${S_RIGHT_BOLD}#[fg=colour255, bg=colour170] #I.#P ${S_RIGHT_THIN} #W #[fg=colour170, bg=colour235]${S_RIGHT_BOLD}" set -g status-fg colour240 set -g status-bg colour235
例のpowerline
のかっこいい、三角のやつは、tmux-powerline
からコピーした。
<powerline, msys2> msys2でpowerlineをやる。
ずっとやってみたかった、mys2
でpowerline
をやる。
やってみた。
ググると、pip install powerline-status
でインストールすればいいらしい。
インストール後、さっそく起動。 powerline-deamon -q
でゴー。
エラーがでた。。。
うーんと思って調査したら、どうも、anaconda
さんpython
では、fcntl
とかいうモジュールがない。
が、msys2
でインストールできる/usr/bin/python
にはある。
つうことで、anaconda python
をオフしないといけんらしい。
> powerline-daemon -q Traceback (most recent call last): File "C:/Anaconda3/Scripts/powerline-daemon", line 9, in <module> import fcntl ModuleNotFoundError: No module named 'fcntl' > winpty python Python 3.6.6 |Anaconda, Inc.| (default, Jun 28 2018, 11:27:44) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import fcntl Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'fcntl' >>> quit() > /usr/bin/python Python 3.7.1 (default, Oct 30 2018, 05:59:02) [GCC 7.3.0] on msys Type "help", "copyright", "credits" or "license" for more information. >>> import fcntl >>> quit()
と、いうことで、anaconda python
をPATH
から抜いて、msys2
デフォルトの/usr/bin/python
を有効にする。
で、Powerline
をインストール。
>pip install powerline-status
でだ。
Powerline
ちゅうのは、矢印とかのかっこいい部分は、専用のフォントをいれないといけん。
ぐぐったら、このフォントがよさげだったか、次の理由により、Powerline
からフォントを持ってきた。
理由。
msys2
でtmux
をPowerline
化するには、mintty
のターミナルのフォント設定のLocale設定で、`C
を選ばないといけない。
やんないと、改行がうまくなく、ぐちゃぐちゃになる。ここ参考。
で、C
を選択すると、Ritcty
さんは、今度は、zsh
でかっこよくならない。
どうも、ja_JP
とC
でカッコよいやつのフォントのコードが異なってるっぽい。。。
なので、Powerline
本家から、フォントを持ってきて、インストール。
今回は、DejaVuSansMono
をイントールしてみた。
フォントサンプル。
https://github.com/powerline/fonts/blob/master/samples/All.md
インストールは、
Windows
ボタン+R
でファイル名を指定して実行
のダイアログボックスを出し、
control
と入力して、コントロールパネル
を開く。
で、フォントを選んで、.ttf
となってるファイルを入れこむ。
tmux.conf
の末尾に下記追加して、起動。
run-shell "powerline-daemon -q" source ~/.local/lib/python3.7/site-packages/powerline/bindings/tmux/powerline.conf
で、成功。 カッコよくなった。
ただ、1つ問題が。。。
zsh
+tmux
だと、zsh
のPowerline
のブランチの表示部分がずれる、、、
しかも、ls
だのpwd
だのコマンドが遅い。
なんかいちいち、Windows
のAntivirus Service
がブーンって動くせいで、遅い。
なんとかなるのかな、、、
マニュアル。
参考。
qiita.com
<pyinstaller, Python, WSH> Pythonスクリプトから実行ファイル(exe)を作る。
Python
スクリプトから実行ファイルexe
を作る、変換する。
pyinstaller
ちゅうのでできるらしい。
試してみた。
インストールは、pip
さんで。conda
さんにはなかった。
例のCalculatorをwin32com
で、制御するスクリプトを変換。
スクリプト。
#!/usr/bin/env python # -*- coding: utf-8 -*- import win32api as WScript import win32com.client if __name__ == '__main__': WshShell = win32com.client.Dispatch("WScript.Shell") WshShell.Run("calc") WScript.Sleep(100) WshShell.AppActivate("Calculator") WScript.Sleep(100) WshShell.SendKeys("1{+}", 0) WScript.Sleep(500) WshShell.SendKeys("2") WScript.Sleep(500) WshShell.SendKeys("~") WScript.Sleep(500) WshShell.SendKeys("*3") WScript.Sleep(500) WshShell.SendKeys("~") WScript.Sleep(2500)
で、変換。
>pyinstaller -F -w calc.py
で、なにやらいろいろ呪文が並ぶ。
で、calc\dist
というフォルダの下に、calc.exe
を発見。
できたっぽい。
で、クリック。
が、、問題発生
止まらない、、、
どんどんcalc.exe
プロセスが増殖して、やりたい放題。
暴走。。。
しょーが無しに、Windows強制シャットダウン。
あかんがや、、、まったく。。。
その後、sys.exit()
を最後に付ければ、暴走しないことを確認。
sys.exit()
は必須。
お世話になったところ。
<WSH, win32com, Python> WSHとwin32comの関係
WSH(Windows Script Host)
と、win32com
を眺めてみた。
win32com
はどうやら、おそらく、WSH
とほぼ同じ。
WScript
でCalc
を起動して、キーを送るスクリプト。
https://msdn.microsoft.com/ja-jp/library/cc364423.aspx
set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "calc" WScript.Sleep 100 WshShell.AppActivate "Calculator" WScript.Sleep 100 WshShell.SendKeys "1{+}" WScript.Sleep 500 WshShell.SendKeys "2" WScript.Sleep 500 WshShell.SendKeys "~" WScript.Sleep 500 WshShell.SendKeys "*3" WScript.Sleep 500 WshShell.SendKeys "~" WScript.Sleep 2500
これのpython/win32com
版。
#!/usr/bin/env python # -*- coding: utf-8 -*- import win32api as WScript import win32com.client if __name__ == '__main__': WshShell = win32com.client.Dispatch("WScript.Shell") WshShell.Run("calc") WScript.Sleep(100) WshShell.AppActivate("Calculator") WScript.Sleep(100) WshShell.SendKeys("1{+}", 0) WScript.Sleep(500) WshShell.SendKeys("2") WScript.Sleep(500) WshShell.SendKeys("~") WScript.Sleep(500) WshShell.SendKeys("*3") WScript.Sleep(500) WshShell.SendKeys("~") WScript.Sleep(2500)
動作はまったく同じ。
ちなみに、WScriptをsubprocess
で呼び出しても同じ。
#!/usr/bin/env python # -*- coding: utf-8 -*- import subprocess if __name__ == '__main__': subprocess.run("calc.vbs", shell=True)
なるほど。。。
と、いうことで、win32com
での制御は、基本WScript
どおり。
下記、マイクロソフトのところで、調べものすれば、結構思い通りに制御できそう。
参考。大変役にたちました。