Commit 78e33835 authored by Chong Yidong's avatar Chong Yidong
Browse files

Fix filter functions discussion in Lisp manual.

* processes.texi (Filter Functions): Use `buffer-live-p' instead
of `buffer-name' in the main text as well as in the example
(Bug#3098).
parent 44a41a47
2010-08-24 Markus Triska <triska@gmx.at>
* processes.texi (Filter Functions): Use `buffer-live-p' instead
of `buffer-name' in the main text as well as in the example
(Bug#3098).
2010-08-22 Chong Yidong <cyd@stupidchicken.com> 2010-08-22 Chong Yidong <cyd@stupidchicken.com>
* nonascii.texi (Text Representations): * nonascii.texi (Text Representations):
......
...@@ -1273,22 +1273,24 @@ process's buffer, mimicking the actions of Emacs when there is no ...@@ -1273,22 +1273,24 @@ process's buffer, mimicking the actions of Emacs when there is no
filter. Such filter functions need to use @code{set-buffer} in order to filter. Such filter functions need to use @code{set-buffer} in order to
be sure to insert in that buffer. To avoid setting the current buffer be sure to insert in that buffer. To avoid setting the current buffer
semipermanently, these filter functions must save and restore the semipermanently, these filter functions must save and restore the
current buffer. They should also update the process marker, and in some current buffer. They should also check whether the buffer is still
cases update the value of point. Here is how to do these things: alive, update the process marker, and in some cases update the value
of point. Here is how to do these things:
@smallexample @smallexample
@group @group
(defun ordinary-insertion-filter (proc string) (defun ordinary-insertion-filter (proc string)
(with-current-buffer (process-buffer proc) (when (buffer-live-p (process-buffer proc))
(let ((moving (= (point) (process-mark proc)))) (with-current-buffer (process-buffer proc)
(let ((moving (= (point) (process-mark proc))))
@end group @end group
@group @group
(save-excursion (save-excursion
;; @r{Insert the text, advancing the process marker.} ;; <at> r{Insert the text, advancing the process marker.}
(goto-char (process-mark proc)) (goto-char (process-mark proc))
(insert string) (insert string)
(set-marker (process-mark proc) (point))) (set-marker (process-mark proc) (point)))
(if moving (goto-char (process-mark proc)))))) (if moving (goto-char (process-mark proc)))))))
@end group @end group
@end smallexample @end smallexample
...@@ -1315,12 +1317,6 @@ expression searching or matching had to explicitly save and restore the ...@@ -1315,12 +1317,6 @@ expression searching or matching had to explicitly save and restore the
match data. Now Emacs does this automatically for filter functions; match data. Now Emacs does this automatically for filter functions;
they never need to do it explicitly. @xref{Match Data}. they never need to do it explicitly. @xref{Match Data}.
A filter function that writes the output into the buffer of the
process should check whether the buffer is still alive. If it tries to
insert into a dead buffer, it will get an error. The expression
@code{(buffer-name (process-buffer @var{process}))} returns @code{nil}
if the buffer is dead.
The output to the function may come in chunks of any size. A program The output to the function may come in chunks of any size. A program
that produces the same output twice in a row may send it as one batch of that produces the same output twice in a row may send it as one batch of
200 characters one time, and five batches of 40 characters the next. If 200 characters one time, and five batches of 40 characters the next. If
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment