はてブロ@ama_ch

https://twitter.com/ama_ch

pbcopyで日本語もコピーできるようにする

Mac OS Xの固有コマンドに「pbcopy」というものがあります。
これは

% less hoge.txt | pbcopy

のようにすると、コマンドの実行結果を直接クリップボードに送ることができる優れもののコマンドです。
とても便利なんですが、日本語を含む*1結果をパイプするとコピーしてくれません。


いつも通りグーグル先生に聞いてみたところ、
UTF-8でpbcopyできるようにする - by edvakf in hatena
こちらに対処法が紹介されていました。

# pbcopyで日本語(UTF-8)がコピーできるようになる
#__CF_USER_TEXT_ENCODING=0x1F5:1:14    # 元の値
__CF_USER_TEXT_ENCODING=0x1F5:0x8000100:0x8000100
export __CF_USER_TEXT_ENCODING

これを.bashrcや.zshrcにに書いておけば良いみたいです。念のため、先に「echo $__CF_USER_TEXT_ENCODING」で元の値を確認しておくことをオススメします!

17:30追記

こっちの方が良さそう。

# pbcopyで日本語(UTF-8)がコピーできるようになる
#__CF_USER_TEXT_ENCODING=0x1F5:1:14    # 元の値
__CF_USER_TEXT_ENCODING=0x1F5:0x8000100:14
export __CF_USER_TEXT_ENCODING


__CF_USER_TEXT_ENCODINGの持つ3つの値は、
1個目:おそらくUID

ama-ch% echo $__CF_USER_TEXT_ENCODING                                                                [~]
0x1F5:0x8000100:14
ama-ch% id    # idの参照                                                                       
uid=501(ama-ch) gid=20(staff) groups=20(staff),98(_lpadmin),81(_appserveradm),101(com.apple.sharepoint.group.1),79(_appserverusr),80(admin)

ama-ch% printf "%#x\n" $UID    # UIDを16進数表記                                                        [~]
0x1f5

このように、UIDと一致します。


2個目:エンコーディング
0x08000100がUTF-8を表すらしい。
参考:Terminal.appで日本語をpbcopyできない件、fakeclipで解決したよ - kei-os2007 no life, no Vim - vimグループ
元々の1がここには載っていないのでよくわかりません。Shift-jisかな?


3個目:システム言語
3つめの値はシステム言語らしく、日本語だと14になるようです。
先程はこの値も0x08000100にしていましたが、これは14のままでもpbcopyは動くようなので14に戻しました。

*1:多分