emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r100961: Enable ICANON (Bug#6771). An


From: Jan D.
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r100961: Enable ICANON (Bug#6771). Any long line problem must be solved differently.
Date: Mon, 02 Aug 2010 09:03:12 +0200
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 100961
committer: Jan D. <address@hidden>
branch nick: trunk
timestamp: Mon 2010-08-02 09:03:12 +0200
message:
  Enable ICANON (Bug#6771).  Any long line problem must be solved differently.
  
  There is AFAIK no bug report or test case for the long line problem.
  
  * sysdep.c (child_setup_tty): Enable ICANON in lflags and set VEOF
  to Control-D (Bug#6771).
modified:
  src/ChangeLog
  src/sysdep.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2010-08-02 06:42:03 +0000
+++ b/src/ChangeLog     2010-08-02 07:03:12 +0000
@@ -1,3 +1,8 @@
+2010-08-02  Jan Djärv  <address@hidden>
+
+       * sysdep.c (child_setup_tty): Enable ICANON in lflags and set VEOF
+       to Control-D (Bug#6771).
+
 2010-08-02  Juanma Barranquero  <address@hidden>
 
        * editfns.c (Fregion_beginning, Fregion_end): Doc fixes (bug#6493).

=== modified file 'src/sysdep.c'
--- a/src/sysdep.c      2010-07-29 20:01:08 +0000
+++ b/src/sysdep.c      2010-08-02 07:03:12 +0000
@@ -511,7 +511,16 @@
      process.c:send_process, and instead we disable ICANON by default,
      so if a subsprocess sets up ICANON, it's his problem (or the Elisp
      package that talks to it) to deal with lines that are too long.  */
-  s.main.c_lflag &= ~ICANON;   /* Disable line editing and eof processing */
+  /* There is no more "send eof to flush" going on (which is wrong and
+     unportable in itself), and disabling ICANON breaks a lot of stuff
+     and shows literal ^D in many cases.  The correct way to handle too
+     much output is to buffer what could not be written and then write it
+     again when select returns ok for writing.  This has it own set of
+     problems. Write is now asynchronous, is that a problem?
+     How much do we buffer, and what do we do when that limit is reached?  */
+
+  s.main.c_lflag |= ICANON;    /* Enable line editing and eof processing */
+  s.main.c_cc[VEOF] = 'D'&037; /* Control-D */
   s.main.c_cc[VMIN] = 1;
   s.main.c_cc[VTIME] = 0;
 


reply via email to

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