diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2019-03-01 10:15:17 +0100 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2019-03-01 10:15:17 +0100 |
commit | 40f389d427d46159d6ddd249f73fad59b507780e (patch) | |
tree | d365099594291bf19128216b485a8171eca2afe5 | |
parent | eb769e3d7f4a073d4c37ed524ebd5017c6a578f5 (diff) | |
download | fbida-40f389d427d46159d6ddd249f73fad59b507780e.tar.gz |
fbcon: add config file
-rw-r--r-- | fbcon.c | 82 | ||||
-rw-r--r-- | fbcon.desktop | 2 | ||||
-rw-r--r-- | meson.build | 3 |
3 files changed, 72 insertions, 15 deletions
@@ -22,6 +22,7 @@ #include <linux/input.h> +#include <glib.h> #include <cairo.h> #include <libudev.h> #include <libinput.h> @@ -36,8 +37,11 @@ /* ---------------------------------------------------------------------- */ static char *seat_name = "seat0"; + +/* config */ static char *font_name = "monospace"; static int font_size = 16; +static bool verbose; static gfxstate *gfx; static cairo_font_extents_t extents; @@ -71,6 +75,55 @@ int debug = 0; /* ---------------------------------------------------------------------- */ +#define FBCON_CFG_FILE ".config/fbcon.conf" +#define FBCON_CFG_GROUP "fbcon" +#define FBCON_CFG_FONT_FACE "font-face" +#define FBCON_CFG_FONT_SIZE "font-size" +#define FBCON_CFG_VERBOSE "verbose" + +static void fbcon_read_config(void) +{ + char *filename; + GKeyFile *cfg; + char *string; + int integer; + + cfg = g_key_file_new(); + filename = g_strdup_printf("%s/%s", getenv("HOME"), FBCON_CFG_FILE); + g_key_file_load_from_file(cfg, filename, G_KEY_FILE_NONE, NULL); + + string = g_key_file_get_string(cfg, FBCON_CFG_GROUP, FBCON_CFG_FONT_FACE, NULL); + if (string) + font_name = string; + + integer = g_key_file_get_integer(cfg, FBCON_CFG_GROUP, FBCON_CFG_FONT_SIZE, NULL); + if (integer) + font_size =integer; + + verbose = g_key_file_get_boolean(cfg, FBCON_CFG_GROUP, FBCON_CFG_VERBOSE, NULL); + + g_free(filename); +} + +static void fbcon_write_config(void) +{ + char *filename; + GKeyFile *cfg; + + cfg = g_key_file_new(); + filename = g_strdup_printf("%s/%s", getenv("HOME"), FBCON_CFG_FILE); + g_key_file_load_from_file(cfg, filename, G_KEY_FILE_KEEP_COMMENTS, NULL); + + g_key_file_set_string(cfg, FBCON_CFG_GROUP, FBCON_CFG_FONT_FACE, font_name); + g_key_file_set_integer(cfg, FBCON_CFG_GROUP, FBCON_CFG_FONT_SIZE, font_size); + g_key_file_set_boolean(cfg, FBCON_CFG_GROUP, FBCON_CFG_VERBOSE, verbose); + + g_key_file_save_to_file(cfg, filename, NULL); + g_free(filename); +} + +/* ---------------------------------------------------------------------- */ + static jmp_buf fb_fatal_cleanup; static void catch_exit_signal(int signal) @@ -369,11 +422,13 @@ static void fbcon_handle_keydown(struct xkb_state *state, if (ctrlalt && sym == XKB_KEY_plus) { font_size += 2; fbcon_resize(); + fbcon_write_config(); return; } if (ctrlalt && sym == XKB_KEY_minus && font_size > 8) { font_size -= 2; fbcon_resize(); + fbcon_write_config(); return; } @@ -424,19 +479,19 @@ static void fbcon_child_exec_shell(struct winsize *win) return; } -#if 1 - fprintf(stderr, "#\n"); - fprintf(stderr, "# This is fbcon @%s\n", seat_name); - fprintf(stderr, "# device: %s\n", gfx->devpath); - fprintf(stderr, "# format: %c%c%c%c\n", - (gfx->fmt->fourcc >> 0) & 0xff, - (gfx->fmt->fourcc >> 8) & 0xff, - (gfx->fmt->fourcc >> 16) & 0xff, - (gfx->fmt->fourcc >> 24) & 0xff); - fprintf(stderr, "# font: %s-%d\n", font_name, font_size); - fprintf(stderr, "# size: %dx%d\n", win->ws_col, win->ws_row); - fprintf(stderr, "#\n"); -#endif + if (verbose) { + fprintf(stderr, "#\n"); + fprintf(stderr, "# This is fbcon @%s\n", seat_name); + fprintf(stderr, "# device: %s\n", gfx->devpath); + fprintf(stderr, "# format: %c%c%c%c\n", + (gfx->fmt->fourcc >> 0) & 0xff, + (gfx->fmt->fourcc >> 8) & 0xff, + (gfx->fmt->fourcc >> 16) & 0xff, + (gfx->fmt->fourcc >> 24) & 0xff); + fprintf(stderr, "# font: %s-%d\n", font_name, font_size); + fprintf(stderr, "# size: %dx%d\n", win->ws_col, win->ws_row); + fprintf(stderr, "#\n"); + } /* prepare environment, run shell */ snprintf(lines, sizeof(lines), "%d", win->ws_row); @@ -462,6 +517,7 @@ int main(int argc, char *argv[]) pid_t child; setlocale(LC_ALL,""); + fbcon_read_config(); /* look for gfx devices */ udev = udev_new(); diff --git a/fbcon.desktop b/fbcon.desktop index 4691772..f8e7e6d 100644 --- a/fbcon.desktop +++ b/fbcon.desktop @@ -1,5 +1,5 @@ [Desktop Entry] -Name=fbcon +Name=text console Exec=/usr/bin/fbcon TryExec=/usr/bin/fbcon Type=Application diff --git a/meson.build b/meson.build index af71b23..aa695f2 100644 --- a/meson.build +++ b/meson.build @@ -27,6 +27,7 @@ webp_dep = dependency('libwebp', required : false) udev_dep = dependency('libudev') input_dep = dependency('libinput') xkb_dep = dependency('xkbcommon') +glib_dep = dependency('glib-2.0') tsm_dep = dependency('libtsm', required : false) # other library deps @@ -129,7 +130,7 @@ executable('fbpdf', # build fbcon fbcon_srcs = [ 'fbcon.c', 'drmtools.c', 'fbtools.c', 'gfx.c', 'vt.c', 'kbd.c' ] -fbcon_deps = [ drm_dep, cairo_dep, util_dep, udev_dep, input_dep, xkb_dep, tsm_dep ] +fbcon_deps = [ drm_dep, cairo_dep, util_dep, udev_dep, input_dep, xkb_dep, glib_dep, tsm_dep ] if tsm_dep.found() executable('fbcon', |