plan9portdiff/acme.diff

213 lines
6.2 KiB
Diff
Raw Normal View History

2020-08-27 12:34:05 +02:00
diff --git a/src/cmd/acme/acme.c b/src/cmd/acme/acme.c
index e5658a4e..2c79b387 100644
--- a/src/cmd/acme/acme.c
+++ b/src/cmd/acme/acme.c
@@ -1034,6 +1034,13 @@ Cursor2 boxcursor2 = {
0x00, 0x00, 0x00, 0x00}
};
+enum {
+ COLOR_FG = 0xE8E8E8FF,
+ COLOR_BG = 0x111111FF,
+ COLOR_LBG = 0x444444FF,
+ COLOR_HL = 0x666666FF
+};
+
void
iconinit(void)
{
@@ -1041,19 +1048,17 @@ iconinit(void)
Image *tmp;
if(tagcols[BACK] == nil) {
- /* Blue */
- tagcols[BACK] = allocimagemix(display, DPalebluegreen, DWhite);
- tagcols[HIGH] = allocimage(display, Rect(0,0,1,1), screen->chan, 1, DPalegreygreen);
- tagcols[BORD] = allocimage(display, Rect(0,0,1,1), screen->chan, 1, DPurpleblue);
- tagcols[TEXT] = display->black;
- tagcols[HTEXT] = display->black;
-
- /* Yellow */
- textcols[BACK] = allocimagemix(display, DPaleyellow, DWhite);
- textcols[HIGH] = allocimage(display, Rect(0,0,1,1), screen->chan, 1, DDarkyellow);
- textcols[BORD] = allocimage(display, Rect(0,0,1,1), screen->chan, 1, DYellowgreen);
- textcols[TEXT] = display->black;
- textcols[HTEXT] = display->black;
+ tagcols[BACK] = allocimage(display, Rect(0,0,1,1), RGBA32, 1, COLOR_LBG);
+ tagcols[HIGH] = allocimage(display, Rect(0,0,1,1), RGBA32, 1, COLOR_FG);
+ tagcols[BORD] = allocimage(display, Rect(0,0,1,1), RGBA32, 1, COLOR_FG);
+ tagcols[TEXT] = allocimage(display, Rect(0,0,1,1), RGBA32, 1, COLOR_FG);
+ tagcols[HTEXT] = allocimage(display, Rect(0,0,1,1), RGBA32, 1, COLOR_HL);
+
+ textcols[BACK] = allocimage(display, Rect(0,0,1,1), RGBA32, 1, COLOR_BG);
+ textcols[HIGH] = allocimage(display, Rect(0,0,1,1), RGBA32, 1, COLOR_FG);
+ textcols[BORD] = allocimage(display, Rect(0,0,1,1), RGBA32, 1, COLOR_LBG);
+ textcols[TEXT] = allocimage(display, Rect(0,0,1,1), RGBA32, 1, COLOR_FG);
+ textcols[HTEXT] = allocimage(display, Rect(0,0,1,1), RGBA32, 1, COLOR_HL);
}
r = Rect(0, 0, Scrollwid+ButtonBorder, font->height+1);
diff --git a/src/cmd/acme/text.c b/src/cmd/acme/text.c
2020-08-27 21:17:49 +02:00
index 09422dda..58e79e15 100644
2020-08-27 12:34:05 +02:00
--- a/src/cmd/acme/text.c
+++ b/src/cmd/acme/text.c
2020-08-27 16:11:43 +02:00
@@ -694,8 +694,16 @@ texttype(Text *t, Rune r)
2020-08-27 12:34:05 +02:00
case Kdown:
2020-08-27 16:11:43 +02:00
if(t->what == Tag)
goto Tagdown;
2020-08-27 12:34:05 +02:00
- n = t->fr.maxlines/3;
- goto case_Down;
+ typecommit(t);
+ q0 = t->q0;
+ while(q0<t->file->b.nc && textreadc(t, q0)!='\n')
+ q0++;
+ if(q0<t->file->b.nc && textreadc(t, q0)=='\n')
+ q0++;
+ while(q0<t->file->b.nc && textreadc(t, q0)!='\n')
+ q0++;
+ textshow(t, q0, q0, TRUE);
+ return;
case Kscrollonedown:
if(t->what == Tag)
goto Tagdown;
2020-08-27 20:49:11 +02:00
@@ -708,12 +716,19 @@ texttype(Text *t, Rune r)
case_Down:
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);
+ if(n>10)
+ textshow(t, q0, q0, TRUE);
return;
2020-08-27 12:34:05 +02:00
case Kup:
if(t->what == Tag)
goto Tagup;
- n = t->fr.maxlines/3;
- goto case_Up;
2020-08-27 16:11:43 +02:00
+ typecommit(t);
+ nnb = 0;
+ if(t->q0 > 0 && textreadc(t, t->q0-1) != '\n')
+ nnb = textbswidth(t, 0x15);
2020-08-27 18:21:34 +02:00
+ if(t->q0-nnb > 0)
2020-08-27 16:11:43 +02:00
+ textshow(t, t->q0-nnb-1, t->q0-nnb-1, TRUE);
2020-08-27 12:34:05 +02:00
+ return;
case Kscrolloneup:
if(t->what == Tag)
goto Tagup;
2020-08-27 20:49:11 +02:00
@@ -724,8 +739,10 @@ texttype(Text *t, Rune r)
case_Up:
2020-08-27 12:34:05 +02:00
q0 = textbacknl(t, t->org, n);
textsetorigin(t, q0, TRUE);
2020-08-27 20:49:11 +02:00
+ if(n>10)
+ textshow(t, q0, q0, TRUE);
2020-08-27 12:34:05 +02:00
return;
- case Khome:
+ case 0x01: /* ^A: beginning of file */
typecommit(t);
if(t->org > t->iq1) {
q0 = textbacknl(t, t->iq1, 1);
2020-08-27 20:49:11 +02:00
@@ -733,7 +750,7 @@ texttype(Text *t, Rune r)
2020-08-27 12:34:05 +02:00
} else
textshow(t, 0, 0, FALSE);
return;
- case Kend:
+ case 0x05: /* ^E: end of file */
typecommit(t);
if(t->iq1 > t->org+t->fr.nchars) {
if(t->iq1 > t->file->b.nc) {
2020-08-27 20:49:11 +02:00
@@ -745,7 +762,7 @@ texttype(Text *t, Rune r)
2020-08-27 12:34:05 +02:00
} else
textshow(t, t->file->b.nc, t->file->b.nc, FALSE);
return;
- case 0x01: /* ^A: beginning of line */
+ case Khome: /* beginning of line */
typecommit(t);
/* go to where ^U would erase, if not already at BOL */
nnb = 0;
2020-08-27 21:17:49 +02:00
@@ -753,26 +770,33 @@ texttype(Text *t, Rune r)
2020-08-27 12:34:05 +02:00
nnb = textbswidth(t, 0x15);
textshow(t, t->q0-nnb, t->q0-nnb, TRUE);
return;
- case 0x05: /* ^E: end of line */
+ case Kend: /* end of line */
typecommit(t);
q0 = t->q0;
while(q0<t->file->b.nc && textreadc(t, q0)!='\n')
q0++;
textshow(t, q0, q0, TRUE);
return;
- case Kcmd+'c': /* %C: copy */
+ case Kcmd+'c': /* %C: copy */
+ case 0x03: /* ^C */
typecommit(t);
cut(t, t, nil, TRUE, FALSE, nil, 0);
return;
- case Kcmd+'z': /* %Z: undo */
- typecommit(t);
+ case Kcmd+'z': /* %Z: undo */
+ case 0x1A: /* ^Z */
+ typecommit(t);
undo(t, nil, nil, TRUE, 0, nil, 0);
return;
- case Kcmd+'Z': /* %-shift-Z: redo */
+ case Kcmd+'Z': /* %-shift-Z: redo */
+ case 0x19: /* ^Y */
typecommit(t);
undo(t, nil, nil, FALSE, 0, nil, 0);
return;
2020-08-27 21:17:49 +02:00
-
+ case Kcmd+'s': /* %S: save */
+ case 0x13: /* ^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){
@@ -796,7 +820,8 @@ texttype(Text *t, Rune r)
2020-08-27 12:34:05 +02:00
}
/* cut/paste must be done after the seq++/filemark */
switch(r){
- case Kcmd+'x': /* %X: cut */
+ case Kcmd+'x': /* %X: cut */
+ case 0x18: /* ^X */
typecommit(t);
if(t->what == Body){
seq++;
2020-08-27 21:17:49 +02:00
@@ -806,7 +831,8 @@ texttype(Text *t, Rune r)
2020-08-27 12:34:05 +02:00
textshow(t, t->q0, t->q0, 1);
t->iq1 = t->q0;
return;
- case Kcmd+'v': /* %V: paste */
+ case Kcmd+'v': /* %V: paste */
+ case 0x16: /* ^V */
typecommit(t);
if(t->what == Body){
seq++;
2020-08-27 21:17:49 +02:00
@@ -825,7 +851,7 @@ texttype(Text *t, Rune r)
2020-08-27 12:34:05 +02:00
}
textshow(t, t->q0, t->q0, 1);
switch(r){
- case 0x06: /* ^F: complete */
+ case 0x06: /* ^F: complete */
case Kins:
typecommit(t);
rp = textcomplete(t);
2020-08-27 21:17:49 +02:00
@@ -844,9 +870,15 @@ texttype(Text *t, Rune r)
2020-08-27 12:34:05 +02:00
typecommit(t);
t->iq1 = t->q0;
return;
- case 0x08: /* ^H: erase character */
- case 0x15: /* ^U: erase line */
- case 0x17: /* ^W: erase word */
2020-08-27 15:33:39 +02:00
+ case 0x7F: /* DEL: erase character in front */
+ if (t->q0>=t->file->b.nc)
+ return;
+ if (t->q0 == t->q1)
+ textshow(t, t->q0+1, t->q0+1,TRUE);
+ r = 0x08;
2020-08-27 12:34:05 +02:00
+ case 0x08: /* ^H: erase character */
+ case 0x15: /* ^U: erase line */
+ case 0x17: /* ^W: erase word */
if(t->q0 == 0) /* nothing to erase */
return;
nnb = textbswidth(t, r);