From 0148fc9cf70e836348c48a75c8da5103ad11aa4a Mon Sep 17 00:00:00 2001 From: wrmr Date: Tue, 21 Oct 2025 15:28:58 -0400 Subject: add -c/--config option --- main.c | 51 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/main.c b/main.c index 25c086b..b31a0af 100644 --- a/main.c +++ b/main.c @@ -153,6 +153,9 @@ typedef struct { } ColorOpt; typedef struct { + struct { + const char *cbinkrc; + } cmdline; struct { int help; int pfp, pronouns, date; @@ -692,7 +695,19 @@ void gfx_draw_msg(void) { void init_curses(void); void fini_curses(void); +#define USAGE "cbink [-c CONFIG]" + const char *help_long = + + "USAGE\n" + "\n" + " " USAGE "\n" + "\n" + "OPTIONS\n" + "\n" + " -c --config config file to use instead of default, or NONE\n" + "\n" + "KEY BINDINGS\n" "\n" " c create post\n" @@ -768,6 +783,7 @@ const char *help_long = "FILES\n" "\n" " ~/.cbinkrc\n" + " ~/.config/cbink/cbinkrc\n" " configuration and styling\n" "\n" " ~/.binkbanner\n" @@ -1051,13 +1067,20 @@ void fini_curses(void) { /* configuration */ FILE *open_config_file(Arena *a) { - const char *s = cstr_fmt(a, "/home/%s/.cbinkrc", getlogin()); - FILE *f = fopen(s, "r/o"); - if (f) return f; - s = cstr_fmt(a, "/home/%s/.config/cbink/cbinkrc", getlogin()); + FILE *f; + const char *s = opt.cmdline.cbinkrc; + if (s) { + if (!strcmp(s, "NONE")) { + return NULL; + } + } else { + s = cstr_fmt(a, "/home/%s/.cbinkrc", getlogin()); + f = fopen(s, "r/o"); + if (f) return f; + s = cstr_fmt(a, "/home/%s/.config/cbink/cbinkrc", getlogin()); + } f = fopen(s, "r/o"); - if (f) return f; - return NULL; + return f; } typedef struct { @@ -1281,7 +1304,7 @@ void page_string(Str txt) { init_curses(); } -int main(void) { +int main(int argc, const char **argv) { /* init */ Arena cfg_arena = { 0 }; @@ -1292,6 +1315,20 @@ int main(void) { arena_reserve(&post_arena, 128 << 10L); arena_reserve(&gfx_arena, 128 << 10L); + int optf = 0; + for (;;) { + int o = opt_next(&optf, &argc, &argv, ":c[config]"); + if (!o) break; + switch (o) { + case 'c': + opt.cmdline.cbinkrc = *argv; + break; + default: + fprintf(stderr, "Usage: " USAGE "\n"); + return 1; + } + } + ensure_dotbink_exists(&temp_arena); PostList posts = { 0 }; -- cgit v1.2.3