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 */