Re: 21.3.50.2の動作について
こんにちは山岡です。ごめんなさい、直接の解決ではありません。
>>>>> In <867jv7ixao.fsf@crisis.moonrabbit.co.jp>
>>>>> Ryuhei Funatsu <ryu@moonrabbit.co.jp> wrote:
> こんにちは、船津と申します。
> 最近、emacsのバージョンを21.3から21.3.50.2上げました。
[...]
> M-x replace-regexp
> Replace regexp: ^ with: mv "
> というのを良くやります。
> 21.3.50.2では、1000行以上のファイルに上記処理を行なうと
> ところどころの行で^@(NULL)が挿入される場合があります。
簡単に再現できました。
(let ((buffer (get-buffer-create "*testing*"))
i)
(pop-to-buffer buffer)
(erase-buffer)
(while (not (search-forward "\000" nil t))
(erase-buffer)
(setq i 1)
(while (<= i 1000)
(insert (format "%05d\n" i))
(setq i (1+ i)))
(goto-char (point-min))
(replace-regexp "^" ".")
(goto-char (point-min))))
;; *scratch* バッファにこれをコピーして最下行の行末で C-j。
どうやらこれは replace-regexp を定義している lisp/replace.el で
はなくて、何かの src/*.c にバグがいるのだと思います。
[...]
> 1. この現象は.emacs等の設定で直るものなのでしょうか?
ユーザ設定ではどうにもならない気がします。
> 2. 21.3.50.1でも同様の問題が発生するでしょうか?
> 3. もし21.3.50.1では問題が発生しないとして、これをCVSから取得する方法は
> あるでしょうか?
普通、最後の数字は船津さんかどなたがか Emacs を作るたびに上がっ
ていく番号で、開発中のソースの新旧などとは関係ありません。:)
src/ChangeLog や lisp/ChangeLog ファイルを見るのが確実でしょう。
例えば、大雑把に昔のソースを CVS で取り出す場合は
cvs co -D '6 months ago' emacs
という手がありますが。
ナンでしたら、開発陣に投げてみましょうか?
ところで、ぼくはすべての行頭に同じものを挿入する場合、こんなふう
にしています。
M-x replace-string RET
Replace string: C-j with C-jmv "
ここで C-j は改行文字で、実際には C-q C-j とタイプします。
これだと置換の元が空文字ではなくなるので、似た問題は起きないので
はないでしょうか。
;; つい最近、空文字にマッチする正規表現を使うプログラムを書いた
;; ので不安になりました。
--
Katsumi Yamaoka <yamaoka@jpl.org>
;; ちょっと書き間違いがあったので supersede しました。^^;;
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735