5 #include <glib/gi18n-lib.h>
16 #define COMMENT_PREFIX "\"#"
19 cb_window_icon(girara_session_t*
session,
const char*
UNUSED(name),
22 g_return_if_fail(session != NULL && value != NULL);
24 if (session->gtk.window != NULL) {
28 gtk_window_set_icon_from_file(GTK_WINDOW(session->gtk.window), path, &error);
30 girara_error(
"failed to load window icon: %s", error->message);
39 cb_font(girara_session_t* session,
const char*
UNUSED(name),
42 g_return_if_fail(session != NULL && value != NULL);
44 pango_font_description_free(session->style.font);
47 PangoFontDescription* font = pango_font_description_from_string(value);
48 session->style.font = font;
51 if (session->gtk.inputbar_entry != NULL) {
52 gtk_widget_override_font(GTK_WIDGET(session->gtk.inputbar_entry), font);
55 if (session->gtk.inputbar_dialog != NULL) {
56 gtk_widget_override_font(GTK_WIDGET(session->gtk.inputbar_dialog), font);
60 if (session->gtk.notification_text != NULL) {
61 gtk_widget_override_font(GTK_WIDGET(session->gtk.notification_text), font);
64 GIRARA_LIST_FOREACH(session->elements.statusbar_items, girara_statusbar_item_t *, iter, item)
66 gtk_widget_override_font(GTK_WIDGET(item->text), font);
72 cb_guioptions(girara_session_t* session,
const char*
UNUSED(name),
75 g_return_if_fail(session != NULL && value != NULL);
78 bool show_commandline =
false;
79 bool show_statusbar =
false;
82 char* input = (
char*) value;
83 int input_length = strlen(input);
85 for (
int i = 0; i < input_length; i++) {
89 show_commandline =
true;
93 show_statusbar =
true;
99 if (show_commandline ==
true) {
100 session->global.autohide_inputbar =
false;
101 gtk_widget_show(session->gtk.inputbar);
103 session->global.autohide_inputbar =
true;
104 gtk_widget_hide(session->gtk.inputbar);
107 if (show_statusbar ==
true) {
108 session->global.hide_statusbar =
false;
109 gtk_widget_show(session->gtk.statusbar);
111 session->global.hide_statusbar =
true;
112 gtk_widget_hide(session->gtk.statusbar);
117 cb_scrollbars(girara_session_t* session,
const char* name,
120 g_return_if_fail(session != NULL && value != NULL);
122 bool val = *(
bool*) value;
123 bool show_hscrollbar =
false;
124 bool show_vscrollbar =
false;
126 #if (GTK_MAJOR_VERSION == 3)
127 GtkWidget *vscrollbar = gtk_scrolled_window_get_vscrollbar(GTK_SCROLLED_WINDOW(session->gtk.view));
128 GtkWidget *hscrollbar = gtk_scrolled_window_get_hscrollbar(GTK_SCROLLED_WINDOW(session->gtk.view));
130 if (vscrollbar != NULL) {
131 show_vscrollbar = gtk_widget_get_visible(vscrollbar);
134 if (hscrollbar != NULL) {
135 show_hscrollbar = gtk_widget_get_visible(hscrollbar);
138 GtkPolicyType h_policy, v_policy;
139 gtk_scrolled_window_get_policy(GTK_SCROLLED_WINDOW(session->gtk.view), &h_policy, &v_policy);
140 show_vscrollbar = (v_policy == GTK_POLICY_AUTOMATIC);
141 show_hscrollbar = (h_policy == GTK_POLICY_AUTOMATIC);
144 if (!strcmp(name,
"show-scrollbars")) {
145 show_hscrollbar = show_vscrollbar = val;
150 }
else if (!strcmp(name,
"show-h-scrollbar")) {
151 show_hscrollbar = val;
153 }
else if (!strcmp(name,
"show-v-scrollbar")) {
154 show_vscrollbar = val;
157 #if (GTK_MAJOR_VERSION == 3)
158 if (vscrollbar != NULL) {
159 gtk_widget_set_visible(vscrollbar, show_vscrollbar);
162 if (hscrollbar != NULL) {
163 gtk_widget_set_visible(hscrollbar, show_hscrollbar);
166 h_policy = show_hscrollbar ? GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER;
167 v_policy = show_vscrollbar ? GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER;
168 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(session->gtk.view), h_policy, v_policy);
174 if (show_hscrollbar && show_vscrollbar && !val) {
177 }
else if (!show_hscrollbar && !show_vscrollbar && val) {
186 if (session == NULL) {
191 int statusbar_h_padding = 8;
192 int statusbar_v_padding = 2;
193 int window_width = 800;
194 int window_height = 600;
195 int n_completion_items = 15;
196 bool show_scrollbars =
false;
200 session->global.autohide_inputbar =
true;
210 girara_setting_add(session,
"completion-fg",
"#DDDDDD",
STRING, TRUE, _(
"Completion foreground color"), NULL, NULL);
211 girara_setting_add(session,
"completion-bg",
"#232323",
STRING, TRUE, _(
"Completion background color"), NULL, NULL);
212 girara_setting_add(session,
"completion-group-fg",
"#DEDEDE",
STRING, TRUE, _(
"Completion group foreground color"), NULL, NULL);
213 girara_setting_add(session,
"completion-group-bg",
"#000000",
STRING, TRUE, _(
"Completion group background color"), NULL, NULL);
214 girara_setting_add(session,
"completion-highlight-fg",
"#232323",
STRING, TRUE, _(
"Completion highlight foreground color"), NULL, NULL);
215 girara_setting_add(session,
"completion-highlight-bg",
"#9FBC00",
STRING, TRUE, _(
"Completion highlight background color"), NULL, NULL);
216 girara_setting_add(session,
"notification-error-fg",
"#FFFFFF",
STRING, TRUE, _(
"Error notification foreground color"), NULL, NULL);
217 girara_setting_add(session,
"notification-error-bg",
"#FF1212",
STRING, TRUE, _(
"Error notification background color"), NULL, NULL);
218 girara_setting_add(session,
"notification-warning-fg",
"#000000",
STRING, TRUE, _(
"Warning notification foreground color"), NULL, NULL);
219 girara_setting_add(session,
"notification-warning-bg",
"#F3F000",
STRING, TRUE, _(
"Warning notifaction background color"), NULL, NULL);
220 girara_setting_add(session,
"notification-fg",
"#000000",
STRING, TRUE, _(
"Notification foreground color"), NULL, NULL);
221 girara_setting_add(session,
"notification-bg",
"#FFFFFF",
STRING, TRUE, _(
"Notification background color"), NULL, NULL);
224 girara_setting_add(session,
"tabbar-focus-fg",
"#9FBC00",
STRING, TRUE, _(
"Tab bar foreground color (active)"), NULL, NULL);
225 girara_setting_add(session,
"tabbar-focus-bg",
"#000000",
STRING, TRUE, _(
"Tab bar background color (active)"), NULL, NULL);
227 girara_setting_add(session,
"window-width", &window_width,
INT, TRUE, _(
"Initial window width"), NULL, NULL);
228 girara_setting_add(session,
"window-height", &window_height,
INT, TRUE, _(
"Initial window height"), NULL, NULL);
229 girara_setting_add(session,
"statusbar-h-padding", &statusbar_h_padding,
INT, TRUE, _(
"Horizontal padding for the status input and notification bars"), NULL, NULL);
230 girara_setting_add(session,
"statusbar-v-padding", &statusbar_v_padding,
INT, TRUE, _(
"Vertical padding for the status input and notification bars"), NULL, NULL);
231 girara_setting_add(session,
"n-completion-items", &n_completion_items,
INT, TRUE, _(
"Number of completion items"), NULL, NULL);
232 girara_setting_add(session,
"show-scrollbars", &show_scrollbars,
BOOLEAN, FALSE, _(
"Show both the horizontal and vertical scrollbars"), cb_scrollbars, NULL);
233 girara_setting_add(session,
"show-h-scrollbar", &show_scrollbars,
BOOLEAN, FALSE, _(
"Show the horizontal scrollbar"), cb_scrollbars, NULL);
234 girara_setting_add(session,
"show-v-scrollbar", &show_scrollbars,
BOOLEAN, FALSE, _(
"Show the vertical scrollbar"), cb_scrollbars, NULL);
237 girara_setting_add(session,
"guioptions",
"s",
STRING, FALSE, _(
"Show or hide certain GUI elements"), cb_guioptions, NULL);
301 if (strcmp(data->identifier, identifier) == 0) {
302 data->handle = handle;
309 girara_config_handle_t* config_handle = g_slice_new(girara_config_handle_t);
311 config_handle->identifier = g_strdup(identifier);
312 config_handle->handle = handle;
321 if (handle == NULL) {
325 g_free(handle->identifier);
326 g_slice_free(girara_config_handle_t, handle);
330 config_parse(girara_session_t* session,
const char* path)
341 unsigned int line_number = 1;
344 if (strlen(line) == 0 || strchr(
COMMENT_PREFIX, line[0]) != NULL) {
353 if (argument_list == NULL) {
360 if (g_shell_parse_argv(line, &argc, &argv, NULL) != FALSE) {
361 for(
int i = 1; i < argc; i++) {
362 char* argument = g_strdup(argv[i]);
373 if (strcmp(argv[0],
"include") == 0) {
375 girara_warning(
"Could not process line %d in '%s': usage: include path.", line_number, path);
377 char* newpath = NULL;
378 if (g_path_is_absolute(argv[1]) == TRUE) {
379 newpath = g_strdup(argv[1]);
381 char* basename = g_path_get_dirname(path);
382 char* tmp = g_build_filename(basename, argv[1], NULL);
388 if (strcmp(newpath, path) == 0) {
389 girara_warning(
"Could not process line %d in '%s': trying to include itself.", line_number, path);
392 if (config_parse(session, newpath) == FALSE) {
393 girara_warning(
"Could not process line %d in '%s': failed to load '%s'.", line_number, path, newpath);
400 girara_config_handle_t* handle = NULL;
403 if (strcmp(handle->identifier, argv[0]) == 0) {
404 handle->handle(session, argument_list);
411 if (handle == NULL) {
412 girara_warning(
"Could not process line %d in '%s': Unknown handle '%s'", line_number, path, argv[0]);
429 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)
girara_session_t * session
HIDDEN bool girara_sc_feedkeys(girara_session_t *session, girara_argument_t *argument, girara_event_t *event, unsigned int t)
bool girara_sc_tab_navigate(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))
HIDDEN bool girara_cmd_quit(girara_session_t *session, girara_list_t *argument_list)
void girara_list_free(girara_list_t *list)
girara_isc_completion(session,&arg, NULL, 0)
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_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_completion_group_t *group value
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)
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))
GIRARA_LIST_FOREACH_END(session->bindings.mouse_events, girara_mouse_event_t *, iter, mouse_event)
char * girara_fix_path(const char *path)
bool girara_setting_get(girara_session_t *session, const char *name, void *dest)
if(mouse_event->function!=NULL &&button->button==mouse_event->button &&state==mouse_event->mask &&mouse_event->event_type==GIRARA_EVENT_BUTTON_RELEASE &&(session->modes.current_mode==mouse_event->mode||mouse_event->mode==0))
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_error(...)
#define girara_warning(...)
g_return_val_if_fail(button!=NULL, false)
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)
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)
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(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))