[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Emacs 21.3.50.1 (CVS sources) MacOS X tex-mode bug
From: |
Chip Coldwell |
Subject: |
Emacs 21.3.50.1 (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 21.3.50.1 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 ()
(with-current-buffer
(make-comint
"tex-shell"
(or tex-shell-file-name (getenv "ESHELL") shell-file-name)
nil)
(let ((proc (get-process "tex-shell")))
(set-process-sentinel proc 'tex-shell-sentinel)
(set-process-query-on-exit-flag proc nil)
(tex-shell)
(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 @@
(make-comint
"tex-shell"
(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").
Chip
--
Charles M. "Chip" Coldwell
"Turn on, log in, tune out"
- Emacs 21.3.50.1 (CVS sources) MacOS X tex-mode bug,
Chip Coldwell <=
Re: Emacs 21.3.50.1 (CVS sources) MacOS X tex-mode bug, Richard Stallman, 2005/01/18