summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeoff Levand <geoffrey.levand@am.sony.com>2009-07-09 10:40:43 -0700
committerGeoff Levand <geoffrey.levand@am.sony.com>2009-07-09 10:40:43 -0700
commitf57a6400e6b513695e2d1e9d1b08b0d5e562051c (patch)
tree511abc7f79a999b78b3762575de559dbaf192a00
parent3bb091f52586bee88ed0d9380ce4df55d837fd5e (diff)
downloadtalos-petitboot-f57a6400e6b513695e2d1e9d1b08b0d5e562051c.tar.gz
talos-petitboot-f57a6400e6b513695e2d1e9d1b08b0d5e562051c.zip
Fix ked backspace
Fix a bug in the ked editor field backspace logic. Stop deleting chars when cursor reaches front of feild buffer. Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com>
-rw-r--r--ui/ncurses/nc-ked.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/ui/ncurses/nc-ked.c b/ui/ncurses/nc-ked.c
index 3bdbd6c..0f52934 100644
--- a/ui/ncurses/nc-ked.c
+++ b/ui/ncurses/nc-ked.c
@@ -48,12 +48,15 @@ static struct ked *ked_from_arg(void *arg)
* @req: An ncurses request or char to send to form_driver().
*/
-static void ked_move_cursor(struct ked *ked, int req)
+static int ked_move_cursor(struct ked *ked, int req)
{
+ int result;
+
wchgat(ked->scr.sub_ncw, 1, ked_attr_field_selected, 0, 0);
- form_driver(ked->ncf, req);
+ result = form_driver(ked->ncf, req);
wchgat(ked->scr.sub_ncw, 1, ked->attr_cursor, 0, 0);
wrefresh(ked->scr.main_ncw);
+ return result;
}
/**
@@ -93,12 +96,15 @@ static void ked_insert_mode_tog(struct ked *ked)
* @req: An ncurses request to send to form_driver().
*/
-static void ked_move_field(struct ked *ked, int req)
+static int ked_move_field(struct ked *ked, int req)
{
+ int result;
+
set_field_back(current_field(ked->ncf), ked_attr_field_normal);
- form_driver(ked->ncf, req);
+ result = form_driver(ked->ncf, req);
set_field_back(current_field(ked->ncf), ked_attr_field_selected);
ked_move_cursor(ked, REQ_END_FIELD);
+ return result;
}
static int ked_post(struct nc_scr *scr)
@@ -187,12 +193,15 @@ static void ked_process_key(struct nc_scr *scr)
while (1) {
int c = getch();
+ if (c == ERR)
+ return;
+
+ /* DBGS("%d (%o)\n", c, c); */
+
switch (c) {
default:
ked_move_cursor(ked, c);
- break;
- case ERR:
- return;
+ break;
/* hot keys */
case 2: { /* CTRL-B */
@@ -252,8 +261,8 @@ static void ked_process_key(struct nc_scr *scr)
ked_move_cursor(ked, REQ_RIGHT_CHAR);
break;
case KEY_BACKSPACE:
- ked_move_cursor(ked, REQ_LEFT_CHAR);
- ked_move_cursor(ked, REQ_DEL_CHAR);
+ if (ked_move_cursor(ked, REQ_LEFT_CHAR) == E_OK)
+ ked_move_cursor(ked, REQ_DEL_CHAR);
break;
case KEY_DC:
ked_move_cursor(ked, REQ_DEL_CHAR);
OpenPOWER on IntegriCloud