degesch: factor out buffer_{previous,next}()

This commit is contained in:
Přemysl Eric Janouch 2015-04-17 21:21:30 +02:00
parent e5b52fcd76
commit 2d91a27714
1 changed files with 37 additions and 18 deletions

View File

@ -938,18 +938,45 @@ buffer_activate (struct app_context *ctx, struct buffer *buffer)
refresh_prompt (ctx); refresh_prompt (ctx);
} }
/// Activate the n-th buffer, counting from one static struct buffer *
static bool buffer_at_index (struct app_context *ctx, int n)
buffer_goto (struct app_context *ctx, int n)
{ {
int i = 0; int i = 0;
LIST_FOR_EACH (struct buffer, iter, ctx->buffers) LIST_FOR_EACH (struct buffer, iter, ctx->buffers)
if (++i == n) if (++i == n)
{ return iter;
buffer_activate (ctx, iter); return NULL;
return true;
} }
static struct buffer *
buffer_next (struct app_context *ctx, int count)
{
struct buffer *new_buffer = ctx->current_buffer;
while (count-- > 0)
if (!(new_buffer = new_buffer->next))
new_buffer = ctx->buffers;
return new_buffer;
}
static struct buffer *
buffer_previous (struct app_context *ctx, int count)
{
struct buffer *new_buffer = ctx->current_buffer;
while (count-- > 0)
if (!(new_buffer = new_buffer->prev))
new_buffer = ctx->buffers_tail;
return new_buffer;
}
static bool
buffer_goto (struct app_context *ctx, int n)
{
struct buffer *buffer = buffer_at_index (ctx, n);
if (!buffer)
return false; return false;
buffer_activate (ctx, buffer);
return true;
} }
static int static int
@ -1375,11 +1402,7 @@ on_readline_previous_buffer (int count, int key)
if (!ctx->current_buffer) if (!ctx->current_buffer)
return 0; return 0;
struct buffer *new_buffer = ctx->current_buffer; buffer_activate (ctx, buffer_previous (ctx, count));
while (count-- > 0)
if (!(new_buffer = new_buffer->prev))
new_buffer = ctx->buffers_tail;
buffer_activate (ctx, new_buffer);
return 0; return 0;
} }
@ -1392,11 +1415,7 @@ on_readline_next_buffer (int count, int key)
if (!ctx->current_buffer) if (!ctx->current_buffer)
return 0; return 0;
struct buffer *new_buffer = ctx->current_buffer; buffer_activate (ctx, buffer_next (ctx, count));
while (count-- > 0)
if (!(new_buffer = new_buffer->next))
new_buffer = ctx->buffers;
buffer_activate (ctx, new_buffer);
return 0; return 0;
} }