aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/config.vala
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--config.vala149
1 files changed, 56 insertions, 93 deletions
diff --git a/config.vala b/config.vala
index c36d533..991d015 100644
--- a/config.vala
+++ b/config.vala
@@ -1,108 +1,71 @@
class Config {
- KeyFile? keyfile = new KeyFile();
- string[] warnings = {};
-
- public Config() {
- var path = Path.build_filename(Environment.get_user_config_dir(), PROGRAM_NAME, "config");
- try {
- keyfile.load_from_file(path, NONE);
- } catch (Error e) {
- // We want to ignore a legitimately missing file, since we fall back to defaults.
- if (!(e is FileError.NOENT)) {
- append_warning(path + ": " + e.message);
- keyfile = null;
- }
- }
+ public bool autohide_mouse;
+ public Vte.CursorShape cursor_shape;
+ public Pango.FontDescription font;
+ public int scrollback;
+ public bool scrollbar;
+
+ public Gdk.RGBA? foreground;
+ public Gdk.RGBA? background;
+ public Gdk.RGBA? cursor_foreground;
+ public Gdk.RGBA? cursor_background;
+ public Gdk.RGBA? selection_foreground;
+ public Gdk.RGBA? selection_background;
+ public Gdk.RGBA? bold;
+
+ public Gdk.RGBA[] palette = new Gdk.RGBA[16];
+
+ struct PaletteEntry {
+ string name;
+ string normal;
+ string bright;
}
- public void append_warning(string message) {
- warning(message);
+ const PaletteEntry[] DEFAULT_PALETTE = {
+ { "black", "black", "grey50" },
+ { "red", "red3", "red" },
+ { "green", "green3", "green" },
+ { "yellow", "yellow3", "yellow" },
+ { "blue", "blue2", "#5c5cff" },
+ { "magenta", "magenta3", "magenta" },
+ { "cyan", "cyan3", "cyan" },
+ { "white", "grey90", "white" },
+ };
- warnings += "• " + Markup.escape_text(message);
- }
-
- void check_error(KeyFileError e) {
- if (!(e is KeyFileError.KEY_NOT_FOUND || e is KeyFileError.GROUP_NOT_FOUND)) {
- append_warning(e.message);
- }
- }
-
- public string[] done() {
- if (keyfile == null) {
- return warnings;
- }
-
- string[] keys = {};
- try {
- foreach(var group in keyfile.get_groups()) {
- foreach(var key in keyfile.get_keys(group)) {
- keys += string.join(".", group, key);
- }
- }
- } catch (KeyFileError e) {
- // purposefully ignored
- }
-
- if (keys.length > 0) {
- string k = keys.length > 1 ? "keys" : "key";
- append_warning("Unknown %s in config: %s".printf(k, string.joinv(", ", keys)));
- }
+ ConfigReader reader;
- return warnings;
+ public Config() {
+ reader = new ConfigReader(Path.build_filename(Environment.get_user_config_dir(), PROGRAM_NAME, "config"));
+ load();
}
- public string? value(string group, string key, string? fallback) {
- if (keyfile == null) { return fallback; }
-
- try {
- string value = keyfile.get_value(group, key);
- keyfile.remove_key(group, key);
- return value;
- } catch (KeyFileError e) {
- check_error(e);
- return fallback;
+ public void load() {
+ autohide_mouse = reader.read_boolean("misc", "autohide-mouse", false);
+ cursor_shape = reader.read_cursor("misc", "cursor-shape", "block");
+ font = Pango.FontDescription.from_string(reader.read_string("misc", "font", "Monospace 12"));
+ scrollback = reader.read_integer("misc", "scrollback", 10000);
+ scrollbar = reader.read_boolean("misc", "scrollbar", true);
+
+ foreground = reader.read_colour("colours", "foreground", null);
+ background = reader.read_colour("colours", "background", null);
+ cursor_foreground = reader.read_colour("colours", "cursor.foreground", null);
+ cursor_background = reader.read_colour("colours", "cursor.background", null);
+ selection_foreground = reader.read_colour("colours", "cursor.foreground", null);
+ selection_background = reader.read_colour("colours", "cursor.background", null);
+ bold = reader.read_colour("colours", "bold", null);
+
+ for (int i = 0; i < DEFAULT_PALETTE.length; i++) {
+ var entry = DEFAULT_PALETTE[i];
+ palette[i] = reader.read_colour("colours", "normal." + entry.name, entry.normal);
+ palette[i + 8] = reader.read_colour("colours", "bright." + entry.name, entry.bright);
}
- }
- public int? integer(string group, string key, int? fallback) {
- if (keyfile == null) { return fallback; }
-
- try {
- int integer = keyfile.get_integer(group, key);
- keyfile.remove_key(group, key);
- return integer;
- } catch (KeyFileError e) {
- check_error(e);
- return fallback;
- }
+ reader.log_unknown_keys();
}
- public bool? boolean(string group, string key, bool? fallback) {
- if (keyfile == null) { return fallback; }
-
- try {
- bool boolean = keyfile.get_boolean(group, key);
- keyfile.remove_key(group, key);
- return boolean;
- } catch (KeyFileError e) {
- check_error(e);
- return fallback;
- }
+ public string[] get_warnings() {
+ return reader.get_warnings();
}
- public Gdk.RGBA? colour(string key, string? fallback) {
- string value = value("colours", key, fallback);
- if (value == null) {
- return null;
- }
-
- var rgba = Gdk.RGBA();
- if (!rgba.parse(value)) {
- append_warning("invalid colour: " + value);
- return null;
- }
-
- return rgba;
- }
}