summaryrefslogtreecommitdiff
path: root/degesch.c
diff options
context:
space:
mode:
Diffstat (limited to 'degesch.c')
-rw-r--r--degesch.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/degesch.c b/degesch.c
index 14f6476..5bdb58d 100644
--- a/degesch.c
+++ b/degesch.c
@@ -1288,14 +1288,15 @@ server_destroy (void *self)
struct app_context
{
+ bool no_colors; ///< Disable attribute printing
char *attrs_defaults[ATTR_COUNT]; ///< Default terminal attributes
// Configuration:
struct config config; ///< Program configuration
char *attrs[ATTR_COUNT]; ///< Terminal attributes
- bool no_colors; ///< Colour output mode
bool isolate_buffers; ///< Isolate global/server buffers
+ bool beep_on_highlight; ///< Beep on highlight
struct str_map servers; ///< Our servers
@@ -1416,9 +1417,19 @@ static bool irc_is_this_us (struct server *s, const char *prefix);
// --- Configuration -----------------------------------------------------------
-// TODO: "on_change" callbacks for everything
static void on_config_attribute_change (struct config_item_ *item);
+#define TRIVIAL_BOOLEAN_ON_CHANGE(name) \
+ static void \
+ on_config_ ## name ## _change (struct config_item_ *item) \
+ { \
+ struct app_context *ctx = item->user_data; \
+ ctx->name = item->value.boolean; \
+ }
+
+TRIVIAL_BOOLEAN_ON_CHANGE (isolate_buffers)
+TRIVIAL_BOOLEAN_ON_CHANGE (beep_on_highlight)
+
static bool
config_validate_nonjunk_string
(const struct config_item_ *item, struct error **e)
@@ -1557,11 +1568,13 @@ static struct config_schema g_config_behaviour[] =
{ .name = "isolate_buffers",
.comment = "Don't leak messages from the server and global buffers",
.type = CONFIG_ITEM_BOOLEAN,
- .default_ = "off" },
+ .default_ = "off",
+ .on_change = on_config_isolate_buffers_change },
{ .name = "beep_on_highlight",
.comment = "Beep when highlighted or on a new invisible PM",
.type = CONFIG_ITEM_BOOLEAN,
- .default_ = "on" },
+ .default_ = "on",
+ .on_change = on_config_beep_on_highlight_change },
{ .name = "logging",
.comment = "Log buffer contents to file",
.type = CONFIG_ITEM_BOOLEAN,
@@ -2593,7 +2606,7 @@ log_formatter (struct app_context *ctx,
if (buffer->log_file)
buffer_line_write_to_log (ctx, line, buffer->log_file);
- if (get_config_boolean (ctx->config.root, "behaviour.beep_on_highlight"))
+ if (ctx->beep_on_highlight)
if ((flags & BUFFER_LINE_HIGHLIGHT)
|| (buffer->type == BUFFER_PM && buffer != ctx->current_buffer))
input_ding (&ctx->input);
@@ -8748,10 +8761,6 @@ main (int argc, char *argv[])
init_poller_events (&ctx);
load_configuration (&ctx);
- // TODO: this won't be needed after adding an "on_change" callback
- ctx.isolate_buffers =
- get_config_boolean (ctx.config.root, "behaviour.isolate_buffers");
-
// At this moment we can safely call any "on_change" callbacks
config_schema_call_changed (ctx.config.root);