2012-06-12 03:10:01 -07:00
|
|
|
#include <Elementary.h>
|
|
|
|
#include "config.h"
|
|
|
|
|
2012-06-15 23:28:39 -07:00
|
|
|
#define LIM(v, min, max) {if (v >= max) v = max; else if (v <= min) v = min;}
|
|
|
|
|
|
|
|
static Eet_Data_Descriptor *edd_base = NULL;
|
2012-06-12 03:10:01 -07:00
|
|
|
|
2012-06-15 23:28:39 -07:00
|
|
|
static const char *
|
2012-06-17 13:59:54 -07:00
|
|
|
_config_home_get(void)
|
2012-06-15 23:28:39 -07:00
|
|
|
{
|
2012-06-17 13:59:54 -07:00
|
|
|
#ifdef ELM_EFREET
|
2012-06-17 15:34:41 -07:00
|
|
|
return efreet_config_home_get();
|
2012-06-17 13:59:54 -07:00
|
|
|
#else
|
2012-06-17 15:34:41 -07:00
|
|
|
static char path[PATH_MAX] = "";
|
2012-06-17 13:59:54 -07:00
|
|
|
const char *v = getenv("XDG_CONFIG_HOME");
|
|
|
|
if (v) eina_strlcpy(path, v, sizeof(path));
|
|
|
|
else
|
|
|
|
{
|
|
|
|
v = getenv("HOME");
|
|
|
|
if (v) snprintf(path, sizeof(path), "%s/.config", v);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (!v) v = getenv("TMP");
|
|
|
|
if (!v) v = "/tmp";
|
|
|
|
eina_strlcpy(path, v, sizeof(path));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return path;
|
2012-06-17 15:34:41 -07:00
|
|
|
#endif
|
2012-06-15 23:28:39 -07:00
|
|
|
}
|
|
|
|
|
2012-06-12 03:10:01 -07:00
|
|
|
void
|
|
|
|
config_init(void)
|
|
|
|
{
|
2012-06-15 23:28:39 -07:00
|
|
|
Eet_Data_Descriptor_Class eddc;
|
2012-06-17 13:59:54 -07:00
|
|
|
|
|
|
|
elm_need_efreet();
|
2012-06-15 23:28:39 -07:00
|
|
|
|
|
|
|
eet_eina_stream_data_descriptor_class_set
|
|
|
|
(&eddc, sizeof(eddc), "Config", sizeof(Config));
|
|
|
|
edd_base = eet_data_descriptor_stream_new(&eddc);
|
|
|
|
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "font.name", font.name, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "font.size", font.size, EET_T_INT);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "font.bitmap", font.bitmap, EET_T_UCHAR);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "scrollback", scrollback, EET_T_INT);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "theme", theme, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "background", background, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "jump_on_change", jump_on_change, EET_T_UCHAR);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "translucent", translucent, EET_T_UCHAR);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "wordsep", wordsep, EET_T_STRING);
|
2012-06-17 00:10:27 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "vidmod", vidmod, EET_T_INT);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC
|
|
|
|
(edd_base, Config, "mute", mute, EET_T_UCHAR);
|
2012-06-17 13:24:23 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
config_shutdown(void)
|
|
|
|
{
|
|
|
|
if (edd_base)
|
|
|
|
{
|
|
|
|
eet_data_descriptor_free(edd_base);
|
|
|
|
edd_base = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
config_save(const Config *config, const char *key)
|
|
|
|
{
|
|
|
|
Eet_File *ef;
|
|
|
|
char buf[PATH_MAX], buf2[PATH_MAX];
|
2012-06-17 13:59:54 -07:00
|
|
|
const char *cfgdir;
|
2012-06-17 13:24:23 -07:00
|
|
|
int ok;
|
|
|
|
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN(config);
|
|
|
|
|
|
|
|
if (config->temporary) return;
|
|
|
|
if (!key) key = config->config_key;
|
|
|
|
|
2012-06-17 13:59:54 -07:00
|
|
|
cfgdir = _config_home_get();
|
|
|
|
snprintf(buf, sizeof(buf), "%s/terminology/config/standard", cfgdir);
|
2012-06-17 13:24:23 -07:00
|
|
|
ecore_file_mkpath(buf);
|
2012-06-17 13:59:54 -07:00
|
|
|
snprintf(buf, sizeof(buf), "%s/terminology/config/standard/base.cfg.tmp", cfgdir);
|
|
|
|
snprintf(buf2, sizeof(buf2), "%s/terminology/config/standard/base.cfg", cfgdir);
|
2012-06-17 13:24:23 -07:00
|
|
|
ef = eet_open(buf, EET_FILE_MODE_WRITE);
|
|
|
|
if (ef)
|
|
|
|
{
|
|
|
|
ok = eet_data_write(ef, edd_base, key, config, 1);
|
|
|
|
eet_close(ef);
|
|
|
|
if (ok) ecore_file_mv(buf, buf2);
|
|
|
|
}
|
|
|
|
}
|
2012-06-15 23:28:39 -07:00
|
|
|
|
2012-06-17 13:24:23 -07:00
|
|
|
Config *
|
|
|
|
config_load(const char *key)
|
|
|
|
{
|
|
|
|
Eet_File *ef;
|
|
|
|
char buf[PATH_MAX];
|
2012-06-17 13:59:54 -07:00
|
|
|
const char *cfgdir;
|
|
|
|
Config *config = NULL;
|
2012-06-17 13:24:23 -07:00
|
|
|
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL);
|
|
|
|
|
2012-06-17 13:59:54 -07:00
|
|
|
cfgdir = _config_home_get();
|
|
|
|
snprintf(buf, sizeof(buf), "%s/terminology/config/standard/base.cfg", cfgdir);
|
2012-06-15 23:28:39 -07:00
|
|
|
ef = eet_open(buf, EET_FILE_MODE_READ);
|
|
|
|
if (ef)
|
|
|
|
{
|
2012-06-17 13:24:23 -07:00
|
|
|
config = eet_data_read(ef, edd_base, key);
|
2012-06-15 23:28:39 -07:00
|
|
|
eet_close(ef);
|
|
|
|
if (config)
|
|
|
|
{
|
|
|
|
LIM(config->font.size, 3, 400);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!config)
|
|
|
|
{
|
|
|
|
config = calloc(1, sizeof(Config));
|
2012-06-17 13:24:23 -07:00
|
|
|
config->font.bitmap = EINA_TRUE;
|
2012-06-16 06:17:35 -07:00
|
|
|
config->font.name = eina_stringshare_add("nexus.pcf");
|
2012-06-15 23:28:39 -07:00
|
|
|
config->font.size = 10;
|
2012-06-16 20:00:01 -07:00
|
|
|
config->scrollback = 2000;
|
2012-06-15 23:28:39 -07:00
|
|
|
config->theme = eina_stringshare_add("default.edj");
|
|
|
|
config->background = NULL;
|
2012-06-17 13:24:23 -07:00
|
|
|
config->translucent = EINA_FALSE;
|
|
|
|
config->jump_on_change = EINA_FALSE;
|
2012-06-16 20:00:01 -07:00
|
|
|
config->wordsep = eina_stringshare_add(" '\"()[]{}=*!#$^\\:;,?`");
|
2012-06-17 00:10:27 -07:00
|
|
|
config->vidmod = 0;
|
2012-06-17 13:24:23 -07:00
|
|
|
config->mute = EINA_FALSE;
|
2012-06-15 23:28:39 -07:00
|
|
|
}
|
2012-06-17 13:24:23 -07:00
|
|
|
|
|
|
|
config->config_key = eina_stringshare_add(key); /* not in eet */
|
|
|
|
|
|
|
|
return config;
|
2012-06-12 03:10:01 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2012-06-17 13:24:23 -07:00
|
|
|
config_del(Config *config)
|
2012-06-12 03:10:01 -07:00
|
|
|
{
|
2012-06-17 13:24:23 -07:00
|
|
|
if (!config) return;
|
|
|
|
|
|
|
|
eina_stringshare_del(config->font.name);
|
|
|
|
eina_stringshare_del(config->theme);
|
|
|
|
eina_stringshare_del(config->background);
|
|
|
|
eina_stringshare_del(config->wordsep);
|
|
|
|
|
|
|
|
eina_stringshare_del(config->config_key); /* not in eet */
|
|
|
|
free(config);
|
2012-06-15 23:28:39 -07:00
|
|
|
}
|
|
|
|
|
2012-06-17 13:24:23 -07:00
|
|
|
const char *
|
|
|
|
config_theme_path_get(const Config *config)
|
2012-06-15 23:28:39 -07:00
|
|
|
{
|
2012-06-17 13:24:23 -07:00
|
|
|
static char path[PATH_MAX];
|
2012-06-17 02:43:47 -07:00
|
|
|
|
2012-06-17 13:24:23 -07:00
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(config, NULL);
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(config->theme, NULL);
|
|
|
|
|
|
|
|
if (strchr(config->theme, '/'))
|
|
|
|
return config->theme;
|
|
|
|
|
|
|
|
snprintf(path, sizeof(path), "%s/themes/%s",
|
|
|
|
elm_app_data_dir_get(), config->theme);
|
|
|
|
return path;
|
2012-06-12 03:10:01 -07:00
|
|
|
}
|