[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

strange behavior with multi-buffer Lisp code

From: Ian Zimmerman
Subject: strange behavior with multi-buffer Lisp code
Date: 17 Nov 2002 18:40:53 -0800
User-agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7

Hi, I am having a terrible time tracking this down.  Help!

I have written a programming language mode that can communicate with
an asynchronous process in a separate comint buffer.  The subprocess
runs an interpreter for the language, there are commands to send
chunks of code from the editing buffer to the interpreter.  And the
output from the interpreter is shown in the comint buffer.  Pretty
standard fare, I think.

One last thing I'd like to do is to look for error messages from the
interpreter in the comint buffer and jump to the error location in the
editing buffer.  This already mostly works, too.  The problem I am
having is that point changes in the comint buffer are not preserved.
Here's the code:

(defun simple-ml-goto-error ()
  "Jump to the location of a syntax error indicated in interpreter output.
Initially, this is the first error in the last chunk of code sent;
when repeated this command locates subsequent errors."
  (let ((err-line
         (with-current-buffer (get-buffer "*Simple ML*")
           (if (eobp)
               (comint-previous-prompt 1))
           (if (re-search-forward simple-ml-error-regexp nil 'move)
                (string-to-int (match-string 1)) nil))))
    (if err-line
          (goto-char simple-ml-eval-marker)
          (forward-line (1- err-line)))
      (message "No more errors in this code"))))

This command is intended to be executed when the language buffer is in
the selected window.  simple-ml-eval-marker is set earlier by the code
that sends the chunk over to the interpreter.  What happens is that
this _always jumps to the same error_, because even after the point is
moved by the re-search-forward in the comint buffer, it is restored
for some unfathomable (to me - not to you, I hope) reason when the
command returns.

Even stranger, this only happens when the comint buffer is already
shown in some window.  It works perfectly when it is hidden.

I should add that I use GNU Emacs 20.7.

Ian Zimmerman, Oakland, California, U.S.A. I did not vote for Emperor Bush.
GPG: 433BA087  9C0F 194F 203A 63F7 B1B8  6E5A 8CA3 27DB 433B A087

reply via email to

[Prev in Thread] Current Thread [Next in Thread]