5 #include <glib/gi18n-lib.h>
17 #define COMMENT_PREFIX "\"#"
20 cb_window_icon(girara_session_t* session,
const char*
UNUSED(name),
23 g_return_if_fail(session != NULL && value != NULL);
25 if (session->gtk.window == NULL) {
30 GtkWindow* window = GTK_WINDOW(session->gtk.window);
33 gtk_window_set_icon_from_file(window, path, &error);
40 girara_debug(
"Failed to load window icon (file): %s", error->message);
44 gtk_window_set_icon_name(window, value);
48 cb_font(girara_session_t* session,
const char*
UNUSED(name),
51 g_return_if_fail(session != NULL && value != NULL);
54 pango_font_description_free(session->style.font);
57 PangoFontDescription*
font = pango_font_description_from_string(value);
58 session->style.font =
font;
60 char* fontname = pango_font_description_to_string(session->style.font);
68 cb_guioptions(girara_session_t* session,
const char*
UNUSED(name),
71 g_return_if_fail(session != NULL && value != NULL);
74 bool show_commandline =
false;
75 bool show_statusbar =
false;
76 bool show_hscrollbar =
false;
77 bool show_vscrollbar =
false;
80 char* input = (
char*) value;
81 const size_t input_length = strlen(input);
83 for (
size_t i = 0; i < input_length; i++) {
87 show_commandline =
true;
91 show_statusbar =
true;
94 show_hscrollbar =
true;
97 show_vscrollbar =
true;
103 if (show_commandline ==
true) {
104 session->global.autohide_inputbar =
false;
105 gtk_widget_show(session->gtk.inputbar);
107 session->global.autohide_inputbar =
true;
108 gtk_widget_hide(session->gtk.inputbar);
111 if (show_statusbar ==
true) {
112 session->global.hide_statusbar =
false;
113 gtk_widget_show(session->gtk.statusbar);
115 session->global.hide_statusbar =
true;
116 gtk_widget_hide(session->gtk.statusbar);
119 GtkWidget* vscrollbar = gtk_scrolled_window_get_vscrollbar(GTK_SCROLLED_WINDOW(session->gtk.view));
120 GtkWidget* hscrollbar = gtk_scrolled_window_get_hscrollbar(GTK_SCROLLED_WINDOW(session->gtk.view));
122 if (vscrollbar != NULL) {
123 if (show_vscrollbar ==
true) {
124 gtk_widget_unset_state_flags(vscrollbar, GTK_STATE_FLAG_INSENSITIVE);
126 gtk_widget_set_state_flags(vscrollbar, GTK_STATE_FLAG_INSENSITIVE,
false);
129 if (hscrollbar != NULL) {
130 if (show_hscrollbar ==
true) {
131 gtk_widget_unset_state_flags(hscrollbar, GTK_STATE_FLAG_INSENSITIVE);
133 gtk_widget_set_state_flags(hscrollbar, GTK_STATE_FLAG_INSENSITIVE,
false);
139 cb_scrollbars(girara_session_t* session,
const char* name,
142 g_return_if_fail(session != NULL && value != NULL);
144 const bool val = *(
bool*) value;
146 char* guioptions = NULL;
148 g_return_if_fail(guioptions != NULL);
150 bool show_hscrollbar = strchr(guioptions,
'h') != NULL;
151 bool show_vscrollbar = strchr(guioptions,
'v') != NULL;
153 if (strcmp(name,
"show-scrollbars") == 0) {
154 show_hscrollbar = show_vscrollbar = val;
155 }
else if (strcmp(name,
"show-h-scrollbar") == 0) {
156 show_hscrollbar = val;
157 }
else if (strcmp(name,
"show-v-scrollbar") == 0) {
158 show_vscrollbar = val;
161 const size_t guioptions_len = strlen(guioptions);
162 char* new_guioptions = g_try_malloc0(
sizeof(
char) * (guioptions_len + 3));
163 char* iterator = new_guioptions;
164 if (new_guioptions == NULL) {
170 for (
size_t i = 0; i != guioptions_len; ++i) {
171 if (guioptions[i] !=
'h' && guioptions[i] !=
'v') {
172 *iterator = guioptions[i];
178 if (show_hscrollbar ==
true) {
182 if (show_vscrollbar ==
true) {
188 g_free(new_guioptions);
194 if (session == NULL) {
199 int statusbar_h_padding = 8;
200 int statusbar_v_padding = 2;
201 int window_width = 800;
202 int window_height = 600;
203 int n_completion_items = 15;
204 bool show_scrollbars =
false;
208 session->global.autohide_inputbar =
true;
218 girara_setting_add(session,
"completion-fg",
"#DDDDDD",
STRING, TRUE, _(
"Completion foreground color"), NULL, NULL);
219 girara_setting_add(session,
"completion-bg",
"#232323",
STRING, TRUE, _(
"Completion background color"), NULL, NULL);
220 girara_setting_add(session,
"completion-group-fg",
"#DEDEDE",
STRING, TRUE, _(
"Completion group foreground color"), NULL, NULL);
221 girara_setting_add(session,
"completion-group-bg",
"#000000",
STRING, TRUE, _(
"Completion group background color"), NULL, NULL);
222 girara_setting_add(session,
"completion-highlight-fg",
"#232323",
STRING, TRUE, _(
"Completion highlight foreground color"), NULL, NULL);
223 girara_setting_add(session,
"completion-highlight-bg",
"#9FBC00",
STRING, TRUE, _(
"Completion highlight background color"), NULL, NULL);
224 girara_setting_add(session,
"notification-error-fg",
"#FFFFFF",
STRING, TRUE, _(
"Error notification foreground color"), NULL, NULL);
225 girara_setting_add(session,
"notification-error-bg",
"#FF1212",
STRING, TRUE, _(
"Error notification background color"), NULL, NULL);
226 girara_setting_add(session,
"notification-warning-fg",
"#000000",
STRING, TRUE, _(
"Warning notification foreground color"), NULL, NULL);
227 girara_setting_add(session,
"notification-warning-bg",
"#F3F000",
STRING, TRUE, _(
"Warning notifaction background color"), NULL, NULL);
228 girara_setting_add(session,
"notification-fg",
"#000000",
STRING, TRUE, _(
"Notification foreground color"), NULL, NULL);
229 girara_setting_add(session,
"notification-bg",
"#FFFFFF",
STRING, TRUE, _(
"Notification background color"), NULL, NULL);
232 girara_setting_add(session,
"tabbar-focus-fg",
"#9FBC00",
STRING, TRUE, _(
"Tab bar foreground color (active)"), NULL, NULL);
233 girara_setting_add(session,
"tabbar-focus-bg",
"#000000",
STRING, TRUE, _(
"Tab bar background color (active)"), NULL, NULL);
235 girara_setting_add(session,
"window-width", &window_width,
INT, TRUE, _(
"Initial window width"), NULL, NULL);
236 girara_setting_add(session,
"window-height", &window_height,
INT, TRUE, _(
"Initial window height"), NULL, NULL);
237 girara_setting_add(session,
"statusbar-h-padding", &statusbar_h_padding,
INT, TRUE, _(
"Horizontal padding for the status input and notification bars"), NULL, NULL);
238 girara_setting_add(session,
"statusbar-v-padding", &statusbar_v_padding,
INT, TRUE, _(
"Vertical padding for the status input and notification bars"), NULL, NULL);
239 girara_setting_add(session,
"n-completion-items", &n_completion_items,
INT, TRUE, _(
"Number of completion items"), NULL, NULL);
240 girara_setting_add(session,
"show-scrollbars", &show_scrollbars,
BOOLEAN, FALSE, _(
"Show both the horizontal and vertical scrollbars"), cb_scrollbars, NULL);
241 girara_setting_add(session,
"show-h-scrollbar", &show_scrollbars,
BOOLEAN, FALSE, _(
"Show the horizontal scrollbar"), cb_scrollbars, NULL);
242 girara_setting_add(session,
"show-v-scrollbar", &show_scrollbars,
BOOLEAN, FALSE, _(
"Show the vertical scrollbar"), cb_scrollbars, NULL);
245 girara_setting_add(session,
"guioptions",
"s",
STRING, FALSE, _(
"Show or hide certain GUI elements"), cb_guioptions, NULL);
304 g_return_val_if_fail(session != NULL,
false);
305 g_return_val_if_fail(identifier != NULL,
false);
309 if (strcmp(data->identifier, identifier) == 0) {
310 data->handle = handle;
317 girara_config_handle_t* config_handle = g_slice_new(girara_config_handle_t);
319 config_handle->identifier = g_strdup(identifier);
320 config_handle->handle = handle;
329 if (handle == NULL) {
333 g_free(handle->identifier);
334 g_slice_free(girara_config_handle_t, handle);
338 config_parse(girara_session_t* session,
const char* path)
349 unsigned int line_number = 1;
352 if (strlen(line) == 0 || strchr(
COMMENT_PREFIX, line[0]) != NULL) {
361 if (argument_list == NULL) {
368 if (g_shell_parse_argv(line, &argc, &argv, NULL) != FALSE) {
369 for(
int i = 1; i < argc; i++) {
370 char* argument = g_strdup(argv[i]);
381 if (strcmp(argv[0],
"include") == 0) {
383 girara_warning(
"Could not process line %d in '%s': usage: include path.", line_number, path);
385 char* newpath = NULL;
386 if (g_path_is_absolute(argv[1]) == TRUE) {
387 newpath = g_strdup(argv[1]);
389 char* basename = g_path_get_dirname(path);
390 char* tmp = g_build_filename(basename, argv[1], NULL);
396 if (strcmp(newpath, path) == 0) {
397 girara_warning(
"Could not process line %d in '%s': trying to include itself.", line_number, path);
400 if (config_parse(session, newpath) == FALSE) {
401 girara_warning(
"Could not process line %d in '%s': failed to load '%s'.", line_number, path, newpath);
408 girara_config_handle_t* handle = NULL;
411 if (strcmp(handle->identifier, argv[0]) == 0) {
412 handle->handle(session, argument_list);
419 if (handle == NULL) {
420 girara_warning(
"Could not process line %d in '%s': Unknown handle '%s'", line_number, path, argv[0]);
437 config_parse(session, path);
bool girara_shortcut_add(girara_session_t *session, guint modifier, guint key, const char *buffer, girara_shortcut_function_t function, girara_mode_t mode, int argument_n, void *argument_data)
void girara_config_handle_free(girara_config_handle_t *handle)
bool girara_setting_add(girara_session_t *session, const char *name, void *value, girara_setting_type_t type, bool init_only, const char *description, girara_setting_callback_t callback, void *data)
bool girara_sc_abort(girara_session_t *session, girara_argument_t *UNUSED(argument), girara_event_t *UNUSED(event), unsigned int UNUSED(t))
HIDDEN girara_completion_t * girara_cc_set(girara_session_t *session, const char *input)
#define girara_debug(...)
void girara_list_append(girara_list_t *list, void *data)
bool girara_sc_tab_navigate_prev(girara_session_t *session, girara_argument_t *argument, girara_event_t *event, unsigned int t)
FILE * girara_file_open(const char *path, const char *mode)
bool girara_sc_tab_navigate(girara_session_t *session, girara_argument_t *argument, girara_event_t *UNUSED(event), unsigned int t)
HIDDEN bool girara_sc_feedkeys(girara_session_t *session, girara_argument_t *argument, girara_event_t *event, unsigned int t)
bool girara_cmd_exec(girara_session_t *session, girara_list_t *argument_list)
bool girara_sc_focus_inputbar(girara_session_t *session, girara_argument_t *argument, girara_event_t *UNUSED(event), unsigned int UNUSED(t))
void girara_list_free(girara_list_t *list)
void girara_list_set_free_function(girara_list_t *list, girara_free_function_t gfree)
bool girara_cmd_set(girara_session_t *session, girara_list_t *argument_list)
void girara_config_load_default(girara_session_t *session)
bool girara_isc_completion(girara_session_t *session, girara_argument_t *argument, girara_event_t *UNUSED(event), unsigned int UNUSED(t))
void girara_template_set_variable_value(GiraraTemplate *object, const char *name, const char *value)
bool girara_config_handle_add(girara_session_t *session, const char *identifier, girara_command_function_t handle)
bool girara_shortcut_mapping_add(girara_session_t *session, const char *identifier, girara_shortcut_function_t function)
bool girara_inputbar_command_add(girara_session_t *session, const char *command, const char *abbreviation, girara_command_function_t function, girara_completion_function_t completion, const char *description)
girara_list_t * girara_list_new(void)
bool girara_sc_set(girara_session_t *session, girara_argument_t *argument, girara_event_t *UNUSED(event), unsigned int UNUSED(t))
void girara_list_iterator_free(girara_list_iterator_t *iter)
bool girara_cmd_quit(girara_session_t *session, girara_list_t *UNUSED(argument_list))
char * girara_file_read_line(FILE *file)
bool girara_isc_command_history(girara_session_t *session, girara_argument_t *argument, girara_event_t *UNUSED(event), unsigned int UNUSED(t))
char * girara_fix_path(const char *path)
bool girara_setting_get(girara_session_t *session, const char *name, void *dest)
bool girara_sc_tab_close(girara_session_t *session, girara_argument_t *UNUSED(argument), girara_event_t *UNUSED(event), unsigned int UNUSED(t))
#define girara_warning(...)
bool girara_isc_abort(girara_session_t *session, girara_argument_t *UNUSED(argument), girara_event_t *UNUSED(event), unsigned int UNUSED(t))
bool(* girara_command_function_t)(girara_session_t *session, girara_list_t *argument_list)
bool girara_sc_tab_navigate_next(girara_session_t *session, girara_argument_t *argument, girara_event_t *event, unsigned int t)
bool girara_cmd_unmap(girara_session_t *session, girara_list_t *argument_list)
PangoFontDescription * font
bool girara_setting_set(girara_session_t *session, const char *name, void *value)
bool girara_inputbar_shortcut_add(girara_session_t *session, guint modifier, guint key, girara_shortcut_function_t function, int argument_n, void *argument_data)
#define GIRARA_IGNORE_DEPRECATED
void girara_config_parse(girara_session_t *session, const char *path)
bool girara_sc_quit(girara_session_t *session, girara_argument_t *UNUSED(argument), girara_event_t *UNUSED(event), unsigned int UNUSED(t))
bool girara_cmd_map(girara_session_t *session, girara_list_t *argument_list)
#define GIRARA_LIST_FOREACH_END(list, type, iter, data)
#define GIRARA_LIST_FOREACH(list, type, iter, data)
bool girara_isc_string_manipulation(girara_session_t *session, girara_argument_t *argument, girara_event_t *UNUSED(event), unsigned int UNUSED(t))