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:
|
// Channel information:
|
||||||
|
|
||||||
|
char *mode; ///< Channel mode
|
||||||
char *topic; ///< Channel topic
|
char *topic; ///< Channel topic
|
||||||
struct str_map nicks; ///< Maps nicks to "nick_info"
|
struct str_map nicks; ///< Maps nicks to "nick_info"
|
||||||
};
|
};
|
||||||
@ -220,6 +221,7 @@ buffer_destroy (struct buffer *self)
|
|||||||
free (self->name);
|
free (self->name);
|
||||||
// Can't really free "history" here
|
// Can't really free "history" here
|
||||||
free (self->saved_line);
|
free (self->saved_line);
|
||||||
|
free (self->mode);
|
||||||
free (self->topic);
|
free (self->topic);
|
||||||
str_map_free (&self->nicks);
|
str_map_free (&self->nicks);
|
||||||
free (self);
|
free (self);
|
||||||
@ -253,6 +255,13 @@ struct app_context
|
|||||||
SSL_CTX *ssl_ctx; ///< SSL context
|
SSL_CTX *ssl_ctx; ///< SSL context
|
||||||
SSL *ssl; ///< SSL connection
|
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:
|
// Events:
|
||||||
|
|
||||||
struct poller_fd tty_event; ///< Terminal input event
|
struct poller_fd tty_event; ///< Terminal input event
|
||||||
@ -353,6 +362,9 @@ app_context_free (struct app_context *self)
|
|||||||
if (self->ssl_ctx)
|
if (self->ssl_ctx)
|
||||||
SSL_CTX_free (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)
|
LIST_FOR_EACH (struct buffer, iter, self->buffers)
|
||||||
buffer_destroy (iter);
|
buffer_destroy (iter);
|
||||||
str_map_free (&self->buffers_by_name);
|
str_map_free (&self->buffers_by_name);
|
||||||
@ -1251,8 +1263,9 @@ refresh_prompt (struct app_context *ctx)
|
|||||||
|
|
||||||
if (!ctx->irc_ready)
|
if (!ctx->irc_ready)
|
||||||
str_append (&prompt, "(disconnected)");
|
str_append (&prompt, "(disconnected)");
|
||||||
else
|
else if (soft_assert (ctx->current_buffer))
|
||||||
{
|
{
|
||||||
|
struct buffer *buffer = ctx->current_buffer;
|
||||||
str_append_c (&prompt, '[');
|
str_append_c (&prompt, '[');
|
||||||
|
|
||||||
char *unseen_prefix = get_unseen_prefix (ctx);
|
char *unseen_prefix = get_unseen_prefix (ctx);
|
||||||
@ -1260,10 +1273,14 @@ refresh_prompt (struct app_context *ctx)
|
|||||||
str_append_printf (&prompt, "(%s) ", unseen_prefix);
|
str_append_printf (&prompt, "(%s) ", unseen_prefix);
|
||||||
free (unseen_prefix);
|
free (unseen_prefix);
|
||||||
|
|
||||||
// TODO: name of the current buffer
|
str_append (&prompt, buffer->name);
|
||||||
// TODO: the channel user mode
|
if (buffer->type == BUFFER_CHANNEL)
|
||||||
str_append (&prompt, str_map_find (&ctx->config, "nickname"));
|
str_append_printf (&prompt, "(%s)", buffer->mode);
|
||||||
// TODO: user mode in parenthesis
|
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_c (&prompt, ']');
|
||||||
}
|
}
|
||||||
str_append (&prompt, " ");
|
str_append (&prompt, " ");
|
||||||
@ -1303,7 +1320,19 @@ on_readline_goto_buffer (int count, int key)
|
|||||||
if (n < 0 || n > 9)
|
if (n < 0 || n > 9)
|
||||||
return 0;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1312,7 +1341,15 @@ on_readline_previous_buffer (int count, int key)
|
|||||||
{
|
{
|
||||||
(void) 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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1321,7 +1358,15 @@ on_readline_next_buffer (int count, int key)
|
|||||||
{
|
{
|
||||||
(void) 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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user