shithub: riscv

Download patch

ref: 6a2b5055f5c2827d66c18f2c6e5aed284956f980
parent: 36287edc888c537b9ee37ae8530bd9c5b35227a1
author: ppatience0 <[email protected]>
date: Wed May 8 13:47:48 EDT 2013

samterm: move cursor to next tabstop or non-space character before backspacing in spaces mode. this makes it less annoying to backspace (it's more like tabs).

--- a/sys/src/cmd/samterm/main.c
+++ b/sys/src/cmd/samterm/main.c
@@ -359,19 +359,29 @@
 	return col;
 }
 
+int
+sptotab(Rasp *r, long p)
+{
+	int i, col, n;
+
+	col = getcol(r, p);
+	if((n = maxtab - col % maxtab) == maxtab)
+		n = 0;
+	for(i = 0; p < r->nrunes && raspc(r, p)==' ' && i<n; p++, i++)
+		;
+	return i;
+}
+
 long
 del(Rasp *r, long o, long p)
 {
-	int i, col, n;
+	int i;
 
 	if(--p < o)
 		return o;
 	if(!spacesindent || raspc(r, p)!=' ')
 		return p;
-	col = getcol(r, p) + 1;
-	if((n = col % maxtab) == 0)
-		n = maxtab;
-	for(i = 0; p-1>=o && raspc(r, p-1)==' ' && i<n-1; --p, i++)
+	for(i = 0; p-1>=o && raspc(r, p-1)==' ' && i<maxtab-1; --p, i++)
 		;
 	return p>=o? p : o;
 }
@@ -622,6 +632,8 @@
 			switch(c){
 			case '\b':
 			case 0x7F:	/* del */
+				if(spacesindent)
+					a += sptotab(&t->rasp, a);
 				l->p0 = del(&t->rasp, l->origin, a);
 				break;
 			case 0x15:	/* ctrl-u */