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;