console: implement tab movement

Implement left and right tab movement in console backend. This is used by
the VTE layer to interpret different VT escape sequences and the tabulator
character.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
David Herrmann 2012-07-15 11:26:11 +02:00
parent 785137264b
commit a7f39f23fe
2 changed files with 47 additions and 0 deletions

View File

@ -941,6 +941,51 @@ void kmscon_console_move_line_home(struct kmscon_console *con)
con->cursor_x = 0;
}
void kmscon_console_tab_right(struct kmscon_console *con, unsigned int num)
{
unsigned int i, j;
if (!con || !num)
return;
for (i = 0; i < num; ++i) {
for (j = con->cursor_x + 1; j < con->size_x; ++j) {
if (con->tab_ruler[j])
break;
}
con->cursor_x = j;
if (con->cursor_x + 1 >= con->size_x)
break;
}
/* tabs never cause pending new-lines */
if (con->cursor_x >= con->size_x)
con->cursor_x = con->size_x - 1;
}
void kmscon_console_tab_left(struct kmscon_console *con, unsigned int num)
{
unsigned int i;
int j;
if (!con || !num)
return;
for (i = 0; i < num; ++i) {
for (j = con->cursor_x - 1; j > 0; --j) {
if (con->tab_ruler[j])
break;
}
if (j <= 0) {
con->cursor_x = 0;
break;
}
con->cursor_x = j;
}
}
void kmscon_console_insert_lines(struct kmscon_console *con, unsigned int num)
{
unsigned int i, j, max;

View File

@ -91,6 +91,8 @@ void kmscon_console_move_left(struct kmscon_console *con, unsigned int num);
void kmscon_console_move_right(struct kmscon_console *con, unsigned int num);
void kmscon_console_move_line_end(struct kmscon_console *con);
void kmscon_console_move_line_home(struct kmscon_console *con);
void kmscon_console_tab_right(struct kmscon_console *con, unsigned int num);
void kmscon_console_tab_left(struct kmscon_console *con, unsigned int num);
void kmscon_console_insert_lines(struct kmscon_console *con, unsigned int num);
void kmscon_console_delete_lines(struct kmscon_console *con, unsigned int num);
void kmscon_console_insert_chars(struct kmscon_console *con, unsigned int num);