diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-06-25 15:54:57 +0000 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-06-25 15:54:57 +0000 |
commit | 63b38ef62818462fa9b885b3a2ff056bdbd30773 (patch) | |
tree | a50207aa3b84be8983255e374e5baa1104ffbb3e /input.c | |
parent | 1b245388b59df11a9a54b03f2f94333c4b21a98f (diff) |
Implement the CBT (backward tab) sequence (\033[Z).
Diffstat (limited to 'input.c')
-rw-r--r-- | input.c | 28 |
1 files changed, 27 insertions, 1 deletions
@@ -1,4 +1,4 @@ -/* $OpenBSD: input.c,v 1.7 2009/06/04 18:48:24 nicm Exp $ */ +/* $OpenBSD: input.c,v 1.8 2009/06/04 21:02:21 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -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; |