diff options
| author | ppatience0 <ppatience0@gmail.com> | 2013-05-08 17:47:48 -0400 |
|---|---|---|
| committer | ppatience0 <ppatience0@gmail.com> | 2013-05-08 17:47:48 -0400 |
| commit | 6a2b5055f5c2827d66c18f2c6e5aed284956f980 (patch) | |
| tree | 425d3b936614ef53fc675c8056cd1d5da80822c4 | |
| parent | 36287edc888c537b9ee37ae8530bd9c5b35227a1 (diff) | |
| download | plan9front-6a2b5055f5c2827d66c18f2c6e5aed284956f980.tar.xz | |
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).
| -rw-r--r-- | sys/src/cmd/samterm/main.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/sys/src/cmd/samterm/main.c b/sys/src/cmd/samterm/main.c index 6ee72c94a..c20091acb 100644 --- a/sys/src/cmd/samterm/main.c +++ b/sys/src/cmd/samterm/main.c @@ -359,19 +359,29 @@ getcol(Rasp *r, long p) 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 @@ type(Flayer *l, int res) /* what a bloody mess this is */ 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 */ |
