tacme: scroll a directory window when navigating if: - the cursor is on the last line - the navigation would put the cursor over the tag of the following text - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 5a69e405fcae96b476cdd7a0767e87b94c0b7266
 (DIR) parent 075c3bdc54b5201350b88b53d5330cc6a9cc499d
 (HTM) Author: Rob Pike <robpike@gmail.com>
       Date:   Tue, 22 Oct 2013 16:47:48 -0700
       
       acme: scroll a directory window when navigating if:
               - the cursor is on the last line
               - the navigation would put the cursor over the tag of the following text
       
       R=rsc
       CC=smckean83
       https://codereview.appspot.com/15280045
       
       Diffstat:
         M plumb/basic                         |      13 +++++++++++--
         M plumb/fileaddr                      |       2 +-
         M src/cmd/acme/text.c                 |      18 +++++++++++++++++-
       
       3 files changed, 29 insertions(+), 4 deletions(-)
       ---
 (DIR) diff --git a/plumb/basic b/plumb/basic
       t@@ -59,9 +59,18 @@ arg isfile        $0
        plumb to openoffice
        plumb start openoffice $file
        
       -# existing files tagged by line number:columnumber or linenumber.columnumber, go to editor
       +# existing files tagged by line number:columnumber or linenumber.columnumber, twice, go to editor
        type is text
       -data matches '([.a-zA-Z¡-￿0-9_/\-]*[a-zA-Z¡-￿0-9_/\-])'$twocolonaddr'
       +data matches '([.a-zA-Z¡-￿0-9_/\-]*[a-zA-Z¡-￿0-9_/\-])':$twocolonaddr,$twocolonaddr
       +arg isfile     $1
       +data set       $file
       +attr add       addr=$2-#1+#$3,$4-#1+#$5
       +plumb to edit
       +plumb client $editor
       +
       +# existing files tagged by line number:columnumber or linenumber.columnumber, twice, go to editor
       +type is text
       +data matches '([.a-zA-Z¡-￿0-9_/\-]*[a-zA-Z¡-￿0-9_/\-])':$twocolonaddr
        arg isfile     $1
        data set       $file
        attr add       addr=$2-#1+#$3
 (DIR) diff --git a/plumb/fileaddr b/plumb/fileaddr
       t@@ -1,4 +1,4 @@
        addrelem='((#?[0-9]+)|(/[A-Za-z0-9_\^]+/?)|[.$])'
        addr=:($addrelem([,;+\-]$addrelem)*)
        
       -twocolonaddr = :([0-9]+)[:.]([0-9]+)
       +twocolonaddr = ([0-9]+)[:.]([0-9]+)
 (DIR) diff --git a/src/cmd/acme/text.c b/src/cmd/acme/text.c
       t@@ -808,6 +808,7 @@ texttype(Text *t, Rune r)
                switch(r){
                case 0x06:        /* ^F: complete */
                case Kins:
       +                typecommit(t);
                        rp = textcomplete(t);
                        if(rp == nil)
                                return;
       t@@ -1079,6 +1080,8 @@ textshow(Text *t, uint q0, uint q1, int doselect)
        {
                int qe;
                int nl;
       +        int tsd;
       +        int nc;
                uint q;
        
                if(t->what != Body){
       t@@ -1091,7 +1094,20 @@ textshow(Text *t, uint q0, uint q1, int doselect)
                if(doselect)
                        textsetselect(t, q0, q1);
                qe = t->org+t->fr.nchars;
       -        if(t->org<=q0 && (q0<qe || (q0==qe && qe==t->file->b.nc+t->ncache)))
       +        tsd = FALSE;        /* do we call textscrdraw? */
       +        nc = t->file->b.nc+t->ncache;
       +        if(t->org <= q0){
       +                if(nc==0 || q0<qe)
       +                        tsd = TRUE;
       +                else if(q0==qe && qe==nc){
       +                        if(textreadc(t, nc-1) == '\n'){
       +                                if(t->fr.nlines<t->fr.maxlines)
       +                                        tsd = TRUE;
       +                        }else
       +                                tsd = TRUE;
       +                }
       +        }
       +        if(tsd)
                        textscrdraw(t);
                else{
                        if(t->w->nopen[QWevent] > 0)