Document Actions
Windowsでpyreadlineを使うとCtrl+H押下時にカーソルが進む
この問題はWindows上でIPythonを便利に使おうとすると発現するんじゃないかなと思います。必ず起きるのかどうかは知りませんが、この問題で困ったことがある人は自分以外に一人しか知らないので、レアな組み合わせなんでしょうね...。でももしかしたら Zopeのdebugコンソールをipython化する を見てやってみようという人が出てくるかも。
現象としては、Backspaceキー押下時にはちゃんとカーソルの前の文字が削除されてカーソルも1文字左に移動するのに、Ctrl+H押下時には、カーソルの前の文字は消えるもののカーソル自体は右に1つ進む、という状況になります。
この問題は以下のパッチで修正出来ます。Ctrl+H押下時にはBackspaceと同等に動作するように書き換えています:
--- pyreadline/keysyms/keysyms.py.orig
+++ pyreadline/keysyms/keysyms.py
@@ -119,6 +119,10 @@
char = chr(VkKeyScan(ord(char)) & 0xff)
elif control:
char=chr(keycode)
+ if control and ord(char)==8 and keycode==72:
+ keycode=8
+ control=False
+ state &= 0xfffffff7
try:
keyname=code2sym_map[keycode]
except KeyError:
問題と解決方法は2年以上前に把握していたんですが、某所で書いたもののバグ報告していなかったので、 IPython: Ctrl+H erase previous character, but cursor goes forward. というタイトルでバグ報告してみました(ちょっと失敗してますが..)。こんなまずい英語でもpatchが付いてれば分かってくれるかなー。分かってくれると良いなー。
- Category(s)
-
python
- The URL to Trackback this entry is:
- http://www.freia.jp/taka/blog/690/tbping

清水川さん、はじめまして。檜山と申します。
CatyというWebフレームワーク(http://d.hatena.ne.jp/m-hiyama/20091215/1260847179)に pyreadline を
同梱して配布しております。
このパッチを適用した keysyms.py も付けたいのですが、いかがでしょう?
README にお名前とURL(http://www.freia.jp/taka/blog/690 )も記載したいと思いますが、差し障りがございますでしょうか?
檜山さんこんにちは。CatyはBPStudyで聞きたかったんですが仕事が・・・><
添付はもちろんOKです。
是非ご利用下さい。
清水川さん、
メールにてご返答申し上げましたが、こちらにも; ありがとうございます。