Ticket #23052

テキストの貼り付けで改行コードが無視される

Open Date: 2010-09-07 12:13 Last Update: 2010-12-26 11:55

Reporter:
Owner:
(None)
Type:
Status:
Open
Component:
(None)
MileStone:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
None
File:
None

Details

ckw-mod-0.9.0-d2で改行つきテキストの貼り付けで改行コードが無視されるようです。 windows XP pro とHomeで確認しました。 詳しくは以下に書きました。 http://www.geocities.co.jp/tmoctwin/files/ckw-bug_kana.html

Ticket History (3/10 Histories)

2010-09-07 12:13 Updated by: tmacchant
  • New Ticket "テキストの貼り付けで改行コードが無視される" created
2010-11-02 11:19 Updated by: masuday
Comment

私も同様の症状に悩まされていたので,調べてみました。 どうやら,以下の変更時に改行コードを書き換えたのが原因のようです。

(2009.10.24) ckw のテキスト貼り付けをPythonのInteractiveShellでも正しく動作するように改造してみた — 清水川Web

具体的には,misc.cpp の write_console_input 関数内で,\rと\nに対して特別な処理をしています。

if(*str == '\r') {
	str++;
	length--;
}
if(*str == '\n') {
	p->Event.KeyEvent.wVirtualKeyCode = VK_RETURN;
	str++;
} else {
	p->Event.KeyEvent.uChar.UnicodeChar = *str++;
}

実際,この部分を削除してビルドし直せば従来どおりの挙動になりました。

//if(*str == '\r') {
//	str++;
//	length--;
//}
//if(*str == '\n') {
//	p->Event.KeyEvent.wVirtualKeyCode = VK_RETURN;
//	str++;
//} else {
	p->Event.KeyEvent.uChar.UnicodeChar = *str++;
//}

入力改行コードに手を入れようとした動機は,PythonのInteractive Shell上で正しく動くようにするためだそうですが,他の環境では概ね改行が無視されるので,使い勝手が悪くなってしまいます。さらに,将来的にPythonに修正が入った場合は,このhack自体が問題になる可能性もあります。

私自身,オプションを活用して,ユーザが場面に応じて切り替えられるように修正しようと思い,パッチを作成し始めたのですが・・・。WindowsプログラミングやC++に不慣れなのと,簡単には実装できなさそうな雰囲気があって断念しています。現時点では,自力ビルドするのが早そうです。

2010-11-02 17:52 Updated by: tmacchant
Comment

ご回答ありがとうございました。 コードをいじってソースからビルドにトライしてみます。

2010-11-03 14:18 Updated by: tmacchant
Comment

普段はgccなので,VC++はつかわないので苦労しましたが,何とかビルドできました。 32bit XPなので,windows 7用 や64bit用のコードをコメントアウトすることにより (PRTL_USER_PROCESS_PARAMETERSなどが見つからないなど)というコンパイルエラーを回避しました。 (自分用なのでこれで当面いいでしょう。)

cr+lfが改行コードだとちゃんと動くようになりました。 でもlfではだめですね。 昔のバージョンだとcr+lfと改行が余計に一行はいり,lfだと入らないようですね。 Unixyな環境のファイルも扱うのでうまくこのあたり処理できるといいのですが。

できれば考えてみますが,プログラムは必要に応じて行き当たりばったりでやっているので 無理かもしれません。

cr+lfが改行コードだとちゃんと動くことでも大きいので,助かりました。 感謝いたします。

2010-11-03 14:32 Updated by: tmacchant
Comment

何度もすみません。上のPRTL_USER_PROCESS_PARAMETERSがみつからない話は,VC2008にWindows SDK v7.0をインストールしていないからだと思います。自宅では回線が細いのでWindows SDK v7.0をインストールできませんので,高速のネットワークがつながる環境で試しなおします。

2010-11-03 15:34 Updated by: tmacchant
  • Status Update from Open to Closed
  • Ticket Close date is changed to 2010-11-03 15:34
Comment

本当に何度もすみません。 >>cr+lfが改行コードだとちゃんと動くようになりました。 でもlfではだめですね。 昔のバージョンだとcr+lfと改行が余計に一行はいり,lfだと入らないようですね。 Unixyな環境のファイルも扱うのでうまくこのあたり処理できるといいのですが。

と書いた上の挙動,MsysやCygwinのshellの上の挙動でのことですが。 cmd.exeだとlfだけでは改行せず,cr+lfで改行します。 masudayさんのご指摘のコードで以前のckwの挙動にもどっていて,cmd.exeの挙動と同じです。

MsysやCygwinのshellでcr+LFで余分に改行されるのは,別の問題なのでしょう。 cmd上でMsysやcygwinのshellでCR+LFを改行にしても余計な行が入らないのは,何か理由がありそうです。

どうもすみませんでした。 というわけで,以前の挙動にもどるということでここでこの話題は閉じたいと思います。

2010-11-05 09:13 Updated by: tmacchant
Comment

追記です。VC2008にWindows SDK 7を導入して(次参照) http://blogs.msdn.com/b/dd_jpn/archive/2009/08/25/9883335.aspx

ビルドしました。 masudayさんのご指摘のコード以外の改変なしに無事にビルドでき,使っています。 あらためてお礼を申し上げます。

2010-12-26 06:48 Updated by: tmacchant
Comment

VC2008でビルドしたものは,OpenOfficeと相性がわるかったので, 古いバージョンにもどしたのですが,MinGWでビルドしてみました。 VC固有の関数fopen_sなどが使ってあったのでマクロ定義やMINGW32で実装コードを変えてビルドしなおしました。 また,http://d.hatena.ne.jp/ousttrue/20101211/1292034990#c も参考にしました。

今度はどうなるか,いずれ報告したいと思います。

2010-12-26 11:52 Updated by: tmacchant
  • Status Update from Closed to Open
Comment
(This comment has been deleted)
2010-12-26 11:55 Updated by: tmacchant
Comment

「テキストの貼り付けで改行コードが無視される」問題を解決するソースコードを MinGW-GCC 4.5.0 でビルドするためのパッチを公開しました。 興味のある方は,お使いください。 http://www.tatsuromatsuoka.com/tmacchant/#101226 バイナリの公開は,派生版を作りたくないのでアップロードする予定はありません。 なお,完了にするとチケットが表示されなくなるのであえて状態を「オープン」に戻しました。

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login