summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorwrmr2025-10-21 15:28:58 -0400
committerwrmr2025-10-21 15:28:58 -0400
commit0148fc9cf70e836348c48a75c8da5103ad11aa4a (patch)
tree4d877c5e3c4326c9f3dbde8c1843aec8f43c6286 /main.c
parentf343df5e72712d83722485f770a0e6cb7f651717 (diff)
add -c/--config option
Diffstat (limited to 'main.c')
-rw-r--r--main.c51
1 files changed, 44 insertions, 7 deletions
diff --git a/main.c b/main.c
index 25c086b..b31a0af 100644
--- a/main.c
+++ b/main.c
@@ -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 };