twin fixes - plan9port - [fork] Plan 9 from user space
git clone git://src.adamsgaard.dk/plan9port
Log
Files
Refs
README
LICENSE
---
commit 6a6c2663bfd42eab68cc53c42a499798ae6332a3
parent 7d9c0f0f0e041051d3105404ada074cf983cd6ad
Author: Fazlul Shahriar 
Date:   Tue,  5 Jan 2010 14:31:27 -0800

win fixes

- don't exit from a "child" note unless rc exited (code copied from 9term.c)
- ignore writes to the tag; specifically " Send Noscroll" at startup.

R=rsc
CC=codebot
http://codereview.appspot.com/181115

Diffstat:
  M src/cmd/9term/win.c                 |      32 +++++++++++++++++++++++++------

1 file changed, 26 insertions(+), 6 deletions(-)
---
diff --git a/src/cmd/9term/win.c b/src/cmd/9term/win.c
t@@ -108,8 +108,16 @@ hangupnote(void *a, char *msg)
                 noted(NDFLT);
         }
         if(strstr(msg, "child")){
-                /* bug: do better */
-                threadexitsall(0);
+                char buf[128];
+                int n;
+
+                n = awaitnohang(buf, sizeof buf-1);
+                if(n > 0){
+                        buf[n] = 0;
+                        if(atoi(buf) == pid)
+                                threadexitsall(0);
+                }
+                noted(NCONT);
         }
         noted(NDFLT);
 }
t@@ -357,10 +365,22 @@ stdinproc(void *v)
                         print("unknown message %c%c\n", e.c1, e.c2);
                         break;
 
-                case 'E':        /* write to body; can't affect us */
-                        if(debug)
-                                fprint(2, "shift typing %d... ", e.q1-e.q0);
-                        q.p += e.q1-e.q0;
+                case 'E':        /* write to body or tag; can't affect us */
+                        switch(e.c2){
+                        case 'I':
+                        case 'D':                /* body */
+                                if(debug)
+                                        fprint(2, "shift typing %d... ", e.q1-e.q0);
+                                q.p += e.q1-e.q0;
+                                break;
+                        
+                        case 'i':
+                        case 'd':                /* tag */
+                                break;
+                        
+                        default:
+                                goto Unknown;
+                        }
                         break;
 
                 case 'F':        /* generated by our actions; ignore */