msys: minttyをtmuxで起動する(2)
先に作った(1) ですが オプション "-mingw64" と "-msys" が効かなくて困ったので修正
変更したのはファイル3つ。 msys2_tmux.cmdは起動部分をこんな感じに:
echo %MSYSTEM% > c:\app\msys64\tmp\msystem start "%CONTITLE%" "%WD%mintty" -c "%USERPROFILE%\.minttyrc" -i /msys2.ico %WD%bash.exe %USERPROFILE%\tmuxwrapper.sh
環境変数を使うのではなく、ファイルで情報を渡すようにしている。
というのもtmuxが環境変数を他の session からも引き継いでいるようで 一度、mingw32 を起動すると minwg64 や msys が開けなくなってしまう。
MSYSTEMは、 /etc/profile で使われているので、 MSYSTEMをファイルから読込む仕掛けも作る。
/etc/profile の冒頭にこんな感じのスクリプトを追加:
f=/tmp/msystem if [ -f $f ]; then MSYSTEM=$(echo -n "$(cat $f)" ) rm -f $f fi unset f
さらに new-window 時にもファイルを作らないといけないので、 こんなスクリプトを作る。
まずは、 .tmux.conf:
bind C-o new-window -n sh '$HOME/tmuxwrapper-newwindow.sh' bind o new-window -n sh '$HOME/tmuxwrapper-newwindow.sh'
tmuxwrapper-newwindow.sh はこんな感じ:
#! /usr/bin/bash echo $MSYSTEM > /tmp/msystem /usr/bin/bash --login
ちなみに .tmux.confでこれは動かなかった...:
bind C-o new-window 'echo $MSYSTEM > /tmp/msystem; bash --login'
こんな感じで実験した:
set _MSYSTEM=aa start "%CONTITLE%" "%WD%mintty" -c "c:\Users\shinji\.minttyrc" -i /msys2.ico /usr/bin/tmux.exe -f "%USERPROFILE%\.tmux.conf" -c "/usr/bin/bash --login"
.bash_profile:
echo $_MSYSTEM
結果は、 _MSYSTEMが空になった...
理由はよくわからないです。
あと、 /tmp/tmux-???? というファイルも消さないと 環境変数を引き継いでしまうことがわかった。
ファイルで引き継ぐことにしたのでこれはどうでもいいのだが...
copy & paste が動かない
こうやって起動した tmux ですが、 PATH などの環境変数がちゃんと動いていないみたいで copy 用の次の指定が動きませんでした:
bind-key -t vi-copy y copy-pipe "cat | clip" bind-key -t vi-copy Enter copy-pipe "cat > /dev/clipboard"
こうすれば動きます。:
bind-key -t vi-copy y copy-pipe "/usr/bin/cat | clip" bind-key -t vi-copy Enter copy-pipe "/usr/bin/cat > /dev/clipboard"
ちなみに調べてて、 clip コマンドが /dev/clipboard よりも マイナーながらも別に問題なく動くので例として書いてみました。
コメント
Comments powered by Disqus