aboutsummaryrefslogtreecommitdiff
path: root/toys
diff options
context:
space:
mode:
Diffstat (limited to 'toys')
-rw-r--r--toys/posix/expand.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/toys/posix/expand.c b/toys/posix/expand.c
index 739c326d..bbe6fdf1 100644
--- a/toys/posix/expand.c
+++ b/toys/posix/expand.c
@@ -1,7 +1,5 @@
/* expand.c - expands tabs to space
*
- * FIXME: handle backspace.
- *
* Copyright 2012 Jonathan Clairembault <jonathan at clairembault dot fr>
*
* See http://http://pubs.opengroup.org/onlinepubs/9699919799/nframe.html
@@ -116,7 +114,10 @@ static void expand_file(int fd, char *name)
wrlinei += count;
} else { /* copy input to output */
wrbuf[wrbufi++] = rdbuf[rdbufi];
- wrlinei += 1;
+ if (rdbuf[rdbufi] == '\b') /* go back one column on backspace */
+ wrlinei -= !!wrlinei; /* do not go below zero */
+ else
+ wrlinei += 1;
/* flush expand buffer and reset tablist at newline */
if (rdbuf[rdbufi] == '\n') {
writeall(STDOUT_FILENO, wrbuf, wrbufi);