Miscellaneous tq-related fixes.

* lisp/emacs-lisp/tq.el: Small grammar fix in comments.
  (tq-enqueue): Check for existence of queue rather than the head queue
  item's question, which was a no-op.
  (tq-filter, tq-process-buffer): Make sure the process buffer exists
  before making it the current buffer.

* lispref/processes.texi (Transaction Queues): Remove stray quote
  character.

Revision: emacs@sv.gnu.org/emacs--devo--0--patch-411
Creator:  Michael Olson <mwolson@gnu.org>
This commit is contained in:
Miles Bader
2006-08-27 10:42:40 +00:00
parent eb41104943
commit 7a210b69c7
4 changed files with 46 additions and 29 deletions

View File

@@ -1,3 +1,11 @@
2006-08-27 Michael Olson <mwolson@gnu.org>
* emacs-lisp/tq.el: Small grammar fix in comments.
(tq-enqueue): Check for existence of queue rather than the
head queue item's question, which was a no-op.
(tq-filter, tq-process-buffer): Make sure the process buffer
exists before making it the current buffer.
2006-08-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* term/mac-win.el (mac-apple-event-map): Rename hicommand to hi-command.

View File

@@ -66,7 +66,7 @@
;; regexp: regular expression that matches the end of a response from
;; the process
(defun tq-queue-head-regexp (tq) (car (cdr (car (tq-queue tq)))))
;; closure: additional data to pass to function
;; closure: additional data to pass to the function
(defun tq-queue-head-closure (tq) (car (cdr (cdr (car (tq-queue tq))))))
;; fn: function to call upon receiving a complete response from the
;; process
@@ -119,7 +119,7 @@ If DELAY-QUESTION is non-nil, delay sending this question until
the process has finished replying to any previous questions.
This produces more reliable results with some processes."
(let ((sendp (or (not delay-question)
(not (tq-queue-head-question tq)))))
(not (tq-queue tq)))))
(tq-queue-add tq (unless sendp question) regexp closure fn)
(when sendp
(process-send-string (tq-process tq) question))))
@@ -131,35 +131,39 @@ This produces more reliable results with some processes."
(defun tq-filter (tq string)
"Append STRING to the TQ's buffer; then process the new data."
(with-current-buffer (tq-buffer tq)
(goto-char (point-max))
(insert string)
(tq-process-buffer tq)))
(let ((buffer (tq-buffer tq)))
(when (buffer-live-p buffer)
(with-current-buffer buffer
(goto-char (point-max))
(insert string)
(tq-process-buffer tq)))))
(defun tq-process-buffer (tq)
"Check TQ's buffer for the regexp at the head of the queue."
(set-buffer (tq-buffer tq))
(if (= 0 (buffer-size)) ()
(if (tq-queue-empty tq)
(let ((buf (generate-new-buffer "*spurious*")))
(copy-to-buffer buf (point-min) (point-max))
(delete-region (point-min) (point))
(pop-to-buffer buf nil)
(error "Spurious communication from process %s, see buffer %s"
(process-name (tq-process tq))
(buffer-name buf)))
(goto-char (point-min))
(if (re-search-forward (tq-queue-head-regexp tq) nil t)
(let ((answer (buffer-substring (point-min) (point))))
(delete-region (point-min) (point))
(unwind-protect
(condition-case nil
(funcall (tq-queue-head-fn tq)
(tq-queue-head-closure tq)
answer)
(error nil))
(tq-queue-pop tq))
(tq-process-buffer tq))))))
(let ((buffer (tq-buffer tq)))
(when (buffer-live-p buffer)
(set-buffer buffer)
(if (= 0 (buffer-size)) ()
(if (tq-queue-empty tq)
(let ((buf (generate-new-buffer "*spurious*")))
(copy-to-buffer buf (point-min) (point-max))
(delete-region (point-min) (point))
(pop-to-buffer buf nil)
(error "Spurious communication from process %s, see buffer %s"
(process-name (tq-process tq))
(buffer-name buf)))
(goto-char (point-min))
(if (re-search-forward (tq-queue-head-regexp tq) nil t)
(let ((answer (buffer-substring (point-min) (point))))
(delete-region (point-min) (point))
(unwind-protect
(condition-case nil
(funcall (tq-queue-head-fn tq)
(tq-queue-head-closure tq)
answer)
(error nil))
(tq-queue-pop tq))
(tq-process-buffer tq))))))))
(provide 'tq)

View File

@@ -1,3 +1,8 @@
2006-08-27 Michael Olson <mwolson@gnu.org>
* processes.texi (Transaction Queues): Remove stray quote
character.
2006-08-25 Richard Stallman <rms@gnu.org>
* os.texi (Idle Timers): run-with-idle-timer allows Lisp time value.

View File

@@ -1520,7 +1520,7 @@ text at the end of the entire answer, but nothing before; that's how
If the argument @var{delay-question} is non-nil, delay sending this
question until the process has finished replying to any previous
questions. This produces more reliable results with some processes."
questions. This produces more reliable results with some processes.
The return value of @code{tq-enqueue} itself is not meaningful.
@end defun