summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--degesch.c54
1 files changed, 28 insertions, 26 deletions
diff --git a/degesch.c b/degesch.c
index 2c64e50..79fecfd 100644
--- a/degesch.c
+++ b/degesch.c
@@ -102,6 +102,25 @@ static struct config_item g_config_table[] =
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+struct nick_info
+{
+ char *nickname; ///< Literal nickname
+ char mode_char; ///< Op/voice/... character
+ bool away; ///< User is away
+
+ // XXX: maybe a good candidate for deduplication (away status)
+};
+
+static void
+nick_info_destroy (void *p)
+{
+ struct nick_info *self = p;
+ free (self->nickname);
+ free (self);
+}
+
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
enum buffer_line_flags
{
BUFFER_LINE_HIGHLIGHT = 1 << 0 ///< The user was highlighted by this
@@ -153,25 +172,6 @@ buffer_line_destroy (struct buffer_line *self)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-struct nick_info
-{
- char *nickname; ///< Literal nickname
- char mode_char; ///< Op/voice/... character
- bool away; ///< User is away
-
- // XXX: maybe a good candidate for deduplication (away status)
-};
-
-static void
-nick_info_destroy (void *p)
-{
- struct nick_info *self = p;
- free (self->nickname);
- free (self);
-}
-
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
enum buffer_type
{
BUFFER_GLOBAL, ///< Global information
@@ -187,6 +187,8 @@ struct buffer
enum buffer_type type; ///< Type of the buffer
char *name; ///< The name of the buffer
+ // Readline state:
+
HISTORY_STATE *history; ///< Saved history state
char *saved_line; ///< Saved line
int saved_point; ///< Saved position in line
@@ -258,6 +260,8 @@ struct app_context
SSL_CTX *ssl_ctx; ///< SSL context
SSL *ssl; ///< SSL connection
+ // TODO: channels?
+
// 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,
@@ -269,6 +273,7 @@ struct app_context
struct poller_fd tty_event; ///< Terminal input event
struct poller_fd signal_event; ///< Signal FD event
+
struct poller_timer ping_tmr; ///< We should send a ping
struct poller_timer timeout_tmr; ///< Connection seems to be dead
struct poller_timer reconnect_tmr; ///< We should reconnect now
@@ -284,9 +289,9 @@ struct app_context
// XXX: when we go multiserver, there will be collisions
struct str_map buffers_by_name; ///< Excludes GLOBAL and SERVER
+
struct buffer *global_buffer; ///< The global buffer
struct buffer *server_buffer; ///< The server buffer
-
struct buffer *current_buffer; ///< The current buffer
// TODO: So that we always output proper date change messages
@@ -533,9 +538,6 @@ log_message_attributed (void *user_data, const char *quote, const char *fmt,
{
FILE *stream = stderr;
- // GNU readline is a huge piece of total crap; it seems that we must do
- // these incredible shenanigans in order to intersperse readline output
- // with asynchronous status messages
struct app_readline_state state;
if (g_ctx->readline_prompt_shown)
app_readline_hide (&state);
@@ -1324,7 +1326,7 @@ irc_establish_connection (struct app_context *ctx,
// --- More readline funky stuff -----------------------------------------------
static char *
-get_unseen_prefix (struct app_context *ctx)
+make_unseen_prefix (struct app_context *ctx)
{
struct str active_buffers;
str_init (&active_buffers);
@@ -1364,7 +1366,7 @@ make_prompt (struct app_context *ctx, struct str *output)
str_append_c (output, '[');
- char *unseen_prefix = get_unseen_prefix (ctx);
+ char *unseen_prefix = make_unseen_prefix (ctx);
if (unseen_prefix)
str_append_printf (output, "(%s) ", unseen_prefix);
free (unseen_prefix);
@@ -1732,7 +1734,7 @@ try_decode_buffer (struct app_context *ctx, const char *word)
if (xstrtoul (&n, word, 10) && n <= INT_MAX)
buffer = buffer_at_index (ctx, n);
if (!buffer)
- buffer = str_map_find (&ctx->buffers_by_name, word);
+ buffer = buffer_by_name (ctx, word);
// TODO: decode the global and server buffers, partial matches
return buffer;
}