all repos — acme @ 12944bdf68af3bcd8ac3bb596418823cbe5d7396

fork of the acme editor from plan9port - keybinds, tweaks, config.h, etc

added keybinds from lmumar's fork
Iris Lightshard nilix@nilfm.cc
commit

12944bdf68af3bcd8ac3bb596418823cbe5d7396

parent

91397e2c43e94ca8b05b889c170e2fe8cc918884

1 files changed, 64 insertions(+), 40 deletions(-)

jump to
M text.ctext.c

@@ -388,7 +388,7 @@ textsetselect(u, u->q0, u->q1);

textscrdraw(u); } } - + } if(q0 < t->iq1) t->iq1 += n;

@@ -549,7 +549,7 @@ r = textreadc(t, q-1);

if(r == '\n'){ /* eat at most one more character */ if(q == t->q0) /* eat the newline */ --q; - break; + break; } if(c == 0x17){ eq = isalnum(r);

@@ -663,7 +663,6 @@ free(str);

free(path); return rp; } - void texttype(Text *t, Rune r) {

@@ -692,10 +691,27 @@ if(t->q1 < t->file->b.nc)

textshow(t, t->q1+1, t->q1+1, TRUE); return; case Kdown: - if(t->what == Tag) - goto Tagdown; - n = t->fr.maxlines/3; - goto case_Down; + typecommit(t); + q0 = t->q0; + nnb = 0; + if(t->q0>0 && textreadc(t, t->q0-1)!='\n') + nnb = textbswidth(t, 0x15); + while(q0<t->file->b.nc && textreadc(t, q0)!='\n') + q0++; + if (q0 == t->file->b.nc) { + textshow(t, q0, q0, TRUE); + return; + } + q0++; + while(nnb>=0 && q0<t->file->b.nc) { + if (textreadc(t, q0)=='\n') + break; + nnb--; + if (nnb >= 0) + q0++; + } + textshow(t, q0, q0, TRUE); + return; case Kscrollonedown: if(t->what == Tag) goto Tagdown;

@@ -710,10 +726,26 @@ q0 = t->org+frcharofpt(&t->fr, Pt(t->fr.r.min.x, t->fr.r.min.y+n*t->fr.font->height));

textsetorigin(t, q0, TRUE); return; case Kup: - if(t->what == Tag) - goto Tagup; - n = t->fr.maxlines/3; - goto case_Up; + typecommit(t); + nnb = 0; + if(t->q0>0 && textreadc(t, t->q0-1)!='\n') + nnb = textbswidth(t, 0x15); + q1 = nnb; + if(t->q0-nnb > 1 && textreadc(t, t->q0-nnb-1)=='\n') + nnb++; + q0 = t->q0-nnb; + textshow(t, q0, q0, TRUE); + + nnb = textbswidth(t, 0x15); + if (nnb <= 1) + return; + q0 = q0-nnb; + while (q1>0 && textreadc(t, q0)!='\n') { + q1--; + q0++; + } + textshow(t, q0, q0, TRUE); + return; case Kscrolloneup: if(t->what == Tag) goto Tagup;

@@ -726,25 +758,6 @@ q0 = textbacknl(t, t->org, n);

textsetorigin(t, q0, TRUE); return; case Khome: - typecommit(t); - if(t->org > t->iq1) { - q0 = textbacknl(t, t->iq1, 1); - textsetorigin(t, q0, TRUE); - } else - textshow(t, 0, 0, FALSE); - return; - case Kend: - typecommit(t); - if(t->iq1 > t->org+t->fr.nchars) { - if(t->iq1 > t->file->b.nc) { - // should not happen, but does. and it will crash textbacknl. - t->iq1 = t->file->b.nc; - } - q0 = textbacknl(t, t->iq1, 1); - textsetorigin(t, q0, TRUE); - } else - textshow(t, t->file->b.nc, t->file->b.nc, FALSE); - return; case 0x01: /* ^A: beginning of line */ typecommit(t); /* go to where ^U would erase, if not already at BOL */

@@ -753,6 +766,7 @@ if(t->q0>0 && textreadc(t, t->q0-1)!='\n')

nnb = textbswidth(t, 0x15); textshow(t, t->q0-nnb, t->q0-nnb, TRUE); return; + case Kend: case 0x05: /* ^E: end of line */ typecommit(t); q0 = t->q0;

@@ -760,19 +774,26 @@ while(q0<t->file->b.nc && textreadc(t, q0)!='\n')

q0++; textshow(t, q0, q0, TRUE); return; + case 0x03: /* Ctrl-c: copy */ case Kcmd+'c': /* %C: copy */ typecommit(t); cut(t, t, nil, TRUE, FALSE, nil, 0); return; + case 0x1a: /* Ctrl-z: undo */ case Kcmd+'z': /* %Z: undo */ typecommit(t); undo(t, nil, nil, TRUE, 0, nil, 0); return; + case 0x19: /* Ctrl-y: redo */ case Kcmd+'Z': /* %-shift-Z: redo */ typecommit(t); undo(t, nil, nil, FALSE, 0, nil, 0); - return; - + return; + case 0x13: /* Ctrl-S: put file */ + case Kcmd+'s': + typecommit(t); + put(&(t->w)->body, nil, nil, XXX, XXX, nil, 0); + return; Tagdown: /* expand tag to show all text */ if(!t->w->tagexpand){

@@ -780,7 +801,7 @@ t->w->tagexpand = TRUE;

winresize(t->w, t->w->r, FALSE, TRUE); } return; - + Tagup: /* shrink tag to single line */ if(t->w->tagexpand){

@@ -796,6 +817,7 @@ filemark(t->file);

} /* cut/paste must be done after the seq++/filemark */ switch(r){ + case 0x18: /* Ctrl-X: cut */ case Kcmd+'x': /* %X: cut */ typecommit(t); if(t->what == Body){

@@ -806,6 +828,7 @@ cut(t, t, nil, TRUE, TRUE, nil, 0);

textshow(t, t->q0, t->q0, 1); t->iq1 = t->q0; return; + case 0x16: /* Ctrl-V: paste */ case Kcmd+'v': /* %V: paste */ typecommit(t); if(t->what == Body){

@@ -939,6 +962,7 @@ if(r=='\n' && t->w!=nil)

wincommit(t->w, t); t->iq1 = t->q0; } + void textcommit(Text *t, int tofile)

@@ -1192,7 +1216,7 @@ void

textsetselect(Text *t, uint q0, uint q1) { int p0, p1, ticked; - + /* t->fr.p0 and t->fr.p1 are always right; t->q0 and t->q1 may be off */ t->q0 = q0; t->q1 = q1;

@@ -1345,7 +1369,7 @@ textselect23(Text *t, uint *q0, uint *q1, Image *high, int mask)

{ uint p0, p1; int buts; - + p0 = xselect(&t->fr, mousectl, high, &p1); buts = mousectl->m.buttons; if((buts & mask) == 0){

@@ -1412,7 +1436,7 @@ uint q;

if(textclickhtmlmatch(t, q0, q1)) return; - + for(i=0; left[i]!=nil; i++){ q = *q0; l = left[i];

@@ -1444,7 +1468,7 @@ }

return; } } - + /* try filling out word to right */ while(*q1<t->file->b.nc && isalnum(textreadc(t, *q1))) (*q1)++;

@@ -1518,7 +1542,7 @@ static int

ishtmlend(Text *t, uint q, uint *q0) { int c, c1, c2; - + if(q < 2) return 0; if(textreadc(t, --q) != '>')

@@ -1546,7 +1570,7 @@ textclickhtmlmatch(Text *t, uint *q0, uint *q1)

{ int depth, n; uint q, nq; - + q = *q0; // after opening tag? scan forward for closing tag if(ishtmlend(t, q, nil) == 1) {

@@ -1583,7 +1607,7 @@ }

q--; } } - + return 0; }