diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-06-25 16:02:37 +0000 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-06-25 16:02:37 +0000 |
commit | 853ad681620e9a031f41549a39c78d11b2da8990 (patch) | |
tree | ba70dc52296728d064ecf6a369a21971381e2a2e /window.c | |
parent | e6e1b45fa1aecffe5cd371a6492f38fddecdcd59 (diff) | |
download | rtmux-853ad681620e9a031f41549a39c78d11b2da8990.tar.gz rtmux-853ad681620e9a031f41549a39c78d11b2da8990.tar.bz2 rtmux-853ad681620e9a031f41549a39c78d11b2da8990.zip |
Add a dedicated function to convert a line into a string and use it to simplify the search window function.
Diffstat (limited to 'window.c')
-rw-r--r-- | window.c | 55 |
1 files changed, 17 insertions, 38 deletions
@@ -1,4 +1,4 @@ -/* $OpenBSD: window.c,v 1.3 2009/06/23 20:17:30 nicm Exp $ */ +/* $OpenBSD: window.c,v 1.4 2009/06/24 22:04:18 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -604,42 +604,21 @@ window_pane_mouse( char * window_pane_search(struct window_pane *wp, const char *searchstr) { - const struct grid_cell *gc; - const struct grid_utf8 *gu; - char *buf, *s; - size_t off; - u_int i, j, k; - - buf = xmalloc(1); - - for (j = 0; j < screen_size_y(&wp->base); j++) { - off = 0; - for (i = 0; i < screen_size_x(&wp->base); i++) { - gc = grid_view_peek_cell(wp->base.grid, i, j); - if (gc->flags & GRID_FLAG_UTF8) { - gu = grid_view_peek_utf8(wp->base.grid, i, j); - buf = xrealloc(buf, 1, off + 8); - for (k = 0; k < UTF8_SIZE; k++) { - if (gu->data[k] == 0xff) - break; - buf[off++] = gu->data[k]; - } - } else { - buf = xrealloc(buf, 1, off + 1); - buf[off++] = gc->data; - } - } - while (off > 0 && buf[off - 1] == ' ') - off--; - buf[off] = '\0'; - - if ((s = strstr(buf, searchstr)) != NULL) { - s = section_string(buf, off, s - buf, 40); - xfree(buf); - return (s); - } + struct screen *s = &wp->base; + char *line, *ptr; + u_int i; + + ptr = NULL; + for (i = 0; i < screen_size_y(s); i++) { + line = grid_view_string_cells(s->grid, 0, i, screen_size_x(s)); + log_debug("XXX %s", line); + if ((ptr = strstr(line, searchstr)) != NULL) + break; + xfree(line); } - - xfree(buf); - return (NULL); + if (ptr != NULL) { + ptr = section_string(line, strlen(ptr), ptr - line, 40); + xfree(line); + } + return (ptr); } |