I'm trying to add a function to eiffel.el that uses the SmallEiffel
debugger. The debugger works in a slightly unusual way: you compile
your code with the extra "-trace-" option and then run the executable
and you're in the debugger.
So, here's what I figure I want to do:
1. Start the -trace compile and wait for it to finish.
2. If the exit status was "good" then run the executable.
So, to avoid messing with process filters and getting deep inside
compile.el, I thought this might do the trick:
[...]
(let* ((eif-compile-options (concat "-trace " eif-compile-options))
(eif-compile-target eif-debug-target)
(buff (eif-compile-internal))
(proc (get-buffer-process buff)))
;; This works under GNU Emacs, but hangs under XEmacs if there is
;; input pending.
(while (eq (process-status proc) 'run)
(sit-for 1))
(if (= (process-exit-status proc) 0)
[...]
Note that eif-compile-internal just calls compile-internal after
building the appropriate compile command, so it returns the
compilation buffer.
If I run the above, with input pending, on XEmacs 21.4.8 (with
GNOME/GTK+), it gets stuck in the loop. If I add a counter/message to
the loop, I can see it going round. That doesn't make sense to me,
since the process should eventually terminate (and thus leave the 'run
state). When I check process statuses using "ps", I find that the
compile subprocess is a zombie... Hmmm...
It seems to work fine on GNU Emacs 21.2.
Any ideas? Is it a bug in XEmacs? Should a zombie have status 'run?
Thanks...
peace & happiness,
martin