diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-07-14 06:39:25 +0000 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-07-14 06:39:25 +0000 |
commit | 5ef5bd7c3127f00dca54499b48802bba85953a6a (patch) | |
tree | 4ffadd85dae09280feb6bb6b8792d0297ed59b13 /window-copy.c | |
parent | 7f98193beb9bb6cdc11776478784ad356f32785b (diff) | |
download | rtmux-5ef5bd7c3127f00dca54499b48802bba85953a6a.tar.gz rtmux-5ef5bd7c3127f00dca54499b48802bba85953a6a.tar.bz2 rtmux-5ef5bd7c3127f00dca54499b48802bba85953a6a.zip |
Add a "back to indentation" key in copy mode to move the cursor to the first
non-whitespace character. ^ with vi and M-m with emacs key bindings. Another
from Kalle Olavi Niemitalo, thanks.
Diffstat (limited to 'window-copy.c')
-rw-r--r-- | window-copy.c | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/window-copy.c b/window-copy.c index d94d13e0..c782e5e2 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1,4 +1,4 @@ -/* $Id: window-copy.c,v 1.64 2009-07-14 06:38:32 nicm Exp $ */ +/* $Id: window-copy.c,v 1.65 2009-07-14 06:39:10 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -50,6 +50,7 @@ int window_copy_is_space(struct window_pane *, u_int, u_int); u_int window_copy_find_length(struct window_pane *, u_int); void window_copy_set_cursor_x(struct window_pane *, u_int); void window_copy_cursor_start_of_line(struct window_pane *); +void window_copy_cursor_back_to_indentation(struct window_pane *); void window_copy_cursor_end_of_line(struct window_pane *); void window_copy_cursor_left(struct window_pane *); void window_copy_cursor_right(struct window_pane *); @@ -207,6 +208,9 @@ window_copy_key(struct window_pane *wp, struct client *c, int key) case MODEKEYCMD_STARTOFLINE: window_copy_cursor_start_of_line(wp); break; + case MODEKEYCMD_BACKTOINDENTATION: + window_copy_cursor_back_to_indentation(wp); + break; case MODEKEYCMD_ENDOFLINE: window_copy_cursor_end_of_line(wp); break; @@ -601,6 +605,33 @@ window_copy_cursor_start_of_line(struct window_pane *wp) } void +window_copy_cursor_back_to_indentation(struct window_pane *wp) +{ + struct window_copy_mode_data *data = wp->modedata; + u_int px, py, xx; + const struct grid_cell *gc; + + px = 0; + py = screen_hsize(&wp->base) + data->cy - data->oy; + xx = window_copy_find_length(wp, py); + + /* + * Don't use window_copy_is_space because that treats some word + * delimiters as spaces. + */ + while (px < xx) { + gc = grid_peek_cell(wp->base.grid, px, py); + if (gc->flags & GRID_FLAG_UTF8) + break; + if (gc->data != ' ') + break; + px++; + } + + window_copy_set_cursor_x(wp, px); +} + +void window_copy_cursor_end_of_line(struct window_pane *wp) { struct window_copy_mode_data *data = wp->modedata; |