summaryrefslogtreecommitdiffstats
path: root/input.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2009-06-04 21:02:21 +0000
committerNicholas Marriott <nicm@openbsd.org>2009-06-04 21:02:21 +0000
commitf031975dc09b7be9bdb32fd5256f8c325848b1f9 (patch)
tree764570c2b51c58015e9597ec8d48f4bcbd36b3cf /input.c
parentd42fb43f4f8e21dcc37e9b090842f61e39e8d6f4 (diff)
Implement the CBT (backward tab) sequence (\033[Z).
Diffstat (limited to 'input.c')
-rw-r--r--input.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/input.c b/input.c
index 2546eb0f..b1247f2b 100644
--- a/input.c
+++ b/input.c
@@ -67,6 +67,7 @@ void input_handle_sequence_cud(struct input_ctx *);
void input_handle_sequence_cuf(struct input_ctx *);
void input_handle_sequence_cub(struct input_ctx *);
void input_handle_sequence_dch(struct input_ctx *);
+void input_handle_sequence_cbt(struct input_ctx *);
void input_handle_sequence_dl(struct input_ctx *);
void input_handle_sequence_ich(struct input_ctx *);
void input_handle_sequence_il(struct input_ctx *);
@@ -102,6 +103,7 @@ const struct input_sequence_entry input_sequence_table[] = {
{ 'L', input_handle_sequence_il },
{ 'M', input_handle_sequence_dl },
{ 'P', input_handle_sequence_dch },
+ { 'Z', input_handle_sequence_cbt },
{ 'd', input_handle_sequence_vpa },
{ 'f', input_handle_sequence_cup },
{ 'g', input_handle_sequence_tbc },
@@ -928,6 +930,30 @@ input_handle_sequence_dch(struct input_ctx *ictx)
}
void
+input_handle_sequence_cbt(struct input_ctx *ictx)
+{
+ struct screen *s = ictx->ctx.s;
+ uint16_t n;
+
+ if (ictx->private != '\0')
+ return;
+
+ if (ARRAY_LENGTH(&ictx->args) > 1)
+ return;
+ if (input_get_argument(ictx, 0, &n, 1) != 0)
+ return;
+ if (n == 0)
+ n = 1;
+
+ /* Find the previous tab point, n times. */
+ while (s->cx > 0 && n-- > 0) {
+ do
+ s->cx--;
+ while (s->cx > 0 && !bit_test(s->tabs, s->cx));
+ }
+}
+
+void
input_handle_sequence_dl(struct input_ctx *ictx)
{
uint16_t n;