commit a329982b3e1cf608242838fb0377b426235d468e from: Omar Polo date: Thu Mar 11 16:07:44 2021 UTC implement cmd_move_{beginning,end}_of_line commit - e19f9a04d781d46a073ae625c4d0bfac189468a5 commit + a329982b3e1cf608242838fb0377b426235d468e blob - 73785e7b21e2ca05a0dfa915b15aa99db3aa4402 blob + fb0015c8306f49df4eabe2e334d26b4ef06c4696 --- ui.c +++ ui.c @@ -88,6 +88,8 @@ static void cmd_previous_line(struct tab*); static void cmd_next_line(struct tab*); static void cmd_forward_char(struct tab*); static void cmd_backward_char(struct tab*); +static void cmd_move_beginning_of_line(struct tab*); +static void cmd_move_end_of_line(struct tab*); static void cmd_redraw(struct tab*); static void cmd_scroll_line_down(struct tab*); static void cmd_scroll_line_up(struct tab*); @@ -336,6 +338,8 @@ load_default_keys(void) global_set_key("C-n", cmd_next_line); global_set_key("C-f", cmd_forward_char); global_set_key("C-b", cmd_backward_char); + global_set_key("C-a", cmd_move_beginning_of_line); + global_set_key("C-e", cmd_move_end_of_line); global_set_key("M-v", cmd_scroll_up); global_set_key("C-v", cmd_scroll_down); @@ -359,6 +363,8 @@ load_default_keys(void) global_set_key("j", cmd_next_line); global_set_key("l", cmd_forward_char); global_set_key("h", cmd_backward_char); + global_set_key("^", cmd_move_beginning_of_line); + global_set_key("$", cmd_move_end_of_line); global_set_key("K", cmd_scroll_line_up); global_set_key("J", cmd_scroll_line_down); @@ -484,6 +490,49 @@ static void cmd_backward_char(struct tab *tab) { tab->s->curs_x = MAX(0, tab->s->curs_x-1); + restore_cursor(tab); +} + +static void +cmd_move_beginning_of_line(struct tab *tab) +{ + tab->s->curs_x = 0; + restore_cursor(tab); +} + +static void +cmd_move_end_of_line(struct tab *tab) +{ + struct line *line; + size_t off; + + off = tab->s->line_off + tab->s->curs_y; + if (off >= tab->s->line_max) { + tab->s->curs_x = 0; + goto end; + } + + line = nth_line(tab, off); + if (line->line != NULL) + tab->s->curs_x = strlen(line->line); + else + tab->s->curs_x = 0; + + /* TODO: don't hardcode these numbers here. */ + switch (line->type) { + case LINE_PRE_START: + case LINE_PRE_END: + tab->s->curs_x += 3; + break; + case LINE_LINK: + tab->s->curs_x += 3; + break; + case LINE_QUOTE: + case LINE_ITEM: + tab->s->curs_x += 2; + } + +end: restore_cursor(tab); } @@ -1209,8 +1258,15 @@ redraw_tabline(void) wprintw(tabline, " "); TAILQ_FOREACH(tab, &tabshead, tabs) { current = tab->flags & TAB_CURRENT; - wprintw(tabline, " %s%d:todo title ", - current ? "*" : "", tab->id); + + if (current) + wattron(tabline, A_UNDERLINE); + + wprintw(tabline, "%s%d:todo title ", + current ? "*" : " ", tab->id); + + if (current) + wattroff(tabline, A_UNDERLINE); } }