Main Contents

2007年01月10日

osxのpythonでCtrl-Aとか日本語入力とか。

このエントリーをはてなブックマークする このエントリーを含むはてなブックマーク | Save This Page (del.icio.us)

setomitsさんがblogSetomits : Mac OS X 上の Python インタプリタとかblogSetomits : あらためて Python 2.4.4あるいはblogSetomits : 続 Mac OS X 上の Python インタプリタで書かれているように、osxのpythonのインタラクティブモードはなんだか動作がヘンです。Emacsキーバインドが効かなかったり、日本語がちゃんと入力できなかったり。

はじめ、readlineをコンパイルしてみたり、python自体をコンパイルしてみたりしたのですが状況はそれほど変わらず。結局、rlwrapをMacPorts(旧DarwinPorts)から導入し、~/.inputrcを設定することで問題が解決しました。

ちなみにrlwrapというのはreadlineラッパーです。これがどんなものかは川o・-・)<2nd life - rlwrap - readline ラッパーで説明されていますので、ご参照ください(手抜き)。自分もここでrlwrapを知りました。

以下、手順。

1.MacPortsのインストール

InstallingMacPorts - MacPorts - Tracに書かれているとおりXcode Toolsをインストールして、環境変数を設定してから、MacPortsの.dmgをインストールすればOK、のはず。自分はDarwinPortsのころにインストールしたのでよくわからん。たぶん同じだけど。

2.rlwrapのインストール

ターミナルから

sudo port install rlwrap

とするだけ。

標準構成ならたぶん /opt/local/bin/rlwrapに入るかな。

3. ~/.inputrcの設定。

意味はわからんけどreadlineさまが機嫌良く動いてくれるように、以下のおまじないを ~/.inputrcに追加。

set convert-meta off
set output-meta on
set input-meta on

4. 実行

以下のような感じ。例ではわからないが、ちゃんとCtrl-AとかCtrl-H とかのEmacsキーバインドが効いている。

% rlwrap python2.4

Python 2.4.4 (#1, Oct 18 2006, 10:34:39) 
[GCC 4.0.1 (Apple Computer, Inc. build 5341)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> u = 'あいうえお'.decode('euc-jp')
>>> len(u)
5
>>> for c in u:
...   print hex(ord(c))
... 
0x3042
0x3044
0x3046
0x3048
0x304a

どうでもいいけど、標準の pytho2.3.5 で decode('euc-jp')とすると、"LookupError: unknown encoding: euc-jp"と怒られてしまう。JapaneseCodecて2.3から標準でなかったっけ?

TrackBacks

トラックバックURL:

Comments

おかげでシアワセになれました。ありがたやありがたや。

ちなみに日本語Codecが標準で入るようになったのは Python 2.4 からです。

Post a comment

コメントフォーム