[xyzzy:03688] process-filter
- Subject: [xyzzy:03688] process-filter
- From: Yutaka OIWA <oiwa@xxxxxxxxxxxxxxxxxxxxx>
おおいわ@東大理情です。はじめまして。
xyzzy 愛用させていただいています。
xyzzy-lisp でネットワークのクライアントを
書いていて、その中で process-filter を使おうと思っているのですが、
elisp のマニュアルにあるものをベースにちょっと改変して
(defvar my-process-premature-string "")
(defun my-process-filter (proc str)
(let ((old-buffer (selected-buffer)))
(unwind-protect
(progn
(set-buffer (process-buffer proc))
(save-excursion
(goto-char (point-max)) ;;(1)
(while (string-match "\r?\n" str)
(let ((line (concat my-process-premature-string
(substring str 0 (match-beginning 0)))))
(insert (format nil ">~A<~%" line))
(setq my-process-premature-string "")
(setq str (substring str (match-end 0)))))
(setq my-process-premature-string str))
(goto-char (point-max))) ;;(2)
(set-buffer old-buffer))))
こんな感じのフィルタを書いたのですが、
1) このフィルタ自体はネットワークからデータが届いた時点で走る
(goto-char を end-of-buffer にすると "Mark set" と表示される)
のだが、結果が画面に反映されず、次のキー入力で一気に表示される。
2) (1) の goto-char の結果はきちんと反映され、内容はバッファの末尾に
追加されるのだが、(2) の goto-char でバッファの最後が表示されるよう
スクロールして欲しいのだがされない。C-x o でバッファを移動すると
やっぱり point は元の位置にある。
という動作をするのですが、どのように修正すればいいでしょうか。
--
大岩 寛 Yutaka Oiwa
東京大学大学院 理学系研究科情報科学専攻 修士課程 米澤研究室
<oiwa@xxxxxxxxxxxxxxxxxxxxx>, <yutaka@xxxxxxxxxxxxxxxxxxxxx>
PGP fingerprint = C9 8D 5C B8 86 ED D8 07 EA 59 34 D8 F4 65 53 61