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
This commit is contained in:
Rob Pike 2013-10-22 16:47:48 -07:00
parent 075c3bdc54
commit 5a69e405fc
3 changed files with 29 additions and 4 deletions

View file

@ -59,9 +59,18 @@ arg isfile $0
plumb to openoffice plumb to openoffice
plumb start openoffice $file 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 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 arg isfile $1
data set $file data set $file
attr add addr=$2-#1+#$3 attr add addr=$2-#1+#$3

View file

@ -1,4 +1,4 @@
addrelem='((#?[0-9]+)|(/[A-Za-z0-9_\^]+/?)|[.$])' addrelem='((#?[0-9]+)|(/[A-Za-z0-9_\^]+/?)|[.$])'
addr=:($addrelem([,;+\-]$addrelem)*) addr=:($addrelem([,;+\-]$addrelem)*)
twocolonaddr = :([0-9]+)[:.]([0-9]+) twocolonaddr = ([0-9]+)[:.]([0-9]+)

View file

@ -808,6 +808,7 @@ texttype(Text *t, Rune r)
switch(r){ switch(r){
case 0x06: /* ^F: complete */ case 0x06: /* ^F: complete */
case Kins: case Kins:
typecommit(t);
rp = textcomplete(t); rp = textcomplete(t);
if(rp == nil) if(rp == nil)
return; return;
@ -1079,6 +1080,8 @@ textshow(Text *t, uint q0, uint q1, int doselect)
{ {
int qe; int qe;
int nl; int nl;
int tsd;
int nc;
uint q; uint q;
if(t->what != Body){ if(t->what != Body){
@ -1091,7 +1094,20 @@ textshow(Text *t, uint q0, uint q1, int doselect)
if(doselect) if(doselect)
textsetselect(t, q0, q1); textsetselect(t, q0, q1);
qe = t->org+t->fr.nchars; 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); textscrdraw(t);
else{ else{
if(t->w->nopen[QWevent] > 0) if(t->w->nopen[QWevent] > 0)