diff options
| author | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2011-01-03 01:45:13 +0100 | 
|---|---|---|
| committer | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2011-01-03 01:45:13 +0100 | 
| commit | dac9e147a1717674aab32ecc47bb9ea6cddb4ef1 (patch) | |
| tree | 0136c0dc53f2764460721729c92f1b6b7f845735 | |
| parent | 78554a9c2bbbe59b007f85c8ee113b9a449db231 (diff) | |
| download | geiser-dac9e147a1717674aab32ecc47bb9ea6cddb4ef1.tar.gz geiser-dac9e147a1717674aab32ecc47bb9ea6cddb4ef1.tar.bz2 | |
Really avoiding *spurious* buffers
My previous attempt was bogus! Also, i'm taking advantage of our
sending queries serially to simplify transaction queue processing, and
to clean after ourserlves on error.
| -rw-r--r-- | elisp/geiser-connection.el | 22 | 
1 files changed, 15 insertions, 7 deletions
| diff --git a/elisp/geiser-connection.el b/elisp/geiser-connection.el index 3638e12..cade18a 100644 --- a/elisp/geiser-connection.el +++ b/elisp/geiser-connection.el @@ -73,13 +73,21 @@      tq))  (defun geiser-con--tq-filter (tq in) -  (if (tq-queue-empty tq) -      (let ((buffer (tq-buffer tq))) -        (geiser-log--error "Unexpected queue input:\n %s" in) -        (when (buffer-live-p buffer) -          (with-current-buffer buffer -            (delete-region (point-min) (point-max))))) -    (tq-filter tq in))) +  (when (buffer-live-p (tq-buffer tq)) +    (with-current-buffer (tq-buffer tq) +      (if (tq-queue-empty tq) +          (progn (geiser-log--error "Unexpected queue input:\n %s" in) +                 (delete-region (point-min) (point-max))) +        (goto-char (point-max)) +        (insert in) +        (goto-char (point-min)) +        (when (re-search-forward (tq-queue-head-regexp tq) nil t) +          (unwind-protect +              (funcall (tq-queue-head-fn tq) +                       (tq-queue-head-closure tq) +                       (buffer-substring (point-min) (point))) +            (delete-region (point-min) (point-max)) +            (tq-queue-pop tq)))))))  (defun geiser-con--combined-prompt (prompt debug)    (format "\\(%s%s\\)" prompt (if debug (format "\\|%s" debug) ""))) | 
