summaryrefslogtreecommitdiff
path: root/ted-base.c
diff options
context:
space:
mode:
Diffstat (limited to 'ted-base.c')
-rw-r--r--ted-base.c72
1 files changed, 49 insertions, 23 deletions
diff --git a/ted-base.c b/ted-base.c
index 784bbe9..6ac9c5f 100644
--- a/ted-base.c
+++ b/ted-base.c
@@ -1,26 +1,3 @@
-typedef struct {
- u32 line_number; // config line number where this was set
- Command command; // this will be 0 (COMMAND_UNKNOWN) if there's no action for the key
- i64 argument;
-} KeyAction;
-
-#define SCANCODE_COUNT 0x120 // SDL scancodes should be less than this value.
-// a "key combo" is some subset of {control, shift, alt} + some key.
-#define KEY_COMBO_COUNT (SCANCODE_COUNT << 3)
-#define KEY_MODIFIER_CTRL_BIT 0
-#define KEY_MODIFIER_SHIFT_BIT 1
-#define KEY_MODIFIER_ALT_BIT 2
-#define KEY_MODIFIER_CTRL (1<<KEY_MODIFIER_CTRL_BIT)
-#define KEY_MODIFIER_SHIFT (1<<KEY_MODIFIER_SHIFT_BIT)
-#define KEY_MODIFIER_ALT (1<<KEY_MODIFIER_ALT_BIT)
-// ctrl+alt+c is encoded as SDL_SCANCODE_C << 3 | KEY_MODIFIER_CTRL | KEY_MODIFIER_ALT
-
-typedef struct {
- TextBuffer *active_buffer;
- Settings settings;
- KeyAction key_actions[KEY_COMBO_COUNT];
- char error[256];
-} Ted;
// this is a macro so we get -Wformat warnings
#define ted_seterr(buffer, ...) \
@@ -56,3 +33,52 @@ static void *ted_realloc(Ted *ted, void *p, size_t new_size) {
return ret;
}
+// should the working directory be searched for files? set to true if the executable isn't "installed"
+static bool ted_search_cwd = false;
+#if _WIN32
+// @TODO
+#else
+static char const *const ted_global_data_dir = "/usr/share/ted";
+#endif
+
+// Check the various places a file could be, and return the full path.
+static Status ted_get_file(char const *name, char *out, size_t outsz) {
+#if _WIN32
+ #error "@TODO(windows)"
+#else
+ if (ted_search_cwd && fs_file_exists(name)) {
+ // check in current working directory
+ str_cpy(out, outsz, name);
+ return true;
+ }
+
+ char *home = getenv("HOME");
+ if (home) {
+ str_printf(out, outsz, "%s/.local/share/ted/%s", home, name);
+ if (!fs_file_exists(out)) {
+ str_printf(out, outsz, "%s/%s", ted_global_data_dir, name);
+ if (!fs_file_exists(out))
+ return false;
+ }
+ }
+ return true;
+#endif
+}
+
+static void ted_load_font(Ted *ted) {
+ char font_filename[TED_PATH_MAX];
+ if (ted_get_file("assets/font.ttf", font_filename, sizeof font_filename)) {
+ Font *font = text_font_load(font_filename, ted->settings.text_size);
+ if (font) {
+ if (ted->font) {
+ text_font_free(ted->font);
+ }
+ ted->font = font;
+ } else {
+ ted_seterr(ted, "Couldn't load font: %s", text_get_err());
+ text_clear_err();
+ }
+ } else {
+ ted_seterr(ted, "Couldn't find font file. There is probably a problem with your ted installation.");
+ }
+}