diff options
author | Krow Savcik <krow@savcik.xyz> | 2024-01-11 16:23:38 +0200 |
---|---|---|
committer | Krow Savcik <krow@savcik.xyz> | 2024-01-11 16:23:38 +0200 |
commit | f15cde15550aaa8118b56709b67178a858f64012 (patch) | |
tree | cc6db5dc6382e96631606ea3ca509793fe773bfb | |
parent | 32b8f82aa85a9f616eef7b6442670d8558a0b4d8 (diff) |
feature: picking file
Now you can pick a file for import/export/open/save with an external command.
-rw-r--r-- | config.def.h | 2 | ||||
-rw-r--r-- | src/cdraw.h | 1 | ||||
-rw-r--r-- | src/user.c | 20 |
3 files changed, 16 insertions, 7 deletions
diff --git a/config.def.h b/config.def.h index 396f26a..ee8e1fa 100644 --- a/config.def.h +++ b/config.def.h @@ -4,6 +4,8 @@ const unsigned int maxzoom = 20; const unsigned int fps = 30; const char *def_palette_path = "assets/default.gpl"; const char *def_theme_path = "assets/ui.png"; +/* path to an external program for picking files. it should output only the picked file in stdout */ +const char *cmd_file_picker = NULL; /* NULL - will take input from terminal */ const unsigned int back_c = COLTOINT(146, 161, 185); static Key keys[] = { diff --git a/src/cdraw.h b/src/cdraw.h index 0f57a7f..38bb058 100644 --- a/src/cdraw.h +++ b/src/cdraw.h @@ -10,6 +10,7 @@ extern SDL_Window *win; extern void *ren; extern void *def_palette; extern const char *def_palette_path; +extern const char *cmd_file_picker; extern int mouseX, mouseY; extern const unsigned int back_c; @@ -1,4 +1,5 @@ #include <stdio.h> +#include <stdlib.h> #include <string.h> #include <SDL2/SDL.h> @@ -86,7 +87,6 @@ user_canvas_open(const Arg *x) void user_canvas_export_png(const Arg *x) { - puts("called"); char line[1024]; if (cur_canvas == NULL) return; choose_file_path("Image File Name (export): ", line); @@ -226,13 +226,19 @@ user_testing_reload_tex(const Arg *_x) static void choose_file_path(const char *prompt, char *input) { - printf(prompt); - fflush(stdout); + FILE *ft; + ft = cmd_file_picker == NULL ? NULL : popen(cmd_file_picker, "r"); + input[0] = '\0'; + + if (ft == NULL) { +/*TODO: error; for now using terminal input as backup*/ + printf(prompt); + fflush(stdout); + ft = stdin; + } - do { - fgets(input, 1024, stdin); - } while (strlen(input) < 4); + while (fgets(input, 1024, ft) != NULL && strlen(input) < 4); input[strcspn(input, "\n")] = '\0'; - printf("%s\n", input); + if (ft != stdin) pclose(ft); } |