メモ:Xming経由でWindows側のクリップボードを使う

インストールしたandLinuxWindows側の日本語を含む文字列をコピーして、andLinux上のemacsに貼り付けると文字化けするので困っている。この問題の発生原因は、emacsの設定、Xmingの設定、Windowsクリップボードの仕組みのどれか一つかこれらの複合と予想される。実際に試していないけど、役にたつと思われる情報を見つけたのでメモ。

2ch:Windows用の無料Xサーバが欲しいより抜粋。

384 :名無しさん@お腹いっぱい。:2007/07/06(金) 00:10:19
    こないだまでWindows XPとcygwinのXで幸せに暮らしていたのですが、
    職場のPCが Windows Vista になったのに伴って、Xサーバをxmingに変更したところ、
    Windowsでクリップボードにコピーした日本語の文字列をXで表示しているemacsにペーストすると、
    漢字コードがUTFになってしまい、困っています。
    原因や対応方法があれば教えていただけないでしょうか。 

385 :名無しさん@お腹いっぱい。:2007/07/06(金) 00:30:00
    xmingの場合はどうだか知らないが、
    Mac OS XのX11でも似たような現象があって、
    M-x set-clipboard-coding-system
    で、sjis-macにすると、ちゃんとペースト出来ます。
    Windowsの場合はutf-8-dosかなあ。
    試してないからわからないけど。


386 :名無しさん@お腹いっぱい。:2007/07/07(土) 01:25:02
    ロケールの設定と-nounicodeclipboardを使うって手もあるがVistaでは試したこと無い。

387 :384:2007/07/07(土) 10:11:09
    >>385
    utf-8-dos以外にもいろいろ試してみましたが、
    emacsでペーストするとjisのwebページがちゃんと表示されなかったときのように$B....と化けちゃいます。

    >>386
    nounicodeclipboardというのがあるんですね。
    是非試してみたいです。

388 :384:2007/07/07(土) 11:55:11
    自宅でも試せるよう環境を作ってみました。

    >>386
    -nounicodeclipboard 試してみましたが、
    なんだか分からない表示になってしまいました。
    set-clipboard-coding-system と組み合わせても試してみましたが、
    表示は変わるものの、正常にはペーストできませんでした。

    -nounicodeclipboardとしたときにクリップボードに記録される文字列の漢字コードはどのように決まるのか分かっていないのが致命的な気がしています。
    vistaでない環境のことでも結構ですので教えていただけないでしょうか。

389 :384:2007/07/07(土) 11:58:05
    > -nounicodeclipboardとしたときにクリップボードに記録される文字列の漢字コードは
    > どのように決まるのか分かっていないのが致命的な気がしています。

    あ、-nounicodeclipboard していない状態で、
    set-clipboard-coding-system を utf-8-* にしてうまくいかない理由も分かっていません。
    こちらもご存知の方がいらっしゃったらご教示いただけないでしょうか。

390 :名無しさん@お腹いっぱい。:2007/07/07(土) 18:52:35
    通常はWindowsのクリップボードからUnicodeでテキストを取ってきて、UTF-8に変換したあと
    CTEXTに変換してXのセレクションに渡す。
    XlibがUTF8からCTEXTに変換するときに、日本語にも中国語にも含まれてる文字を日本語として
    CTEXTにしたり中国語としてCTEXTにしたりするんでごちゃまぜの文字列になる場合がある。

    -nounicodeclipboardしてると、クリップボードからOEM文字列で取ってきて、x localeを
    使ってCTEXTに変換してX側に渡す。
    こっちでは、SJISからCTEXTの変換になるから、中国語は混ざらない。
    なので、-nounicodeclipboardしてLANG=ja_JP.SJIS XWin …ってやるとうまくいく場合もある。

    …だったと思う。だいぶ前のことなんで間違ってるかも。

391 :384:2007/07/07(土) 21:02:06
    >>390
    私の力不足のため勘違いしているかもしれませんが、たぶん理解できました。
    ありがとうございます。

    実際、Windowsで環境変数LANGにja_JP.SJISを設定してみましたところ、
    バッチリ問題は解決しました。
    しかし、Windowsの環境変数としてLANGを設定してしまうと、
    別のアプリケーションで何か弊害が出ないか心配です。
    cygwinでしたら389様がお示しのような記述ができるのですが、
    xmingの場合はどのようにすればいいのでしょうか。
    (変数LANGをsetしてxmingを実行するようにショートカットが書ければいいんだとは思うのですが…)

    いつまでもお手数をおかけしてしまって申し訳ございませんが、
    ご教示いただければ幸いです。

392 :名無しさん@お腹いっぱい。:2007/07/10(火) 01:10:25
    ショートカットは知らないけどバッチファイルなら書けるんじゃないか

393 :384:2007/07/10(火) 07:18:04
    >>392
    すでにXの話題じゃありませんね、すみません。

    結局、バッチファイルにLANGのsetとxming起動の2行を書き、
    問題なく動作することを確認して、
    バッチファイル起動のウィンドウが表示されないよう、
    それをvbsから実行するようにして解決しました。
    もう少し力があればvbsで全部やっちゃえるのかな、などと思いながらも、
    私にはこれくらいが分相応かと納得しています。

    Windows ←→ emacs のコピー&ペーストができるようになって、
    幸せな日々が帰ってきました。
    ありがとうございました。 

emacsvimの情報もあり)のkill-ringをWindowsクリップボードと連携させる

XmingからWindowsクリップボードがうまくつかえないときのトラブルシュート(でも、私の環境では関係なさそう)