mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-04 04:06:06 -05:00
search: wip: initial search matching
* match search buffer against scrollback content * adjust view to ensure matched content is visible * create selection on a successful match * finalize selection when user presses enter (to "commit" the search) * ctrl+r searches for the next match. Needs more work though.
This commit is contained in:
parent
61cabdac13
commit
aee5045395
3 changed files with 187 additions and 3 deletions
16
grid.h
16
grid.h
|
|
@ -7,12 +7,24 @@ void grid_swap_row(struct grid *grid, int row_a, int row_b, bool initialize);
|
|||
struct row *grid_row_alloc(int cols, bool initialize);
|
||||
void grid_row_free(struct row *row);
|
||||
|
||||
static inline int
|
||||
grid_row_absolute(const struct grid *grid, int row_no)
|
||||
{
|
||||
return (grid->offset + row_no) & (grid->num_rows - 1);
|
||||
}
|
||||
|
||||
static inline int
|
||||
grid_row_absolute_in_view(const struct grid *grid, int row_no)
|
||||
{
|
||||
return (grid->view + row_no) & (grid->num_rows - 1);
|
||||
}
|
||||
|
||||
static inline struct row *
|
||||
_grid_row_maybe_alloc(struct grid *grid, int row_no, bool alloc_if_null)
|
||||
{
|
||||
assert(grid->offset >= 0);
|
||||
|
||||
int real_row = (grid->offset + row_no) & (grid->num_rows - 1);
|
||||
int real_row = grid_row_absolute(grid, row_no);
|
||||
struct row *row = grid->rows[real_row];
|
||||
|
||||
if (row == NULL && alloc_if_null) {
|
||||
|
|
@ -41,7 +53,7 @@ grid_row_in_view(struct grid *grid, int row_no)
|
|||
{
|
||||
assert(grid->view >= 0);
|
||||
|
||||
int real_row = (grid->view + row_no) & (grid->num_rows - 1);
|
||||
int real_row = grid_row_absolute_in_view(grid, row_no);
|
||||
struct row *row = grid->rows[real_row];
|
||||
|
||||
assert(row != NULL);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue