about summary refs log tree commit diff stats
path: root/src/theme.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/theme.c')
-rw-r--r--src/theme.c44
1 files changed, 35 insertions, 9 deletions
diff --git a/src/theme.c b/src/theme.c
index 267a88fb..0792222a 100644
--- a/src/theme.c
+++ b/src/theme.c
@@ -106,6 +106,41 @@ theme_load(const char * const theme_name)
     _load_colours();
 }
 
+gboolean
+theme_change(const char * const theme_name)
+{
+    // use default theme
+    if (strcmp(theme_name, "default") == 0) {
+        g_key_file_free(theme);
+        theme = g_key_file_new();
+        _load_colours();
+        return TRUE;
+    } else {
+        GString *new_theme_file = g_string_new(getenv("HOME"));
+        g_string_append(new_theme_file, "/.profanity/themes/");
+        g_string_append(new_theme_file, theme_name);
+
+        // no theme file found
+        if (!g_file_test(new_theme_file->str, G_FILE_TEST_EXISTS)) {
+            log_info("Theme does not exist \"%s\"", theme_name);
+            g_string_free(new_theme_file, TRUE);
+            return FALSE;
+
+        // load from theme file
+        } else {
+            g_string_free(theme_loc, TRUE);
+            theme_loc = new_theme_file;
+            log_info("Changing theme to \"%s\"", theme_name);
+            g_key_file_free(theme);
+            theme = g_key_file_new();
+            g_key_file_load_from_file(theme, theme_loc->str, G_KEY_FILE_KEEP_COMMENTS,
+                NULL);
+            _load_colours();
+            return TRUE;
+        }
+    }
+}
+
 void
 theme_close(void)
 {
@@ -216,15 +251,6 @@ _load_colours(void)
     gchar *them_val = g_key_file_get_string(theme, "colours", "them", NULL);
     _set_colour(them_val, &colour_prefs.them, COLOR_GREEN);
 }
-/*
-static void
-_save_prefs(void)
-{
-    gsize g_data_size;
-    char *g_prefs_data = g_key_file_to_data(prefs, &g_data_size, NULL);
-    g_file_set_contents(prefs_loc->str, g_prefs_data, g_data_size, NULL);
-}
-*/
 
 NCURSES_COLOR_T
 theme_get_bkgnd()