2009年06月02日

Debian GNU/Linux 5.0 + dosemuでVZ(5)

Gnome ←→ Dosemu クリップボードでのデータ受け渡し


Ikuboh さんの clip.def を改変させていただき、クリップボードでのデータ受け渡しマクロをでっち上げました。

データを受け渡しを仲介する一時ファイルとして clip.tmp を作成。

dosemu 側から見たパスは、d:\clip.tmp で、
Linux 側から見たパスは、~/clip.tmp ですが、実体は同一のファイルです。


Gnome → Dosemu のコピーは楽勝です。
VZのコマンドラインで

c:\Unix xsel | nkf > d:\clip.tmp

と実行したあとに clip.tmp の中味を、いま開いているファイルのカーソル位置へ読み込めばいい。


問題は Dosemu → Gnome へのコピーです。

いろいろ試行錯誤したものの、現在は、

(1) VZでブロック指定した部分を d:\clip.tmp へセーブ。
(2) 左 [Windows] キーで開くように設定している Gnome のメインメニューに登録した下記のシェルスクリプトを実行。

という2アクションです(打鍵にすると、VZで ^PC の後、Gnome 側で [左 WIN] → [↓] → [Enter] )。

~/clipscript
----------------------------------------
#!/bin/bash
cat ~/clip.tmp | nkf -dw | xsel -i -b
----------------------------------------


・・・


以下は蛇足です。


Dosemu → Gnome へのコピーについてもVZ内だけで完結させたかったので、いろいろもがいてみたものの・・・

VZでブロック指定した部分を d:\clip.tmp へセーブした後、 VZのコマンドラインから、

c:\Unix ~/clipscript

とシェルスクリプトを実行する方法で、しばらく試行錯誤していました。

----------------------------------------
#!/bin/bash
cat ~/clip.tmp | nkf -dw | xsel -i -b > err.txt 2>&1
echo "#!/bin/bash" > killxsel
ps | grep -i ' xsel$' | sed -e "s/^ \([0-9]\+\).\+$/kill -17 \1/" >> killxsel
chmod +x ~/killxsel
~/killxsel
----------------------------------------

clip.tmp へ保存したテキストを、nkf で 文字コードは UTF-8 で改行は 0ah へ変換、xsel でクリップボードへ転送。

これだけではVZのコマンドラインへ制御が戻ってきませんが、Gnome 側でテキストをペーストすることは可能です。
最初は dosemu がハングアップしてるのかと思ったものの、Gnome のシステムモニタで xsel のプロセスを終了してやると、VZへ制御が戻って来ることがわかった。

ということで、3行目以降を考えたわけです。

ps コマンドでプロセスの一覧を出力し、xsel の行を grep で抽出した後、sed で「kill xxxx」(xxxx は数字) というコマンドへ変換したものをシェルスクリプトのファイルとして別につくり、実行可能属性へ変更したうえで、実行する。

見事にVZのコマンドラインへ制御が戻ったときは、「やったね!」と思ったものですが・・・
この方法では Gnome 側でペースト出来ません。

結論から言うと、Windows のクリップボードとは違い、X-Window のセレクションという仕組みは、ペーストする操作が起こったときに、コピー元とペースト先の仲立ちをするだけらしい (^^;

よって、上のように xsel のプロセスを終了させてしまうと、その後では Gnome 側ではペーストが出来なくなってしまう、ということのようです。
posted by - あじゃ - at 02:08| Comment(0) | TrackBack(0) | Vz Editor DOS DOS窓 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。