degesch: more buffer-related stuff
This commit is contained in:
parent
51ca5c79e4
commit
08c0027397
61
degesch.c
61
degesch.c
@ -200,6 +200,7 @@ struct buffer
|
||||
|
||||
// Channel information:
|
||||
|
||||
char *mode; ///< Channel mode
|
||||
char *topic; ///< Channel topic
|
||||
struct str_map nicks; ///< Maps nicks to "nick_info"
|
||||
};
|
||||
@ -220,6 +221,7 @@ buffer_destroy (struct buffer *self)
|
||||
free (self->name);
|
||||
// Can't really free "history" here
|
||||
free (self->saved_line);
|
||||
free (self->mode);
|
||||
free (self->topic);
|
||||
str_map_free (&self->nicks);
|
||||
free (self);
|
||||
@ -253,6 +255,13 @@ struct app_context
|
||||
SSL_CTX *ssl_ctx; ///< SSL context
|
||||
SSL *ssl; ///< SSL connection
|
||||
|
||||
// TODO: initialize and update these two values
|
||||
// TODO: probably issue a USERHOST message for ourselves after connecting
|
||||
// to enable proper word-wrapping; then store it here also, separately,
|
||||
// without the nickname at the beginning; also could just use WHOIS
|
||||
char *irc_nickname; ///< Current nickname
|
||||
char *irc_user_mode; ///< Current user mode
|
||||
|
||||
// Events:
|
||||
|
||||
struct poller_fd tty_event; ///< Terminal input event
|
||||
@ -353,6 +362,9 @@ app_context_free (struct app_context *self)
|
||||
if (self->ssl_ctx)
|
||||
SSL_CTX_free (self->ssl_ctx);
|
||||
|
||||
free (self->irc_nickname);
|
||||
free (self->irc_user_mode);
|
||||
|
||||
LIST_FOR_EACH (struct buffer, iter, self->buffers)
|
||||
buffer_destroy (iter);
|
||||
str_map_free (&self->buffers_by_name);
|
||||
@ -1251,8 +1263,9 @@ refresh_prompt (struct app_context *ctx)
|
||||
|
||||
if (!ctx->irc_ready)
|
||||
str_append (&prompt, "(disconnected)");
|
||||
else
|
||||
else if (soft_assert (ctx->current_buffer))
|
||||
{
|
||||
struct buffer *buffer = ctx->current_buffer;
|
||||
str_append_c (&prompt, '[');
|
||||
|
||||
char *unseen_prefix = get_unseen_prefix (ctx);
|
||||
@ -1260,10 +1273,14 @@ refresh_prompt (struct app_context *ctx)
|
||||
str_append_printf (&prompt, "(%s) ", unseen_prefix);
|
||||
free (unseen_prefix);
|
||||
|
||||
// TODO: name of the current buffer
|
||||
// TODO: the channel user mode
|
||||
str_append (&prompt, str_map_find (&ctx->config, "nickname"));
|
||||
// TODO: user mode in parenthesis
|
||||
str_append (&prompt, buffer->name);
|
||||
if (buffer->type == BUFFER_CHANNEL)
|
||||
str_append_printf (&prompt, "(%s)", buffer->mode);
|
||||
str_append_c (&prompt, ' ');
|
||||
|
||||
str_append (&prompt, ctx->irc_nickname);
|
||||
str_append_printf (&prompt, "(%s)", ctx->irc_user_mode);
|
||||
|
||||
str_append_c (&prompt, ']');
|
||||
}
|
||||
str_append (&prompt, " ");
|
||||
@ -1303,7 +1320,19 @@ on_readline_goto_buffer (int count, int key)
|
||||
if (n < 0 || n > 9)
|
||||
return 0;
|
||||
|
||||
// TODO: switch to the n-th buffer
|
||||
// There's no zero-th buffer
|
||||
if (n == 0)
|
||||
n = 10;
|
||||
|
||||
// Activate the n-th buffer
|
||||
int i = 0;
|
||||
struct app_context *ctx = g_ctx;
|
||||
LIST_FOR_EACH (struct buffer, iter, ctx->buffers)
|
||||
if (++i == n)
|
||||
{
|
||||
buffer_activate (ctx, iter);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1312,7 +1341,15 @@ on_readline_previous_buffer (int count, int key)
|
||||
{
|
||||
(void) key;
|
||||
|
||||
// TODO: switch "count" times to the previous buffer
|
||||
struct app_context *ctx = g_ctx;
|
||||
if (!ctx->current_buffer)
|
||||
return 0;
|
||||
|
||||
struct buffer *new_buffer = ctx->current_buffer;
|
||||
while (count-- > 0)
|
||||
if (!(new_buffer = new_buffer->prev))
|
||||
new_buffer = ctx->buffers_tail;
|
||||
buffer_activate (ctx, new_buffer);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1321,7 +1358,15 @@ on_readline_next_buffer (int count, int key)
|
||||
{
|
||||
(void) key;
|
||||
|
||||
// TODO: switch "count" times to the next buffer
|
||||
struct app_context *ctx = g_ctx;
|
||||
if (!ctx->current_buffer)
|
||||
return 0;
|
||||
|
||||
struct buffer *new_buffer = ctx->current_buffer;
|
||||
while (count-- > 0)
|
||||
if (!(new_buffer = new_buffer->next))
|
||||
new_buffer = ctx->buffers;
|
||||
buffer_activate (ctx, new_buffer);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user