diff options
author | Rob Pike <robpike@gmail.com> | 2013-10-22 16:47:48 -0700 |
---|---|---|
committer | Rob Pike <robpike@gmail.com> | 2013-10-22 16:47:48 -0700 |
commit | 5a69e405fcae96b476cdd7a0767e87b94c0b7266 (patch) | |
tree | 2ae94b206607d5acf664580cca5d95360e522e3b | |
parent | 075c3bdc54b5201350b88b53d5330cc6a9cc499d (diff) | |
download | plan9port-5a69e405fcae96b476cdd7a0767e87b94c0b7266.tar.gz plan9port-5a69e405fcae96b476cdd7a0767e87b94c0b7266.tar.bz2 plan9port-5a69e405fcae96b476cdd7a0767e87b94c0b7266.zip |
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
-rw-r--r-- | plumb/basic | 13 | ||||
-rw-r--r-- | plumb/fileaddr | 2 | ||||
-rw-r--r-- | src/cmd/acme/text.c | 18 |
3 files changed, 29 insertions, 4 deletions
diff --git a/plumb/basic b/plumb/basic index 5ab07ec4..f728132f 100644 --- a/plumb/basic +++ b/plumb/basic @@ -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 diff --git a/plumb/fileaddr b/plumb/fileaddr index cd2f120f..f5595bd4 100644 --- a/plumb/fileaddr +++ b/plumb/fileaddr @@ -1,4 +1,4 @@ addrelem='((#?[0-9]+)|(/[A-Za-z0-9_\^]+/?)|[.$])' addr=:($addrelem([,;+\-]$addrelem)*) -twocolonaddr = :([0-9]+)[:.]([0-9]+) +twocolonaddr = ([0-9]+)[:.]([0-9]+) diff --git a/src/cmd/acme/text.c b/src/cmd/acme/text.c index 3c08cd64..5a491b1e 100644 --- a/src/cmd/acme/text.c +++ b/src/cmd/acme/text.c @@ -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; @@ -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){ @@ -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) |