A new "win" and a wily patch

  • From: Richard C Bilson <rcbilson@xxxxxxxxxxxxxxxxxxxxxx>
  • To: wilyfans@xxxxxxxxxxxxx
  • Date: Sat, 9 Aug 2003 16:12:45 -0400

I have revised the "win" terminal interface to create what I consider
to be a better terminal experience.  The added features include the
ability to send end-of-file and signals to subprocesses, optional
scrolling of the window when output occurs, as well as some
communication with gdb.

I have put up a web page describing my additions in more detail and
giving access to the source at http://plg.uwaterloo.ca/~rcbilson/win.
I know that it works on Linux and Solaris and am fairly confident that
it will not work on BSD; I'm willing to accept portability patches.

I did make use of a small patch to wily, which I include here (it was
made against the 9libs version, if that matters).  Its intent is to
allow an rpc client to make a goto request that changes the selection
without warping the mouse cursor.  I found this essential for some of
the changes I made to win, and I believe it could have other
applications as well.

I'm happy to receive any feedback, either on the patch or on the program.
There is still room for improvement of win, I'm sure, but I have been
using this version for a while now and am quite happy with it.

- Richard

--- include/msg.h       21 Jun 2003 20:42:57 -0000      1.1.1.1
+++ include/msg.h       21 Jun 2003 21:27:52 -0000      1.2
@@ -62,6 +62,12 @@
        char    *       s;
 };
 
+typedef enum GOTOtype {
+       WMGOTO_NOSHOW,
+       WMGOTO_SHOWWARP,
+       WMGOTO_SHOW
+} GOTOtype;
+
 /* ../libmsg/connect.c */
 
 int            client_connect  (void);
--- wily/msg.c  21 Jun 2003 20:42:57 -0000      1.1.1.1
+++ wily/msg.c  21 Jun 2003 21:28:14 -0000      1.2
@@ -265,10 +265,11 @@
 
 static void
 handlegoto(Msg*m, View*v) {
-       Bool    show;
+       Bool    show, warp;
        Range   r;
        
-       show = (m->t == WEgoto) || m->flag;
+       show = (m->t == WEgoto) || (m->flag != WMGOTO_NOSHOW);
+       warp = (m->t == WEgoto) || (m->flag == WMGOTO_SHOWWARP);
 
        /* We get the search start position 
         * either from 'm' or 'dot' in the view.
@@ -281,6 +282,8 @@
                if (show) {
                        view_show(v, r);
                        view_select(v, r);
+               }
+               if (warp) {
                        view_warp(v, r);
                }
                m->r = r;

Other related posts: