[gnu.emacs.bug] GNU Emacs bug in version 18.50 running on VMS

michaelis@RDSS.UCAR.EDU (michaelis) (01/13/89)

I am rather new to Emacs, but I believe I have found a bug in the program
running under VMS.  To be specific, I am running GNU Emacs 18.50 under 
VMS 4.7 with a DEC VT320 terminal set up with a VT220 ID. 

The problem is in using the vt200.el keypad definition.  My .emacs file 
listed below may help in giving you some clues to the problem...then again 
it may not.  The problem is that when I type a ^G with nothing to abort, 
GNU forgets the cursor key definitions.  However, after I attach to my 
parent process and then reenter Emacs, the cursor keys work again.  

The problem is rather annoying, and talking to the local experts around 
here has turned up nothing but a, "Hmmm, that shouldn't happen.  I don't 
know what the problem could be."

In a fit of desperation, I listed out the values of all Emacs' variables 
before and after the cursor key problem.  Result: zilch.  The variable 
listings were identical.

I hope that you can find and kill the problem for your next release of GNU 
Emacs. While you are at it, you might make the program recognize a DEC 
VT320.

-Matt Michaelis




=============================== .emacs =========================================

; Fix EMACS to use the bloody keypad keys.
;
(load "du:[michaelis.emacs]vt200.elc")

; This is a bit of a clunky way to enable the cursor keys, but it is the
; best way I have found so far.
(enable-arrow-keys)

; My personal whims.  I like to have wrap mode on.  I don't like to see
; the lines wrap around; it's too strange.
(setq text-mode-hook 'turn-on-auto-fill)
(setq-default truncate-lines t)
(setq-default fill-column 78)


;
; Make C-x s do save-buffer since we can't use C-x C-s
; and make C-x S into save-some-buffers
;
(define-key ctl-x-map "s" 'save-buffer)
(define-key ctl-x-map "S" 'save-some-buffers)

===========================================================================

ouellette%tarkin.DEC@DECWRL.DEC.COM (Back on the critical path) (01/13/89)

From:	DECWRL::"michaelis@rdss.ucar.edu" "michaelis  12-Jan-89 1030 MST"
To:	bug-gnu-emacs@prep.ai.mit.edu
Subj:	GNU Emacs bug in version 18.50 running on VMS

    I am rather new to Emacs, but I believe I have found a bug in the
    program  running  under VMS.   To be specific,  I am  running GNU
    Emacs 18.50 under VMS 4.7 with a DEC VT320 terminal set up with a
    VT220 ID.

    The problem is in using  the   vt200.el keypad  definition.   The
    problem  is that when I type   a ^G  with  nothing  to abort, GNU
    forgets the  cursor key  definitions.  However, after I attach to
    my parent  process and then  reenter Emacs,  the cursor keys work
    again.

Yes this is a bug and I've had a fix for it for a while.  Here
they are.  Maybe they'll reach every corner of the net this
time...

Roland.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
From:	SHIGEO::SASAKI "Marty Sasaki"

    Just got a note from Jonathan Corbet about a fix to 18.51. I will
    be putting it into the distribution that I have. Here it is...
    
    ================================================================
    
    I noticed a problem a while back with VMS gnu emacs, run as a
    subprocess.  If you suspend it to do other work, it still catches ^C
    interrupts, and interprets them as a quit command.  The first time you
    hit ^C, the screen flashes when you resume emacs, and you get the
    "quit" message. The second time, and emacs hangs when you try to resume
    it.
     
    The solution is simply to ignore ^C when suspended.  I have enclosed
    below the VMS-specific portion of my modified sys_suspend() in sysdep.c
    (taken from version 18.51).
     
    #ifdef VMS
      unsigned long parent_id;
      int status
     
      parent_id = getppid ();
      if (parent_id && parent_id != 0xffffffff)
      {
            int oldsig = signal (SIGINT, SIG_IGN);
            status = LIB$ATTACH (&parent_id) & 1;
            signal (SIGINT, oldsig);
            return (status);
      }
      return -1;
    #else
     
    Jonathan Corbet
    National Center for Atmospheric Research, Field Observing Facility
    corbet@rdss.ucar.edu

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
From:	DECWRL::"gentzel@godot.psc.edu" "David Gentzel  1-Jun-88 0203 EDT"
To:	bug-gnu-emacs@prep.ai.mit.edu
Subj:	VMS character dropping bug in 18.51

I tracked down this bug to the changes made to end_kbd_input for 18.51.
Below is the function (from sysdep.c) with the changed portions delimited
by #ifdef's on BUG.  If you revert to the 18.50 version (i.e. leave BUG
undefined) everything seems fine.  This bug causes both the "dropping of
characters when the system is slow" bug and the "^G makes arrow keys stop
working" bug.
 
The real question is: What was this change supposed to fix?  I don't recall
seeing this fix on this mailing list.  Was it from private correspondance
with rms?  If so, could the originator or rms post the original?  If this
was meant to fix a true bug, I would like to put together a working fix.  As
it is, I doubt whatever it intended to fix can be as bad as the bugs it has
caused!
 
I've been running with the 18.50 version of this function in an otherwise
18.51 version for over a week now with no problems.
 
end_kbd_input()
{
#ifdef ASTDEBUG
  printf ("At end_kbd_input.\n");
  fflush (stdout);
  sleep (1);
#endif
#ifdef BUG
  if (ast_active)  /* Don't wait if suspending from kbd_buffer_store_char! */
    {
      SYS$CANCEL (input_chan);
      return;
    }
#endif
 
  SYS$SETAST (0);
  /* Clear a flag, and tell ast routine above to set it.  */
  SYS$CLREF (input_ef);
  waiting_for_ast = 1;
  stop_input = 1;
  SYS$CANCEL (input_chan);
  SYS$SETAST (1);
#ifndef BUG
  if (!ast_active)
#endif
  SYS$WAITFR (input_ef);
  waiting_for_ast = 0;
}
 
					Dave Gentzel
					Pittsburgh Supercomputing Center
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SHIGEO::SASAKI "Marty Sasaki"  22-JUN-1988 17:05

    There was a bug found and fixed (at least that's what RMS has told
    me that would cause characters to occasionally be lost. When I
    installed the fix, emacs stopped hanging, although I haven't really
    tested things enough to know whether this is fixed or whether I
    just haven't run into the circumstances yet.
    
    Anyway, the patch is to 18.51:
    
    In sysdep.c, near kbd_input_ast:
     
    /* This is called from keyboard.c at certain times
       such as when about to longjmp out of a signal handler.  */
     
    sigfree ()
    {
      sigsetmask (0);
      ast_active = 0;
    }
     
    In keyboard.c, after the definition of sigfree:
     
    /* For VMS, sigfree is defined in sysdep.c.  */
    #ifdef VMS
    #undef sigfree
    #endif
    
    	Marty Sasaki
    

    

rms@WHEATIES.AI.MIT.EDU (Richard Stallman) (01/13/89)

I think that bug is gone in 18.52, which is the current release.