]> git.eshelyaron.com Git - emacs.git/commitdiff
Merged in changes from CVS trunk.
authorKaroly Lorentey <lorentey@elte.hu>
Sat, 13 Nov 2004 18:34:40 +0000 (18:34 +0000)
committerKaroly Lorentey <lorentey@elte.hu>
Sat, 13 Nov 2004 18:34:40 +0000 (18:34 +0000)
Patches applied:

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-673
   Update from CVS

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-674
   Update from CVS

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-675
   Update from CVS

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-676
   Update from CVS

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-677
   Update from CVS

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-678
   Update from CVS

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-679
   Merge from gnus--rel--5.10

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-680
   Update from CVS

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-681
   Update from CVS

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-682
   Update from CVS

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-683
   Update from CVS

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-684
   Update from CVS

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-685
   Update from CVS

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-686
   Update from CVS

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-687
   Update from CVS

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-688
   Update from CVS

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-689
   Merge from gnus--rel--5.10

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-690
   Update from CVS

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-691
   Update from CVS

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-692
   Update from CVS

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-693
   Update from CVS

 * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-69
   Merge from emacs--cvs-trunk--0

 * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-70
   Update from CVS

 * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-71
   Update from CVS

git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-267

23 files changed:
1  2 
lisp/files.el
lisp/font-lock.el
lisp/international/mule-cmds.el
lisp/progmodes/gdb-ui.el
lisp/simple.el
lisp/subr.el
src/Makefile.in
src/dispextern.h
src/emacs.c
src/fontset.c
src/fringe.c
src/intervals.h
src/keyboard.c
src/keymap.c
src/lisp.h
src/lread.c
src/msdos.c
src/process.c
src/window.c
src/xdisp.c
src/xfaces.c
src/xmenu.c
src/xselect.c

diff --cc lisp/files.el
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc lisp/simple.el
Simple merge
diff --cc lisp/subr.el
Simple merge
diff --cc src/Makefile.in
Simple merge
Simple merge
diff --cc src/emacs.c
index ab60df39e2712b93f3e2c97ccb37f51346b48771,fc158693e47e69e14400fa86370ee987322a1c3e..356f74204bfc2c19ab23edc420871f8e978fa50e
@@@ -1630,10 -1627,16 +1628,10 @@@ main (argc, arg
  #ifdef HAVE_NTGUI
        globals_of_w32fns ();
        globals_of_w32menu ();
- #endif  /* end #ifdef HAVE_NTGUI */
+ #endif  /* HAVE_NTGUI */
      }
  
 -  if (!noninteractive)
 -    {
 -#ifdef VMS
 -      init_vms_input ();/* init_display calls get_frame_size, that needs this.  */
 -#endif /* VMS */
 -      init_display ();        /* Determine terminal type.  init_sys_modes uses results.  */
 -    }
 +  init_process (); /* init_display uses add_keyboard_wait_descriptor. */
  #ifndef MAC_OS8
    /* Called before init_window_once for Mac OS Classic.  */
    init_keyboard ();   /* This too must precede init_sys_modes.  */
diff --cc src/fontset.c
Simple merge
diff --cc src/fringe.c
Simple merge
diff --cc src/intervals.h
index 15e59537377db4643b5531d9a52036825f946b29,1c9a4708bdb087070816dc1f20472d94cefad785..f3b281f4184d402b0a5eaad9493b1c77083c08dc
@@@ -84,9 -84,14 +84,14 @@@ struct interva
  #define INT_LISPLIKE(i) (BUFFERP ((Lisp_Object){(EMACS_INT)(i)}) \
                         || STRINGP ((Lisp_Object){(EMACS_INT)(i)}))
  #endif
+ #ifdef ENABLE_CHECKING
  #define NULL_INTERVAL_P(i) \
 -   (CHECK (!INT_LISPLIKE (i), "non-interval"), (i) == NULL_INTERVAL)
 +  ((void)CHECK (!INT_LISPLIKE (i), "non-interval"), (i) == NULL_INTERVAL)
  /* old #define NULL_INTERVAL_P(i) ((i) == NULL_INTERVAL || INT_LISPLIKE (i)) */
+ #else
+ #define NULL_INTERVAL_P(i) ((i) == NULL_INTERVAL)
+ #endif
  
  /* True if this interval has no right child. */
  #define NULL_RIGHT_CHILD(i) ((i)->right == NULL_INTERVAL)
diff --cc src/keyboard.c
index 35bfd1402c9bdc7eebf29ba4f16d637764546026,90da03256c96e8ae5264b467ff5d0a044d9bc3b7..b520d655fb90ddbd99c80aa0382d9d884e4885df
@@@ -6627,178 -6622,118 +6625,177 @@@ static in
  read_avail_input (expected)
       int expected;
  {
 -  register int i;
    int nread = 0;
 +  int err = 0;
 +  struct display *d;
  
 -  if (read_socket_hook)
 +  /* Loop through the available displays, and call their input hooks. */
 +  d = display_list;
 +  while (d)
      {
 -      int nr;
 -      struct input_event hold_quit;
 +      struct display *next = d->next_display;
 +
 +      if (d->read_socket_hook)
 +        {
 +          int nr;
 +          struct input_event hold_quit;
  
 -      EVENT_INIT (hold_quit);
 -      hold_quit.kind = NO_EVENT;
 +          EVENT_INIT (hold_quit);
 +          hold_quit.kind = NO_EVENT;
  
 -      /* No need for FIONREAD or fcntl; just say don't wait.  */
 -      while (nr = (*read_socket_hook) (input_fd, expected, &hold_quit), nr > 0)
 -      {
 -        nread += nr;
 -        expected = 0;
 -      }
 -      if (hold_quit.kind != NO_EVENT)
 -      kbd_buffer_store_event (&hold_quit);
 +          /* No need for FIONREAD or fcntl; just say don't wait.  */
 +          while (nr = (*d->read_socket_hook) (d, expected, &hold_quit), nr > 0)
 +            {
 +              nread += nr;
 +              expected = 0;
 +            }
 +          
 +          if (nr == -1)          /* Not OK to read input now. */
 +            {
 +              err = 1;
 +            }
 +          else if (nr == -2)          /* Non-transient error. */
 +            {
 +              /* The display device terminated; it should be closed. */
 +              
 +              /* Kill Emacs if this was our last display. */
 +              if (! display_list->next_display)
 +                /* Formerly simply reported no input, but that
 +                   sometimes led to a failure of Emacs to terminate.
 +                   SIGHUP seems appropriate if we can't reach the
 +                   terminal.  */
 +                /* ??? Is it really right to send the signal just to
 +                   this process rather than to the whole process
 +                   group?  Perhaps on systems with FIONREAD Emacs is
 +                   alone in its group.  */
 +                kill (getpid (), SIGHUP);
 +              
 +              /* XXX Is calling delete_display safe here?  It calls Fdelete_frame. */
 +              if (d->delete_display_hook)
 +                (*d->delete_display_hook) (d);
 +              else
 +                delete_display (d);
 +            }
 +
 +          if (hold_quit.kind != NO_EVENT)
 +            kbd_buffer_store_event (&hold_quit);
 +        }
 +
 +      d = next;
      }
 -  else
 -    {
 -      /* Using KBD_BUFFER_SIZE - 1 here avoids reading more than
 -       the kbd_buffer can really hold.  That may prevent loss
 -       of characters on some systems when input is stuffed at us.  */
 -      unsigned char cbuf[KBD_BUFFER_SIZE - 1];
 -      int n_to_read;
  
 -      /* Determine how many characters we should *try* to read.  */
 +  if (err && !nread)
 +    nread = -1;
 +
 +  return nread;
 +}
 +
 +/* This is the tty way of reading available input.
 +
 +   Note that each terminal device has its own `struct display' object,
 +   and so this function is called once for each individual termcap
 +   display.  The first parameter indicates which device to read from.  */
 +
 +int
 +tty_read_avail_input (struct display *display,
 +                      int expected,
 +                      struct input_event *hold_quit)
 +{
 +  /* Using KBD_BUFFER_SIZE - 1 here avoids reading more than
 +     the kbd_buffer can really hold.  That may prevent loss
 +     of characters on some systems when input is stuffed at us.  */
 +  unsigned char cbuf[KBD_BUFFER_SIZE - 1];
 +  int n_to_read, i;
 +  struct tty_display_info *tty = display->display_info.tty;
 +  int nread = 0;
 +
 +  if (display->type != output_termcap)
 +    abort ();
 +
 +  /* XXX I think the following code should be moved to separate hook
 +     functions in system-dependent files. */
  #ifdef WINDOWSNT
 -      return 0;
 +  return 0;
  #else /* not WINDOWSNT */
  #ifdef MSDOS
 -      n_to_read = dos_keysns ();
 -      if (n_to_read == 0)
 -      return 0;
 +  n_to_read = dos_keysns ();
 +  if (n_to_read == 0)
 +    return 0;
 +
 +  cbuf[0] = dos_keyread ();
 +  nread = 1;
 +
  #else /* not MSDOS */
 +
 +  if (! tty->term_initted)      /* In case we get called during bootstrap. */
 +    return 0;
 +
 +  if (! tty->input)
 +    return 0;                   /* The terminal is suspended. */
 +
 +  /* Determine how many characters we should *try* to read.  */
  #ifdef FIONREAD
 -      /* Find out how much input is available.  */
 -      if (ioctl (input_fd, FIONREAD, &n_to_read) < 0)
 -      /* Formerly simply reported no input, but that sometimes led to
 -         a failure of Emacs to terminate.
 -         SIGHUP seems appropriate if we can't reach the terminal.  */
 -      /* ??? Is it really right to send the signal just to this process
 -         rather than to the whole process group?
 -         Perhaps on systems with FIONREAD Emacs is alone in its group.  */
 -      {
 -        if (! noninteractive)
 -          kill (getpid (), SIGHUP);
 -        else
 -          n_to_read = 0;
 -      }
 -      if (n_to_read == 0)
 -      return 0;
 -      if (n_to_read > sizeof cbuf)
 -      n_to_read = sizeof cbuf;
 +  /* Find out how much input is available.  */
 +  if (ioctl (fileno (tty->input), FIONREAD, &n_to_read) < 0)
 +    {
 +      if (! noninteractive)
 +        return -2;          /* Close this display. */
 +      else
 +        n_to_read = 0;
 +    }
 +  if (n_to_read == 0)
 +    return 0;
 +  if (n_to_read > sizeof cbuf)
 +    n_to_read = sizeof cbuf;
  #else /* no FIONREAD */
  #if defined (USG) || defined (DGUX) || defined(CYGWIN)
 -      /* Read some input if available, but don't wait.  */
 -      n_to_read = sizeof cbuf;
 -      fcntl (input_fd, F_SETFL, O_NDELAY);
 +  /* Read some input if available, but don't wait.  */
 +  n_to_read = sizeof cbuf;
 +  fcntl (fileno (tty->input), F_SETFL, O_NDELAY);
  #else
 -      you lose;
 +  you lose;
  #endif
  #endif
 -#endif /* not MSDOS */
 -#endif /* not WINDOWSNT */
  
 -      /* Now read; for one reason or another, this will not block.
 -       NREAD is set to the number of chars read.  */
 -      do
 -      {
 -#ifdef MSDOS
 -        cbuf[0] = dos_keyread ();
 -        nread = 1;
 -#else
 -        nread = emacs_read (input_fd, cbuf, n_to_read);
 -#endif
 -        /* POSIX infers that processes which are not in the session leader's
 -           process group won't get SIGHUP's at logout time.  BSDI adheres to
 -           this part standard and returns -1 from read (0) with errno==EIO
 -           when the control tty is taken away.
 -           Jeffrey Honig <jch@bsdi.com> says this is generally safe.  */
 -        if (nread == -1 && errno == EIO)
 -          kill (0, SIGHUP);
 +  /* Now read; for one reason or another, this will not block.
 +     NREAD is set to the number of chars read.  */
 +  do
 +    {
 +      nread = emacs_read (fileno (tty->input), cbuf, n_to_read);
 +      /* POSIX infers that processes which are not in the session leader's
 +         process group won't get SIGHUP's at logout time.  BSDI adheres to
 +         this part standard and returns -1 from read (0) with errno==EIO
 +         when the control tty is taken away.
 +         Jeffrey Honig <jch@bsdi.com> says this is generally safe. */
 +      if (nread == -1 && errno == EIO)
 +        return -2;          /* Close this display. */
  #if defined (AIX) && (! defined (aix386) && defined (_BSD))
 -        /* The kernel sometimes fails to deliver SIGHUP for ptys.
 -           This looks incorrect, but it isn't, because _BSD causes
 -           O_NDELAY to be defined in fcntl.h as O_NONBLOCK,
 -           and that causes a value other than 0 when there is no input.  */
 -        if (nread == 0)
 -          kill (0, SIGHUP);
 +      /* The kernel sometimes fails to deliver SIGHUP for ptys.
 +         This looks incorrect, but it isn't, because _BSD causes
 +         O_NDELAY to be defined in fcntl.h as O_NONBLOCK,
 +         and that causes a value other than 0 when there is no input.  */
 +      if (nread == 0)
 +        return -2;          /* Close this display. */
  #endif
 -      }
 -      while (
 -           /* We used to retry the read if it was interrupted.
 -              But this does the wrong thing when O_NDELAY causes
 -              an EAGAIN error.  Does anybody know of a situation
 -              where a retry is actually needed?  */
 +    }
 +  while (
 +         /* We used to retry the read if it was interrupted.
 +            But this does the wrong thing when O_NDELAY causes
 +            an EAGAIN error.  Does anybody know of a situation
 +            where a retry is actually needed?  */
  #if 0
 -           nread < 0 && (errno == EAGAIN
 +         nread < 0 && (errno == EAGAIN
  #ifdef EFAULT
 -                         || errno == EFAULT
 +                       || errno == EFAULT
  #endif
  #ifdef EBADSLT
 -                         || errno == EBADSLT
 +                       || errno == EBADSLT
  #endif
 -                         )
 +                       )
  #else
 -           0
 +         0
  #endif
 -           );
 +         );
  
  #ifndef FIONREAD
  #if defined (USG) || defined (DGUX) || defined (CYGWIN)
diff --cc src/keymap.c
Simple merge
diff --cc src/lisp.h
Simple merge
diff --cc src/lread.c
Simple merge
diff --cc src/msdos.c
Simple merge
diff --cc src/process.c
Simple merge
diff --cc src/window.c
Simple merge
diff --cc src/xdisp.c
Simple merge
diff --cc src/xfaces.c
Simple merge
diff --cc src/xmenu.c
Simple merge
diff --cc src/xselect.c
Simple merge