diff options
| author | wrmr | 2025-10-21 15:28:58 -0400 |
|---|---|---|
| committer | wrmr | 2025-10-21 15:28:58 -0400 |
| commit | 0148fc9cf70e836348c48a75c8da5103ad11aa4a (patch) | |
| tree | 4d877c5e3c4326c9f3dbde8c1843aec8f43c6286 /main.c | |
| parent | f343df5e72712d83722485f770a0e6cb7f651717 (diff) | |
add -c/--config option
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 51 |
1 files changed, 44 insertions, 7 deletions
@@ -154,6 +154,9 @@ typedef struct { typedef struct { struct { + const char *cbinkrc; + } cmdline; + struct { int help; int pfp, pronouns, date; const char *datefmt; @@ -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 }; |
