現在位置: ホーム 清水川記 Windowsでpyreadlineを使うとCtrl+H押下時にカーソルが進む
ドキュメントアクション

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が付いてれば分かってくれるかなー。分かってくれると良いなー。

カテゴリ
python python
トラックバック用URL:
http://www.freia.jp/taka/blog/690/tbping

Re:Windowsでpyreadlineを使うとCtrl+H押下時にカーソルが進む

投稿者: 檜山正幸 投稿日時: 2009年12月18日 15時39分

清水川さん、はじめまして。檜山と申します。
CatyというWebフレームワーク(http://d.hatena.ne.jp/m-hiyama/20091215/1260847179)に pyreadline を
同梱して配布しております。
このパッチを適用した keysyms.py も付けたいのですが、いかがでしょう?
README にお名前とURL(http://www.freia.jp/taka/blog/690 )も記載したいと思いますが、差し障りがございますでしょうか?

Catyへの添付OKです!

投稿者: しみずかわ 投稿日時: 2009年12月18日 17時40分

檜山さんこんにちは。CatyはBPStudyで聞きたかったんですが仕事が・・・><

添付はもちろんOKです。
是非ご利用下さい。

パッチ使わせていただきます

投稿者: 檜山正幸 投稿日時: 2009年12月21日 08時12分

清水川さん、
メールにてご返答申し上げましたが、こちらにも; ありがとうございます。

pyreadline-1.6対応

投稿者: しみずかわ 投稿日時: 2010年07月18日 13時58分

詳しくはこちら http://www.freia.jp/taka/blog/726

コメントを追加

下のフォームに記入してコメントを追加することができます。プレーンテキスト形式。

(必須)
(必須)
(必須)