[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
[MD:1812]Bug of kill-ring action with NULL byte in string.
- X-ml-count: 1812
- Subject: [MD:1812]Bug of kill-ring action with NULL byte in string.
- From: Shun-ichi GOTO <gotoh@xxxxxxxxxxx>
- Date: Fri, 09 Jun 2000 11:42:45 +0900 (JST)
- X-mailer: Mew version 1.95b3 on Emacs 20.6 / Mule 4.1 (AOI)
ふとした事でちょっとバグっぽい現象を発見。
対象は Meadow & NTEmacs
原因はまだ追求中。
一応 plan 形式で報告してみる
------------------------------------------------------------
Submitter: Shun-ichi Goto
Subject: Bug of kill-ring action with NULL byte in string.
Date: Fri Jun 09 11:42:28 2000
X-ML-COUNT:
Transaction: Bug report.
Status:
------------------------------------------------------------
現象
NULL 文字 ^@ (== 0 : null byte) を含むリージョン指定をして
kill-ring-save あるいは kill-region して取り込んだデータを yank すると、
NULL 文字の直前までしか挿入されない。(あたかも ASCIZ 文字列ハンドリン
グ不備かのごとく)
具体的には "abc^@abc" => "abc" となってしまうというもの。
これは望まれた
見えないだけかと思い、バッファ上で(point) を調べてみると、確かに3文字
分しかバッファ上にないのでそういう事ではない。
試験環境
(1) Meadow 1.13b1 + Windows 2000 pro
(2) NTEmacs 20.6 + WIndows 2000 pro
(比較用) Emacs 20.6 + BSD/OS 4.0.1 + Astec-X (X-server on Win2000)
再現手順
具体的には適当なバッファ内で abc^@abc と入力する(キーストロークとして
は a b c C-q C-SPC a b c)。最初の "a" の直前にてset-markし最後の"c" の
後ろにて C-w (kill-region) あるいは M-w (kill-ring-save) する。次の行
に移るなどして適当に C-y (yank) すると、"abc" だけが挿入される。
比較
meadow 1.13b1 と NTEmacs 20.6、 UNIX (BSD/OS)上の emacs 20.6 で試して
みました。結論からいえば Windows 用コード(Meadow & NTEmacs) の問題であ
り、なおかつWindow を使用する(not -nw)状態で現象が出るようです。
Execute | Meadow | NTEmacs | Emacs
options | result | result | result
---------+--------+---------+--------
(none) | NG | NG | ok
-q | NG | NG | ok
-nw | ok | ok | ok
-q -nw | ok | ok | ok
※ emacs 20.6 は BSD-OS 上で動作させ、Win2000 上の X-Server (Astec-X)
に表示させました。
調査
件の文字列を (setq str (buffer-substring (mark) (point))) すると、
正しく保持されており、mini-buffer にも正しく報告される。
(length str) も7で正しい。
(insert str) も正しく挿入する。
ring の中を見ると "abc" と "abc^@abc" があり、C-u 2 y すると、
今度は正しく挿入される。つまり
(current-kill 0) => "abc"
(current-kill 1) => "abc^@abc"
となっている。
ちなみにその操作の後、別の文字列を C-w すると、
(current-kill 0) => "hello"
(current-kill 1) => "abc"
(current-kill 2) => "abc^@abc"
となっており、件の操作を行なうと、どういうわけか"abc" 余計にkill-ring
に突っ込んでる処理がどこかにある、という事かと。
しかも (null window-system) の状態に限って...
とりあえずここまで。
ピンときたひとは引続き調査よろしくぅ。
--- Regards,
Shun-ichi Goto <gotoh@xxxxxxxxxxx>
R&D Group, TAIYO Corp., Tokyo, JAPAN