commit e9b87ca
ohmu
·
2026-07-17 08:28:01 +0300 MSK
parent 679128c
removed erasing one more character when erasing selection with delete/backspace
1 files changed,
+29,
-21
+29,
-21
1@@ -890,6 +890,35 @@ texttype(Text *t, Rune r)
2 textshow(t, t->q0, t->q1, 1);
3 t->iq1 = t->q1;
4 return;
5+ case 0x08: /* Backspace */
6+ typecommit(t);
7+ if(t->q0 == 0) return;
8+ if(t->q0 == t->q1){
9+ q0 = t->q0 - 1;
10+ q1 = t->q0;
11+ } else {
12+ q0 = t->q0;
13+ q1 = t->q1;
14+ }
15+ textdelete(t, q0, q1, TRUE);
16+ textsetselect(t, q0, q0);
17+ t->iq1 = q0;
18+ return;
19+
20+ case 0x7F: /* Delete */
21+ typecommit(t);
22+ if(t->q0 == t->file->b.nc) return;
23+ if(t->q0 == t->q1){
24+ q0 = t->q0;
25+ q1 = q0 + 1;
26+ } else {
27+ q0 = t->q0;
28+ q1 = t->q1;
29+ }
30+ textdelete(t, q0, q1, TRUE);
31+ textsetselect(t, q0, q0);
32+ t->iq1 = q0;
33+ return;
34 }
35
36 if(t->q1 > t->q0){
37@@ -926,27 +955,6 @@ texttype(Text *t, Rune r)
38 * apparently it works like ^U and erases whole lines. i should learn c
39 */
40
41-
42- case 0x08: /* ^H: erase character */
43- if (t->q0 == 0)
44- return;
45- typecommit(t);
46- q0 = t->q0 - 1;
47- q1 = t->q0;
48- textdelete(t, q0, q1, TRUE);
49- textshow(t, t->q0, t->q0, 1);
50- t->iq1 = t->q0;
51- return;
52- case 0x7F:
53- if (t->q0 == t->file->b.nc)
54- return;
55- typecommit(t);
56- q0 = t->q0;
57- q1 = q0 + 1;
58- textdelete(t, q0, q1, TRUE);
59- textshow(t, t->q0, t->q0, 1);
60- t->iq1 = t->q0;
61- return;
62 case 0x0C:
63 typecommit(t);
64 q0 = 0;