foot/commands.c

62 lines
1.8 KiB
C
Raw Normal View History

#include "commands.h"
#define LOG_MODULE "commands"
#define LOG_ENABLE_DBG 1
#include "log.h"
#include "terminal.h"
#include "render.h"
#include "grid.h"
#define max(x, y) ((x) > (y) ? (x) : (y))
void
cmd_scrollback_up(struct terminal *term)
{
assert(term->grid->offset >= 0);
int new_view = (term->grid->view + term->grid->num_rows - term->rows) % term->grid->num_rows;
LOG_WARN("%d" ,new_view);
assert(new_view >= 0);
assert(new_view < term->grid->num_rows);
while (!term->grid->rows[new_view]->initialized)
new_view = (new_view + 1) % term->grid->num_rows;
LOG_DBG("scrollback UP: %d -> %d (offset = %d, rows = %d)",
term->grid->view, new_view, term->grid->offset, term->grid->num_rows);
term->grid->view = new_view;
for (int i = 0; i < term->rows; i++)
grid_row_in_view(term->grid, i)->dirty = true;
if (term->frame_callback == NULL)
grid_render(term);
}
void
cmd_scrollback_down(struct terminal *term)
{
assert(term->grid->offset >= 0);
int new_view = (term->grid->view + term->rows) % term->grid->num_rows;
LOG_WARN("%d" ,new_view);
assert(new_view >= 0);
assert(new_view < term->grid->num_rows);
if (!term->grid->rows[new_view]->initialized) {
while (!term->grid->rows[new_view]->initialized)
new_view = (new_view + term->grid->num_rows - 1) % term->grid->num_rows;
new_view = (new_view + term->grid->num_rows - term->rows + 1) % term->grid->num_rows;
}
LOG_DBG("scrollback DOWN: %d -> %d (offset = %d, rows = %d)",
term->grid->view, new_view, term->grid->offset, term->grid->num_rows);
term->grid->view = new_view;
for (int i = 0; i < term->rows; i++)
grid_row_in_view(term->grid, i)->dirty = true;
if (term->frame_callback == NULL)
grid_render(term);
}