本文を読み飛ばす

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
宣伝: