[Top][All Lists]

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

Emacs (CVS sources) MacOS X tex-mode bug

From: Chip Coldwell
Subject: Emacs (CVS sources) MacOS X tex-mode bug
Date: Sun, 16 Jan 2005 19:34:02 -0500 (Eastern Standard Time)

I realize that I should expect problems if I choose to live on the
bleeding edge, but I figure I might as well report this problem just
in case the developers aren't already aware of it.

The problem is with Emacs that I checked out from CVS
sources and compiled using the emacs/mac/make-package shell script on
the Macintosh OS X (10.3.7).  If I am editing in tex-mode and I run
the function 'tex-file' (by default bound to C-c C-f) emacs goes into
an infinite loop. The loop is in the function lisp/tex-mode.el:tex-start-shell

(defun tex-start-shell ()
       (or tex-shell-file-name (getenv "ESHELL") shell-file-name)
    (let ((proc (get-process "tex-shell")))
      (set-process-sentinel proc 'tex-shell-sentinel)
      (set-process-query-on-exit-flag proc nil)
      (while (zerop (buffer-size))
        (sleep-for 1)))))

The function creates a shell using "make-comint", then waits for the
shell to start in the loop at the bottom.  Presumably, when the shell
has started, it will issue a prompt and the (buffer-size) procedure
will return non-zero and break out of the loop.  The problem is that
it never does.

I am informed by Andreas Schwab that ptys are broken on Mac OS X, and therefore process-connection-type is set to nil so instead of allocating a pseudo-terminal to communicate with the sub-process emacs uses a pipe. The shell discovers that its not connected to a terminal and runs as non-interactive, suppressing the prompts and causing the infinite loop I describe above.

My proposed solution is a tiny patch:

--- emacs/lisp/textmodes/tex-mode.el.~1.153.~   Sat Dec 11 17:00:38 2004
+++ emacs/lisp/textmodes/tex-mode.el    Sun Jan 16 13:59:50 2005
@@ -1495,7 +1495,8 @@
        (or tex-shell-file-name (getenv "ESHELL") shell-file-name)
-       nil)
+       nil
+       "-i")
     (let ((proc (get-process "tex-shell")))
       (set-process-sentinel proc 'tex-shell-sentinel)
       (set-process-query-on-exit-flag proc nil)

This adds the "-i" switch to the command line that exec's the shell, causing it to run interactively.

I have tested this on Mac OS X and it did solve the problem. A very similar "-i" switch appears in lisp/shell.el ("M-x shell").


Charles M. "Chip" Coldwell
"Turn on, log in, tune out"

reply via email to

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