58#include <gdk/gdkkeysyms.h>
75static gboolean
on_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer user_data);
124 if (mods & GDK_MOD2_MASK)
127 mods &= ~GDK_MOD2_MASK;
130 return mods & gtk_accelerator_get_default_mod_mask();
144 g_assert(key_id < group->plugin_key_count);
145 return &
group->plugin_keys[key_id];
173 const gchar *kf_name,
const gchar *
label, GtkWidget *menu_item)
180 g_ptr_array_add(
group->key_items, kb);
191 kb->
name = (gchar *)kf_name;
232 guint key, GdkModifierType mod,
const gchar *kf_name,
const gchar *
label,
234 GDestroyNotify destroy_notify)
239 g_assert(
group->plugin);
269 group->callback = callback;
272 group->plugin = plugin;
290 const gchar *kf_name,
const gchar *
label,
const gchar *widget_name)
292 GtkWidget *widget = widget_name ?
296 key, mod, kf_name,
label, widget);
300#define ADD_KB_GROUP(group_id, label, callback) \
301 add_kb_group(keybindings_get_core_group(group_id),\
302 keybindings_keyfile_group_name, label, callback, FALSE)
339 _(
"Open selected file"),
"menu_open_selected_file1");
343 0, 0,
"menu_saveas",
_(
"Save as"),
"menu_save_as1");
359 0, 0,
"menu_reloadall",
_(
"Reload all files"),
NULL);
361 0, 0,
"file_openlasttab",
_(
"Re-open last closed tab"),
NULL);
368 0, 0,
"project_new",
_(
"New"),
"project_new1");
370 0, 0,
"project_open",
_(
"Open"),
"project_open1");
372 0, 0,
"project_properties",
375 0, 0,
"project_close",
_(
"Close"),
"project_close1");
385 "duplicate_line_or_selection1");
388 "delete_current_lines1");
391 _(
"Delete to line end"),
NULL);
394 _(
"Delete to beginning of line"),
NULL);
397 0, 0,
"edit_transposeline",
_(
"_Transpose Current Line"),
NULL);
401 GDK_KEY_Up, GDK_MOD1_MASK,
"edit_scrolllineup",
_(
"Scroll up the view by one line"),
NULL);
403 GDK_KEY_Down, GDK_MOD1_MASK,
"edit_scrolllinedown",
_(
"Scroll down the view by one line"),
NULL);
405 GDK_KEY_Tab, 0,
"edit_completesnippet",
_(
"Complete snippet"),
NULL);
407 0, 0,
"move_snippetnextcursor",
_(
"Move cursor in snippet"),
NULL);
409 0, 0,
"edit_suppresssnippetcompletion",
_(
"Suppress snippet completion"),
NULL);
411 0, 0,
"popup_contextaction",
_(
"Context Action"),
NULL);
417 GDK_KEY_Tab, 0,
"edit_wordpartcompletion",
_(
"Word part completion"),
NULL);
419 GDK_KEY_Page_Up, GDK_MOD1_MASK,
"edit_movelineup",
420 _(
"Move line(s) up"),
"move_lines_up1");
422 GDK_KEY_Page_Down, GDK_MOD1_MASK,
"edit_movelinedown",
423 _(
"Move line(s) down"),
"move_lines_down1");
435 "copy_current_lines1");
438 "cut_current_lines1");
445 GDK_KEY_w, GDK_SHIFT_MASK | GDK_MOD1_MASK,
"edit_selectword",
_(
"Select current word"),
NULL);
447 GDK_KEY_l, GDK_SHIFT_MASK | GDK_MOD1_MASK,
"edit_selectline",
_(
"S_elect Current Line(s)"),
448 "select_current_lines1");
450 GDK_KEY_p, GDK_SHIFT_MASK | GDK_MOD1_MASK,
"edit_selectparagraph",
_(
"Se_lect Current Paragraph"),
451 "select_current_paragraph1");
453 0, 0,
"edit_selectwordpartleft",
_(
"Select to previous word part"),
NULL);
455 0, 0,
"edit_selectwordpartright",
_(
"Select to next word part"),
NULL);
461 _(
"T_oggle Case of Selection"),
"menu_toggle_case2");
464 "menu_toggle_line_commentation1");
466 0, 0,
"edit_commentline",
_(
"Comment line(s)"),
"menu_comment_line1");
468 0, 0,
"edit_uncommentline",
_(
"Uncomment line(s)"),
"menu_uncomment_line1");
471 "menu_increase_indent1");
474 "menu_decrease_indent1");
476 0, 0,
"edit_increaseindentbyspace",
_(
"Increase indent by one space"),
NULL);
478 0, 0,
"edit_decreaseindentbyspace",
_(
"Decrease indent by one space"),
NULL);
480 0, 0,
"edit_autoindent",
_(
"S_mart Line Indent"),
"smart_line_indent1");
488 0, 0,
"edit_sendtocmd4",
_(
"Send to Custom Command 4"),
NULL);
490 0, 0,
"edit_sendtocmd5",
_(
"Send to Custom Command 5"),
NULL);
492 0, 0,
"edit_sendtocmd6",
_(
"Send to Custom Command 6"),
NULL);
494 0, 0,
"edit_sendtocmd7",
_(
"Send to Custom Command 7"),
NULL);
496 0, 0,
"edit_sendtocmd8",
_(
"Send to Custom Command 8"),
NULL);
498 0, 0,
"edit_sendtocmd9",
_(
"Send to Custom Command 9"),
NULL);
501 0, 0,
"edit_sendtovte",
_(
"_Send Selection to Terminal"),
"send_selection_to_vte1");
504 "reflow_lines_block1");
506 0, 0,
"edit_joinlines",
_(
"Join lines"),
NULL);
511 GDK_KEY_d, GDK_SHIFT_MASK | GDK_MOD1_MASK,
"menu_insert_date",
_(
"Insert date"),
512 "insert_date_custom1");
514 0, 0,
"edit_insertwhitespace",
_(
"Insert Alternative _White Space"),
515 "insert_alternative_white_space1");
517 0, 0,
"edit_insertlinebefore",
_(
"Insert New Line Before Current"),
NULL);
519 0, 0,
"edit_insertlineafter",
_(
"Insert New Line After Current"),
NULL);
527 0, 0,
"menu_pluginpreferences",
_(
"P_lugin Preferences"),
"plugin_preferences1");
539 0, 0,
"menu_findnextsel",
_(
"Find Next _Selection"),
"find_nextsel1");
541 0, 0,
"menu_findprevsel",
_(
"Find Pre_vious Selection"),
"find_prevsel1");
548 0, 0,
"menu_nextmessage",
_(
"Next Message"),
"next_message1");
550 0, 0,
"menu_previousmessage",
_(
"Previous Message"),
"previous_message1");
553 _(
"Find Usage"),
"find_usage1");
556 _(
"Find Document Usage"),
"find_document_usage1");
563 GDK_KEY_Left, GDK_MOD1_MASK,
"nav_back",
_(
"Navigate back a location"),
NULL);
565 GDK_KEY_Right, GDK_MOD1_MASK,
"nav_forward",
_(
"Navigate forward a location"),
NULL);
570 _(
"Go to matching brace"),
NULL);
573 _(
"Toggle marker"),
NULL);
576 _(
"Go to Ne_xt Marker"),
"go_to_next_marker1");
579 _(
"Go to Pre_vious Marker"),
"go_to_previous_marker1");
582 _(
"Go to Symbol Definition"),
"goto_tag_definition1");
585 _(
"Go to Symbol Declaration"),
"goto_tag_declaration1");
587 GDK_KEY_Home, 0,
"edit_gotolinestart",
_(
"Go to Start of Line"),
NULL);
589 GDK_KEY_End, 0,
"edit_gotolineend",
_(
"Go to End of Line"),
NULL);
591 GDK_KEY_Home, GDK_MOD1_MASK,
"edit_gotolinestartvisual",
_(
"Go to Start of Display Line"),
NULL);
593 GDK_KEY_End, GDK_MOD1_MASK,
"edit_gotolineendvisual",
_(
"Go to End of Display Line"),
NULL);
602 0, 0,
"menu_toggleall",
_(
"Toggle All Additional Widgets"),
603 "menu_toggle_all_additional_widgets1");
605 GDK_KEY_F11, 0,
"menu_fullscreen",
_(
"Fullscreen"),
"menu_fullscreen1");
607 0, 0,
"menu_messagewindow",
_(
"Toggle Messages Window"),
608 "menu_show_messages_window1");
610 0, 0,
"toggle_sidebar",
_(
"Toggle Sidebar"),
"menu_show_sidebar1");
621 GDK_KEY_F2, 0,
"switch_editor",
_(
"Switch to Editor"),
NULL);
623 GDK_KEY_F7, 0,
"switch_search_bar",
_(
"Switch to Search Bar"),
NULL);
625 0, 0,
"switch_message_window",
_(
"Switch to Message Window"),
NULL);
627 0, 0,
"switch_compiler",
_(
"Switch to Compiler"),
NULL);
629 0, 0,
"switch_messages",
_(
"Switch to Messages"),
NULL);
631 GDK_KEY_F6, 0,
"switch_scribble",
_(
"Switch to Scribble"),
NULL);
633 GDK_KEY_F4, 0,
"switch_vte",
_(
"Switch to VTE"),
NULL);
635 0, 0,
"switch_sidebar",
_(
"Switch to Sidebar"),
NULL);
637 0, 0,
"switch_sidebar_symbol_list",
_(
"Switch to Sidebar Symbol List"),
NULL);
639 0, 0,
"switch_sidebar_doc_list",
_(
"Switch to Sidebar Document List"),
NULL);
651 _(
"Move document left"),
NULL);
654 _(
"Move document right"),
NULL);
656 0, 0,
"move_tabfirst",
_(
"Move document first"),
NULL);
658 0, 0,
"move_tablast",
_(
"Move document last"),
NULL);
663 0, 0,
"menu_linewrap",
_(
"Toggle Line wrapping"),
"menu_line_wrapping1");
665 0, 0,
"menu_linebreak",
_(
"Toggle Line breaking"),
"line_breaking1");
667 0, 0,
"menu_clone",
_(
"_Clone"),
"clone1");
669 0, 0,
"menu_strip_trailing_spaces",
_(
"_Strip Trailing Spaces"),
"strip_trailing_spaces1");
671 0, 0,
"menu_replacetabs",
_(
"Replace tabs with space"),
"menu_replace_tabs");
673 0, 0,
"menu_replacespaces",
_(
"Replace spaces with tabs"),
"menu_replace_spaces");
675 0, 0,
"menu_togglefold",
_(
"Toggle current fold"),
NULL);
677 0, 0,
"menu_foldall",
_(
"Fold all"),
"menu_fold_all1");
679 0, 0,
"menu_unfoldall",
_(
"Unfold all"),
"menu_unfold_all1");
683 0, 0,
"remove_markers",
_(
"Remove Markers"),
"remove_markers1");
685 0, 0,
"remove_error_indicators",
_(
"Remove Error Indicators"),
"menu_remove_indicators1");
687 0, 0,
"remove_markers_and_indicators",
_(
"Remove Markers and Error Indicators"),
NULL);
692 GDK_KEY_F8, 0,
"build_compile",
_(
"Compile"),
NULL);
694 GDK_KEY_F9, 0,
"build_link",
_(
"Build"),
NULL);
696 GDK_KEY_F9, GDK_SHIFT_MASK,
"build_make",
_(
"Make all"),
NULL);
699 _(
"Make custom target"),
NULL);
701 GDK_KEY_F8, GDK_SHIFT_MASK,
"build_makeobject",
_(
"Make object"),
NULL);
703 0, 0,
"build_nexterror",
_(
"Next error"),
NULL);
705 0, 0,
"build_previouserror",
_(
"Previous error"),
NULL);
707 GDK_KEY_F5, 0,
"build_run",
_(
"Run"),
NULL);
709 0, 0,
"build_options",
_(
"Build options"),
NULL);
714 0, 0,
"menu_opencolorchooser",
_(
"Show Color Chooser"),
"menu_choose_color1");
719 GDK_KEY_F1, 0,
"menu_help",
_(
"Help"),
"help1");
727 g_ptr_array_free(
group->key_items, TRUE);
731 if (
group->cb_data_destroy)
733 g_free(
group->plugin_keys);
736 g_free((gchar *)
group->label);
767 cb(
group, kb, user_data);
774 GKeyFile *config = user_data;
777 GdkModifierType mods;
782 gtk_accelerator_parse(val, &key, &mods);
792 gchar *configfile = g_build_filename(
app->
configdir,
"keybindings.conf",
NULL);
793 GKeyFile *config = g_key_file_new();
796 if (!g_file_test(configfile, G_FILE_TEST_EXISTS))
799 const gchar data[] =
"[Bindings]\n"
800 "popup_gototagdefinition=\n"
801 "edit_transposeline=<Control>t\n"
803 "edit_movelinedown=\n"
804 "move_tableft=<Alt>Page_Up\n"
805 "move_tabright=<Alt>Page_Down\n";
813 if (g_key_file_load_from_file(config, configfile, G_KEY_FILE_KEEP_COMMENTS,
NULL))
818 g_key_file_free(config);
827 kb->
key, kb->
mods, GTK_ACCEL_VISIBLE);
858 kb->
key, kb->
mods, GTK_ACCEL_VISIBLE);
862#define GEANY_ADD_POPUP_ACCEL(kb_id, wid) \
863 add_menu_accel(group, kb_id, ui_lookup_widget(main_widgets.editor_menu, G_STRINGIFY(wid)))
905 GKeyFile *config = user_data;
908 val = gtk_accelerator_name(kb->
key, kb->
mods);
917 gchar *configfile = g_build_filename(
app->
configdir,
"keybindings.conf",
NULL);
919 GKeyFile *config = g_key_file_new();
921 g_key_file_load_from_file(config, configfile, 0,
NULL);
925 data = g_key_file_to_data(config,
NULL,
NULL);
930 g_key_file_free(config);
960 store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, PANGO_TYPE_WEIGHT);
966 gtk_list_store_append(store, &iter);
967 gtk_list_store_set(store, &iter, -1);
969 gtk_list_store_append(store, &iter);
970 gtk_list_store_set(store, &iter, 0,
group->label, 2, PANGO_WEIGHT_BOLD, -1);
974 gchar *shortcut, *
label;
977 shortcut = gtk_accelerator_get_label(kb->
key, kb->
mods);
979 gtk_list_store_append(store, &iter);
980 gtk_list_store_set(store, &iter, 0,
label, 1, shortcut, 2, PANGO_WEIGHT_NORMAL, -1);
986 gtk_tree_view_set_model(GTK_TREE_VIEW(tree), GTK_TREE_MODEL(store));
987 g_object_unref(store);
994 GtkCellRenderer *text_renderer;
995 GtkTreeViewColumn *column;
998 GTK_DIALOG_DESTROY_WITH_PARENT,
999 GTK_STOCK_EDIT, GTK_RESPONSE_APPLY,
1000 GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL,
NULL);
1002 gtk_box_set_spacing(GTK_BOX(vbox), 6);
1003 gtk_widget_set_name(
dialog,
"GeanyDialog");
1007 gtk_dialog_set_default_response(GTK_DIALOG(
dialog), GTK_RESPONSE_CANCEL);
1009 label = gtk_label_new(
_(
"The following keyboard shortcuts are configurable:"));
1010 gtk_misc_set_alignment(GTK_MISC(
label), 0, 0.5);
1012 tree = gtk_tree_view_new();
1013 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(tree), TRUE);
1014 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), FALSE);
1016 text_renderer = gtk_cell_renderer_text_new();
1018 column = gtk_tree_view_column_new_with_attributes(
1019 NULL, text_renderer,
"text", 0,
"weight", 2,
NULL);
1020 gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
1022 text_renderer = gtk_cell_renderer_text_new();
1023 column = gtk_tree_view_column_new_with_attributes(
NULL, text_renderer,
"text", 1,
NULL);
1024 gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
1028 swin = gtk_scrolled_window_new(
NULL,
NULL);
1029 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_NEVER,
1030 GTK_POLICY_AUTOMATIC);
1031 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(swin), GTK_SHADOW_IN);
1034 gtk_box_pack_start(GTK_BOX(vbox),
label, FALSE, FALSE, 6);
1035 gtk_box_pack_start(GTK_BOX(vbox), swin, TRUE, TRUE, 0);
1053 gtk_notebook_set_current_page(nb, gtk_notebook_page_num(nb, wid));
1071 if (response == GTK_RESPONSE_APPLY)
1075 gtk_widget_destroy(
dialog);
1094 if (state == GDK_MOD1_MASK && keyval >= GDK_KEY_0 && keyval <= GDK_KEY_9)
1096 gint page = keyval - GDK_KEY_0 - 1;
1100 if (keyval == GDK_KEY_0)
1104 page = (npages - 1) - page;
1110 if (keyval == GDK_KEY_Page_Up || keyval == GDK_KEY_Page_Down)
1115 if (keyval == GDK_KEY_Page_Up)
1117 if (keyval == GDK_KEY_Page_Down)
1130 g_return_val_if_fail(doc, FALSE);
1133 if (focusw == GTK_WIDGET(doc->
editor->
sci))
1148 GdkEventButton *event;
1151 event = g_new0(GdkEventButton, 1);
1153 if (GTK_IS_TEXT_VIEW(widget))
1154 event->window = gtk_text_view_get_window(GTK_TEXT_VIEW(widget), GTK_TEXT_WINDOW_TEXT);
1156 event->window = gtk_widget_get_window(widget);
1157 event->time = event_time;
1158 event->type = GDK_BUTTON_PRESS;
1161 g_signal_emit_by_name(widget,
"button-press-event", event, &ret);
1162 g_signal_emit_by_name(widget,
"button-release-event", event, &ret);
1175 g_return_val_if_fail(doc ==
NULL || doc->
is_valid, FALSE);
1177 if ((keyval == GDK_KEY_Menu && state == 0) || (keyval == GDK_KEY_F10 && state == GDK_SHIFT_MASK))
1187 if (focusw == GTK_WIDGET(doc->
editor->
sci))
1189 if (keyval == GDK_KEY_Menu)
1207 || (vte_info.have_vte && focusw == vc->vte)
1220static gboolean set_sensitive(gpointer widget)
1222 gtk_widget_set_sensitive(GTK_WIDGET(widget), TRUE);
1227static gboolean check_vte(GdkModifierType state, guint keyval)
1239 if (! vc->enable_bash_keys)
1242 if (state == GDK_SHIFT_MASK && (keyval >= GDK_KEY_a && keyval <= GDK_KEY_z))
1244 if (state == 0 && (keyval < GDK_KEY_F1 || keyval > GDK_KEY_F35))
1251 if (state == kb->
mods && keyval == kb->
key)
1259 gtk_widget_set_sensitive(widget, FALSE);
1260 g_idle_add_full(G_PRIORITY_HIGH, set_sensitive, widget,
NULL);
1263 gtk_widget_set_sensitive(widget, FALSE);
1264 g_idle_add(set_sensitive, widget);
1275 case GDK_KEY_KP_Down:
1276 return GDK_KEY_Down;
1279 case GDK_KEY_KP_Left:
1280 return GDK_KEY_Left;
1281 case GDK_KEY_KP_Right:
1282 return GDK_KEY_Right;
1283 case GDK_KEY_KP_Home:
1284 return GDK_KEY_Home;
1285 case GDK_KEY_KP_End:
1287 case GDK_KEY_KP_Page_Up:
1288 return GDK_KEY_Page_Up;
1289 case GDK_KEY_KP_Page_Down:
1290 return GDK_KEY_Page_Down;
1291 case GDK_KEY_KP_Delete:
1292 return GDK_KEY_Delete;
1293 case GDK_KEY_KP_Insert:
1294 return GDK_KEY_Insert;
1304 guint state, keyval;
1306 if (ev->keyval == 0)
1309 keyval = ev->keyval;
1312 if ((ev->state & GDK_SHIFT_MASK) || (ev->state & GDK_LOCK_MASK))
1313 if (keyval >= GDK_KEY_A && keyval <= GDK_KEY_Z)
1314 keyval += GDK_KEY_a - GDK_KEY_A;
1316 if (keyval >= GDK_KEY_KP_Space && keyval < GDK_KEY_KP_Equal)
1319 return (keyval == kb->
key && state == kb->
mods);
1325 gboolean handled = TRUE;
1333 else if (
group->cb_func)
1335 else if (
group->callback)
1336 handled =
group->callback(kb->
id);
1339 g_warning(
"No callback or handler for keybinding %s: %s!",
group->
name, kb->
name);
1350 guint state, keyval;
1355 gboolean key_press_ret;
1357 if (ev->keyval == 0)
1360 g_signal_emit_by_name(
geany_object,
"key-press", ev, &key_press_ret);
1368 keyval = ev->keyval;
1371 if ((ev->state & GDK_SHIFT_MASK) || (ev->state & GDK_LOCK_MASK))
1372 if (keyval >= GDK_KEY_A && keyval <= GDK_KEY_Z)
1373 keyval += GDK_KEY_a - GDK_KEY_A;
1375 if (keyval >= GDK_KEY_KP_Space && keyval < GDK_KEY_KP_Equal)
1382 if (vte_info.have_vte && check_vte(state, keyval))
1392 if (keyval == kb->
key && state == kb->
mods)
1457 gchar *utf8_filename = g_queue_peek_head(
ui_prefs.recent_queue);
1460 g_free(locale_filename);
1544 ScintillaObject *
sci;
1643 GtkCheckMenuItem *c = GTK_CHECK_MENU_ITEM(
1646 gtk_check_menu_item_set_active(c, ! gtk_check_menu_item_get_active(c));
1652 GtkCheckMenuItem *c = GTK_CHECK_MENU_ITEM(
1655 gtk_check_menu_item_set_active(c, ! gtk_check_menu_item_get_active(c));
1661 g_return_val_if_fail(
DOC_VALID(doc), FALSE);
1708 gtk_widget_child_focus(page, GTK_DIR_TAB_FORWARD);
1715 GtkWidget *focus =
NULL;
1717 if (GTK_IS_BIN(widget))
1719 else if (GTK_IS_CONTAINER(widget))
1721 GList *children = gtk_container_get_children(GTK_CONTAINER(widget));
1724 for (node = children; node && ! focus; node = node->next)
1726 g_list_free(children);
1731 if (! focus && gtk_widget_get_can_focus(widget))
1742 gint page_num = gtk_notebook_get_current_page(GTK_NOTEBOOK(
msgwindow.notebook));
1743 GtkWidget *widget = gtk_notebook_get_nth_page(GTK_NOTEBOOK(
msgwindow.notebook), page_num);
1747 gtk_widget_grab_focus(widget);
1764 if (gtk_widget_has_focus(
sci))
1767 gtk_widget_grab_focus(
sci);
1778 if (search_entry !=
NULL)
1779 gtk_widget_grab_focus(search_entry);
1810 gint page_count, cur_page, pass;
1811 gboolean parent_is_notebook = FALSE;
1812 GtkNotebook *notebook;
1818 parent_is_notebook = GTK_IS_NOTEBOOK(focusw);
1820 while (! parent_is_notebook && (focusw = gtk_widget_get_parent(focusw)) !=
NULL);
1823 if (parent_is_notebook)
1824 notebook = GTK_NOTEBOOK(focusw);
1829 page_count = gtk_notebook_get_n_pages(notebook);
1830 cur_page = gtk_notebook_get_current_page(notebook);
1834 for (pass = 0; pass < page_count; pass++)
1838 if (direction == GTK_DIR_LEFT)
1843 cur_page = page_count - 1;
1845 else if (direction == GTK_DIR_RIGHT)
1847 if (cur_page < page_count - 1)
1853 child = gtk_notebook_get_nth_page (notebook, cur_page);
1854 if (gtk_widget_get_visible (child))
1856 gtk_notebook_set_current_page(notebook, cur_page);
1886 gint cur_page = gtk_notebook_get_current_page(nb);
1891 child = gtk_notebook_get_nth_page(nb, cur_page);
1896 gtk_notebook_reorder_child(nb, child, cur_page - 1);
1900 gint npage = cur_page + 1;
1902 if (npage == gtk_notebook_get_n_pages(nb))
1904 gtk_notebook_reorder_child(nb, child, npage);
1954 if (IS_SCINTILLA(focusw))
1958 if (IS_SCINTILLA(focusw))
2005 if (wid && gtk_widget_get_mapped(wid))
2007 gtk_widget_grab_focus(wid);
2156 "context_action1")),
NULL);
2205 for (i = start; i < end; i++)
2207 for (i = start + 1; i <= end; i++)
2235 ScintillaObject *
sci = editor->
sci;
2237 gint
line = start_line;
2257 for (
pos = edge - 1;
pos > lstart;
pos--)
2280 if (!found ||
pos >= lend)
2286 return line - start_line;
2292 gint start,
indent, linescount, i;
2327 for (i = start; i <= start + linescount; i++)
2333 for (i = start; i <= start + linescount; i++)
2356 ScintillaObject *
sci = editor->
sci;
2383 ScintillaObject *
sci = editor->
sci;
2447 if (
ui_prefs.custom_commands && g_strv_length(
ui_prefs.custom_commands) > 0)
2451 if (
ui_prefs.custom_commands && g_strv_length(
ui_prefs.custom_commands) > 1)
2455 if (
ui_prefs.custom_commands && g_strv_length(
ui_prefs.custom_commands) > 2)
2459 if (
ui_prefs.custom_commands && g_strv_length(
ui_prefs.custom_commands) > 3)
2463 if (
ui_prefs.custom_commands && g_strv_length(
ui_prefs.custom_commands) > 4)
2467 if (
ui_prefs.custom_commands && g_strv_length(
ui_prefs.custom_commands) > 5)
2471 if (
ui_prefs.custom_commands && g_strv_length(
ui_prefs.custom_commands) > 6)
2475 if (
ui_prefs.custom_commands && g_strv_length(
ui_prefs.custom_commands) > 7)
2479 if (
ui_prefs.custom_commands && g_strv_length(
ui_prefs.custom_commands) > 8)
2520 if (IS_SCINTILLA(focusw))
2524 if (IS_SCINTILLA(focusw))
2594 ScintillaObject *
sci = editor->
sci;
2603 ScintillaObject *
sci = editor->
sci;
2629 gtk_menu_item_activate(GTK_MENU_ITEM(
2648 if (widget && kb->
key)
2654 if (widget && kb->
key)
2656 kb->
key, kb->
mods, GTK_ACCEL_VISIBLE);
2664 g_return_val_if_fail(section_name,
NULL);
2677 g_ptr_array_set_size(
group->key_items, 0);
2678 g_free(
group->plugin_keys);
#define SCI_WORDPARTLEFTEXTEND
#define SCI_WORDPARTRIGHTEXTEND
#define SCI_LINETRANSPOSE
#define SCI_VCHOMEDISPLAY
#define SCI_LINEENDDISPLAY
#define SCI_LINESCROLLDOWN
#define SCI_WORDPARTRIGHT
#define SCI_INDICATORVALUEAT
static const gchar * groups[GEANY_GBG_COUNT]
gboolean build_keybinding(guint key_id)
Interface to the Build menu functionality.
void on_find_next1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_context_action1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_menu_toggle_all_additional_widgets1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_plugin_preferences1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_find_nextsel1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_replace1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_find_prevsel1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_replace_spaces_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_line_wrapping1_toggled(GtkCheckMenuItem *checkmenuitem, gpointer user_data)
void on_save_all1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_help1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_menu_increase_indent1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_menu_show_sidebar1_toggled(GtkCheckMenuItem *checkmenuitem, gpointer user_data)
void on_project_close1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_menu_uncomment_line1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_next_message1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_reload_all(GtkAction *action, gpointer user_data)
void on_find_usage1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_menu_select_all1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_paste1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_file_properties_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_project_open1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_project_new1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_zoom_in1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_go_to_line_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_menu_open_selected_file1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_find_document_usage1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_show_color_chooser1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_toggle_case1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_save1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_find_in_files1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_previous_message1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_undo1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_close_all1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_line_breaking1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_copy1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_open1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_cut1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_send_selection_to_vte1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_find_previous1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_zoom_out1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_preferences1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_normal_size1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_redo1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_find1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_menu_toggle_line_commentation1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_menu_decrease_indent1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_save_as1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_remove_markers1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_menu_comment_line1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_menu_remove_indicators1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_toolbutton_reload_clicked(GtkAction *action, gpointer user_data)
void on_print1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_close1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_project_properties1_activate(GtkMenuItem *menuitem, gpointer user_data)
void on_replace_tabs_activate(GtkMenuItem *menuitem, gpointer user_data)
GeanyDocument * document_get_current(void)
Finds the current document.
void document_update_tags(GeanyDocument *doc)
GeanyDocument * document_clone(GeanyDocument *old_doc)
gboolean document_check_disk_status(GeanyDocument *doc, gboolean force)
GeanyFilePrefs file_prefs
GeanyDocument * document_open_file(const gchar *locale_filename, gboolean readonly, GeanyFiletype *ft, const gchar *forced_enc)
Opens a document specified by locale_filename.
GeanyDocument * document_new_file(const gchar *utf8_filename, GeanyFiletype *ft, const gchar *text)
Creates a new document.
#define DOC_VALID(doc_ptr)
Null-safe way to check GeanyDocument::is_valid.
gboolean editor_complete_word_part(GeanyEditor *editor)
gboolean editor_show_calltip(GeanyEditor *editor, gint pos)
void editor_select_indent_block(GeanyEditor *editor)
void editor_unfold_all(GeanyEditor *editor)
gboolean editor_start_auto_complete(GeanyEditor *editor, gint pos, gboolean force)
void editor_select_word(GeanyEditor *editor)
void editor_find_current_word_sciwc(GeanyEditor *editor, gint pos, gchar *word, gsize wordlen)
const GeanyEditorPrefs * editor_get_prefs(GeanyEditor *editor)
void editor_scroll_to_line(GeanyEditor *editor, gint line, gfloat percent_of_view)
void editor_select_paragraph(GeanyEditor *editor)
void editor_toggle_fold(GeanyEditor *editor, gint line, gint modifiers)
void editor_select_lines(GeanyEditor *editor, gboolean extra_line)
void editor_strip_line_trailing_spaces(GeanyEditor *editor, gint line)
void editor_display_current_line(GeanyEditor *editor, gfloat percent_of_view)
void editor_strip_trailing_spaces(GeanyEditor *editor, gboolean ignore_selection)
gboolean editor_goto_next_snippet_cursor(GeanyEditor *editor)
void editor_find_current_word(GeanyEditor *editor, gint pos, gchar *word, gsize wordlen, const gchar *wc)
void editor_indentation_by_one_space(GeanyEditor *editor, gint pos, gboolean decrease)
const gchar * editor_get_eol_char(GeanyEditor *editor)
Retrieves the used end of line characters (LF, CR/LF, CR) in the given editor.
void editor_smart_line_indentation(GeanyEditor *editor)
gboolean editor_complete_snippet(GeanyEditor *editor, gint pos)
GeanyEditorPrefs editor_prefs
void editor_fold_all(GeanyEditor *editor)
void editor_insert_alternative_whitespace(GeanyEditor *editor)
#define GEANY_MAX_WORD_LENGTH
@ GEANY_INDICATOR_SEARCH
Indicator used to highlight search results in the document.
Filetype detection, file extensions and filetype menu items.
#define GEANY_DEFAULT_DIALOG_HEIGHT
static void apply_kb_accel(GeanyKeyGroup *group, GeanyKeyBinding *kb, gpointer user_data)
static void add_menu_accel(GeanyKeyGroup *group, guint kb_id, GtkWidget *menuitem)
static gboolean run_kb(GeanyKeyBinding *kb, GeanyKeyGroup *group)
static void delete_lines(GeanyEditor *editor)
static gboolean cb_func_insert_action(guint key_id)
static void trigger_button_event(GtkWidget *widget, guint32 event_time)
static gboolean on_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
static gint get_reflow_column(GeanyEditor *editor)
static void insert_line_after(GeanyEditor *editor)
static GtkAccelGroup * kb_accel_group
void keybindings_update_combo(GeanyKeyBinding *kb, guint key, GdkModifierType mods)
static void sci_deselect_last_newline(ScintillaObject *sci)
static void switch_notebook_page(gint direction)
GeanyKeyBinding * keybindings_lookup_item(guint group_id, guint key_id)
static void focus_sidebar(void)
static void load_kb(GeanyKeyGroup *group, GeanyKeyBinding *kb, gpointer user_data)
static void focus_msgwindow(void)
static gboolean cb_func_search_action(guint key_id)
static void free_key_binding(gpointer item)
#define GEANY_ADD_POPUP_ACCEL(kb_id, wid)
static void key_dialog_show_prefs(void)
static void insert_line_before(GeanyEditor *editor)
static gboolean check_fixed_kb(guint keyval, guint state)
static gboolean cb_func_editor_action(guint key_id)
static void keybindings_foreach(KBItemCallback cb, gpointer user_data)
static gboolean check_menu_key(GeanyDocument *doc, guint keyval, guint state, guint32 event_time)
static gboolean cb_func_view_action(guint key_id)
static GtkWidget * find_focus_widget(GtkWidget *widget)
static void cb_func_menu_opencolorchooser(guint key_id)
static guint key_kp_translate(guint key_in)
GPtrArray * keybinding_groups
static gint split_line(GeanyEditor *editor, gint column)
static void cb_func_menu_fullscreen(guint key_id)
static void add_popup_menu_accels(void)
void keybindings_free_group(GeanyKeyGroup *group)
static void cb_func_menu_help(guint key_id)
static gboolean cb_func_format_action(guint key_id)
static gboolean cb_func_project_action(guint key_id)
static void on_dialog_response(GtkWidget *dialog, gint response, gpointer user_data)
static void cb_func_switch_tableft(guint key_id)
static const gchar keybindings_keyfile_group_name[]
GeanyKeyGroup * keybindings_get_core_group(guint id)
static gboolean cb_func_goto_action(guint key_id)
static gboolean check_current_word(GeanyDocument *doc, gboolean sci_word)
static void cb_func_move_tab(guint key_id)
#define ADD_KB_GROUP(group_id, label, callback)
static gboolean cb_func_document_action(guint key_id)
static gboolean cb_func_switch_action(guint key_id)
static void init_default_kb(void)
void keybindings_load_keyfile(void)
Reloads keybinding settings from configuration file.
void keybindings_send_command(guint group_id, guint key_id)
Mimics a (built-in only) keybinding action.
static void add_kb(GeanyKeyGroup *group, gsize key_id, GeanyKeyCallback callback, guint key, GdkModifierType mod, const gchar *kf_name, const gchar *label, const gchar *widget_name)
static void join_paragraph(GeanyEditor *editor)
static void fill_shortcut_labels_treeview(GtkWidget *tree)
static void load_user_kb(void)
static void reflow_lines(GeanyEditor *editor, gint column)
static void add_kb_group(GeanyKeyGroup *group, const gchar *name, const gchar *label, GeanyKeyGroupCallback callback, gboolean plugin)
static void reflow_paragraph(GeanyEditor *editor)
GeanyKeyBinding * keybindings_set_item_full(GeanyKeyGroup *group, gsize key_id, guint key, GdkModifierType mod, const gchar *kf_name, const gchar *label, GtkWidget *menu_item, GeanyKeyBindingFunc cb, gpointer pdata, GDestroyNotify destroy_notify)
Creates a new keybinding using a GeanyKeyBindingFunc and attaches it to a keybinding group.
static void goto_matching_brace(GeanyDocument *doc)
static void free_key_group(gpointer item)
GdkModifierType keybindings_get_modifiers(GdkModifierType mods)
Gets significant modifiers from a GdkModifierType mask.
static gboolean cb_func_file_action(guint key_id)
static gboolean cb_func_clipboard_action(guint key_id)
static void cb_func_menu_preferences(guint key_id)
GeanyKeyBinding * keybindings_get_item(GeanyKeyGroup *group, gsize key_id)
Looks up a keybinding item.
static void join_lines(GeanyEditor *editor)
static GtkWidget * create_dialog(void)
static void cb_func_switch_tabright(guint key_id)
GeanyKeyGroup * keybindings_set_group(GeanyKeyGroup *group, const gchar *section_name, const gchar *label, gsize count, GeanyKeyGroupCallback callback)
static void cb_func_switch_tablastused(guint key_id)
static gboolean check_snippet_completion(GeanyDocument *doc)
void(* KBItemCallback)(GeanyKeyGroup *group, GeanyKeyBinding *kb, gpointer user_data)
void keybindings_init(void)
void keybindings_free(void)
static void duplicate_lines(GeanyEditor *editor)
gboolean keybindings_check_event(GdkEventKey *ev, GeanyKeyBinding *kb)
static gboolean cb_func_select_action(guint key_id)
void keybindings_write_to_file(void)
static GtkWidget * key_dialog
gchar * keybindings_get_label(GeanyKeyBinding *kb)
static GeanyKeyBinding binding_ids[GEANY_KEYS_COUNT]
static void goto_tag(GeanyDocument *doc, gboolean definition)
static gchar * get_current_word_or_sel(GeanyDocument *doc, gboolean sci_word)
static const gboolean swap_alt_tab_order
static gboolean read_current_word(GeanyDocument *doc, gboolean sci_word)
void keybindings_dialog_show_prefs_scroll(const gchar *name)
void keybindings_show_shortcuts(void)
GeanyKeyBinding * keybindings_set_item(GeanyKeyGroup *group, gsize key_id, GeanyKeyCallback callback, guint key, GdkModifierType mod, const gchar *kf_name, const gchar *label, GtkWidget *menu_item)
<simplesect kind="geany:skip"></simplesect> Fills a GeanyKeyBinding struct item.
static void set_keyfile_kb(GeanyKeyGroup *group, GeanyKeyBinding *kb, gpointer user_data)
static void cb_func_menu_messagewindow(guint key_id)
Configurable keyboard shortcuts.
#define GEANY_PRIMARY_MOD_MASK
Defines the primary modifier mask which is the Ctrl key mask on UNIX/Windows and Command key mask on ...
gboolean(* GeanyKeyBindingFunc)(GeanyKeyBinding *key, guint key_id, gpointer user_data)
Function pointer type used for keybinding callbacks, with userdata for passing context.
@ GEANY_KEY_GROUP_HELP
Group.
@ GEANY_KEY_GROUP_SELECT
Group.
@ GEANY_KEY_GROUP_NOTEBOOK
Group.
@ GEANY_KEY_GROUP_VIEW
Group.
@ GEANY_KEY_GROUP_SEARCH
Group.
@ GEANY_KEY_GROUP_CLIPBOARD
Group.
@ GEANY_KEY_GROUP_DOCUMENT
Group.
@ GEANY_KEY_GROUP_INSERT
Group.
@ GEANY_KEY_GROUP_PROJECT
Group.
@ GEANY_KEY_GROUP_BUILD
Group.
@ GEANY_KEY_GROUP_TOOLS
Group.
@ GEANY_KEY_GROUP_SETTINGS
Group.
@ GEANY_KEY_GROUP_GOTO
Group.
@ GEANY_KEY_GROUP_EDITOR
Group.
@ GEANY_KEY_GROUP_FORMAT
Group.
@ GEANY_KEY_GROUP_FOCUS
Group.
@ GEANY_KEY_GROUP_FILE
Group.
@ GEANY_KEYS_EDITOR_DUPLICATELINE
Keybinding.
@ GEANY_KEYS_GOTO_PREVWORDPART
Keybinding.
@ GEANY_KEYS_VIEW_ZOOMIN
Keybinding.
@ GEANY_KEYS_CLIPBOARD_CUTLINE
Keybinding.
@ GEANY_KEYS_GOTO_TOGGLEMARKER
Keybinding.
@ GEANY_KEYS_FILE_NEW
Keybinding.
@ GEANY_KEYS_FORMAT_SENDTOCMD5
Keybinding.
@ GEANY_KEYS_GOTO_TAGDEFINITION
Keybinding.
@ GEANY_KEYS_CLIPBOARD_CUT
Keybinding.
@ GEANY_KEYS_EDITOR_MOVELINEDOWN
Keybinding.
@ GEANY_KEYS_DOCUMENT_TOGGLEFOLD
Keybinding.
@ GEANY_KEYS_CLIPBOARD_COPYLINE
Keybinding.
@ GEANY_KEYS_SEARCH_FIND
Keybinding.
@ GEANY_KEYS_BUILD_COMPILE
Keybinding.
@ GEANY_KEYS_BUILD_PREVIOUSERROR
Keybinding.
@ GEANY_KEYS_EDITOR_CALLTIP
Keybinding.
@ GEANY_KEYS_EDITOR_AUTOCOMPLETE
Keybinding.
@ GEANY_KEYS_EDITOR_SUPPRESSSNIPPETCOMPLETION
Keybinding.
@ GEANY_KEYS_BUILD_LINK
Keybinding.
@ GEANY_KEYS_SEARCH_FINDNEXTSEL
Keybinding.
@ GEANY_KEYS_FILE_RELOAD_ALL
Keybinding.
@ GEANY_KEYS_FORMAT_REFLOWPARAGRAPH
Keybinding.
@ GEANY_KEYS_FORMAT_SENDTOCMD7
Keybinding.
@ GEANY_KEYS_CLIPBOARD_COPY
Keybinding.
@ GEANY_KEYS_GOTO_NEXTMARKER
Keybinding.
@ GEANY_KEYS_DOCUMENT_LINEWRAP
Keybinding.
@ GEANY_KEYS_FOCUS_MESSAGES
Keybinding.
@ GEANY_KEYS_DOCUMENT_CLONE
Keybinding.
@ GEANY_KEYS_TOOLS_OPENCOLORCHOOSER
Keybinding.
@ GEANY_KEYS_DOCUMENT_RELOADTAGLIST
Keybinding.
@ GEANY_KEYS_SEARCH_FINDNEXT
Keybinding.
@ GEANY_KEYS_NOTEBOOK_MOVETABLAST
Keybinding.
@ GEANY_KEYS_GOTO_LINESTART
Keybinding.
@ GEANY_KEYS_GOTO_MATCHINGBRACE
Keybinding.
@ GEANY_KEYS_PROJECT_CLOSE
Keybinding.
@ GEANY_KEYS_FORMAT_SENDTOCMD3
Keybinding.
@ GEANY_KEYS_VIEW_TOGGLEALL
Keybinding.
@ GEANY_KEYS_FORMAT_SENDTOCMD4
Keybinding.
@ GEANY_KEYS_FORMAT_COMMENTLINETOGGLE
Keybinding.
@ GEANY_KEYS_FILE_QUIT
Keybinding.
@ GEANY_KEYS_DOCUMENT_REMOVE_MARKERS_INDICATORS
Keybinding.
@ GEANY_KEYS_HELP_HELP
Keybinding.
@ GEANY_KEYS_FILE_PROPERTIES
Keybinding.
@ GEANY_KEYS_VIEW_SIDEBAR
Keybinding.
@ GEANY_KEYS_BUILD_MAKE
Keybinding.
@ GEANY_KEYS_FORMAT_SENDTOCMD9
Keybinding.
@ GEANY_KEYS_FILE_PRINT
Keybinding.
@ GEANY_KEYS_EDITOR_SCROLLLINEUP
Keybinding.
@ GEANY_KEYS_SELECT_WORD
Keybinding.
@ GEANY_KEYS_FORMAT_SENDTOCMD8
Keybinding.
@ GEANY_KEYS_SETTINGS_PREFERENCES
Keybinding.
@ GEANY_KEYS_SELECT_ALL
Keybinding.
@ GEANY_KEYS_BUILD_RUN
Keybinding.
@ GEANY_KEYS_FORMAT_SENDTOVTE
Keybinding.
@ GEANY_KEYS_NOTEBOOK_MOVETABFIRST
Keybinding.
@ GEANY_KEYS_FOCUS_SIDEBAR_DOCUMENT_LIST
Keybinding.
@ GEANY_KEYS_SEARCH_NEXTMESSAGE
Keybinding.
@ GEANY_KEYS_INSERT_LINEBEFORE
Keybinding.
@ GEANY_KEYS_DOCUMENT_LINEBREAK
Keybinding.
@ GEANY_KEYS_EDITOR_DELETELINETOBEGINNING
Keybinding.
@ GEANY_KEYS_FILE_OPENLASTTAB
Keybinding.
@ GEANY_KEYS_INSERT_LINEAFTER
Keybinding.
@ GEANY_KEYS_SEARCH_FINDDOCUMENTUSAGE
Keybinding.
@ GEANY_KEYS_FORMAT_INCREASEINDENTBYSPACE
Keybinding.
@ GEANY_KEYS_FILE_OPEN
Keybinding.
@ GEANY_KEYS_EDITOR_SNIPPETNEXTCURSOR
Keybinding.
@ GEANY_KEYS_FILE_SAVEAS
Keybinding.
@ GEANY_KEYS_EDITOR_DELETELINETOEND
Keybinding.
@ GEANY_KEYS_EDITOR_MOVELINEUP
Keybinding.
@ GEANY_KEYS_EDITOR_TRANSPOSELINE
Keybinding.
@ GEANY_KEYS_GOTO_FORWARD
Keybinding.
@ GEANY_KEYS_FORMAT_SENDTOCMD6
Keybinding.
@ GEANY_KEYS_SEARCH_REPLACE
Keybinding.
@ GEANY_KEYS_SELECT_WORDPARTRIGHT
Keybinding.
@ GEANY_KEYS_NOTEBOOK_SWITCHTABRIGHT
Keybinding.
@ GEANY_KEYS_FORMAT_AUTOINDENT
Keybinding.
@ GEANY_KEYS_BUILD_MAKEOWNTARGET
Keybinding.
@ GEANY_KEYS_FILE_CLOSE
Keybinding.
@ GEANY_KEYS_SEARCH_FINDINFILES
Keybinding.
@ GEANY_KEYS_EDITOR_REDO
Keybinding.
@ GEANY_KEYS_FOCUS_VTE
Keybinding.
@ GEANY_KEYS_FOCUS_SIDEBAR_SYMBOL_LIST
Keybinding.
@ GEANY_KEYS_GOTO_LINEENDVISUAL
Keybinding.
@ GEANY_KEYS_SEARCH_MARKALL
Keybinding.
@ GEANY_KEYS_GOTO_NEXTWORDPART
Keybinding.
@ GEANY_KEYS_NOTEBOOK_SWITCHTABLASTUSED
Keybinding.
@ GEANY_KEYS_SELECT_PARAGRAPH
Keybinding.
@ GEANY_KEYS_INSERT_ALTWHITESPACE
Keybinding.
@ GEANY_KEYS_VIEW_MESSAGEWINDOW
Keybinding.
@ GEANY_KEYS_GOTO_LINE
Keybinding.
@ GEANY_KEYS_FORMAT_DECREASEINDENTBYSPACE
Keybinding.
@ GEANY_KEYS_FOCUS_SIDEBAR
Keybinding.
@ GEANY_KEYS_FILE_CLOSEALL
Keybinding.
@ GEANY_KEYS_SEARCH_FINDUSAGE
Keybinding.
@ GEANY_KEYS_GOTO_LINESTARTVISUAL
Keybinding.
@ GEANY_KEYS_DOCUMENT_UNFOLDALL
Keybinding.
@ GEANY_KEYS_FILE_RELOAD
Keybinding.
@ GEANY_KEYS_VIEW_ZOOMRESET
Keybinding.
@ GEANY_KEYS_GOTO_BACK
Keybinding.
@ GEANY_KEYS_DOCUMENT_REMOVE_MARKERS
Keybinding.
@ GEANY_KEYS_EDITOR_SCROLLLINEDOWN
Keybinding.
@ GEANY_KEYS_BUILD_NEXTERROR
Keybinding.
@ GEANY_KEYS_SEARCH_PREVIOUSMESSAGE
Keybinding.
@ GEANY_KEYS_GOTO_LINEEND
Keybinding.
@ GEANY_KEYS_FORMAT_DECREASEINDENT
Keybinding.
@ GEANY_KEYS_SETTINGS_PLUGINPREFERENCES
Keybinding.
@ GEANY_KEYS_NOTEBOOK_MOVETABRIGHT
Keybinding.
@ GEANY_KEYS_DOCUMENT_REMOVE_ERROR_INDICATORS
Keybinding.
@ GEANY_KEYS_GOTO_PREVIOUSMARKER
Keybinding.
@ GEANY_KEYS_FORMAT_SENDTOCMD2
Keybinding.
@ GEANY_KEYS_FORMAT_INCREASEINDENT
Keybinding.
@ GEANY_KEYS_FOCUS_SCRIBBLE
Keybinding.
@ GEANY_KEYS_DOCUMENT_FOLDALL
Keybinding.
@ GEANY_KEYS_FOCUS_EDITOR
Keybinding.
@ GEANY_KEYS_CLIPBOARD_PASTE
Keybinding.
@ GEANY_KEYS_FILE_SAVE
Keybinding.
@ GEANY_KEYS_DOCUMENT_STRIPTRAILINGSPACES
Keybinding.
@ GEANY_KEYS_FORMAT_JOINLINES
Keybinding.
@ GEANY_KEYS_SELECT_WORDPARTLEFT
Keybinding.
@ GEANY_KEYS_VIEW_FULLSCREEN
Keybinding.
@ GEANY_KEYS_FILE_SAVEALL
Keybinding.
@ GEANY_KEYS_FOCUS_SEARCHBAR
Keybinding.
@ GEANY_KEYS_EDITOR_WORDPARTCOMPLETION
Keybinding.
@ GEANY_KEYS_GOTO_TAGDECLARATION
Keybinding.
@ GEANY_KEYS_EDITOR_UNDO
Keybinding.
@ GEANY_KEYS_FORMAT_TOGGLECASE
Keybinding.
@ GEANY_KEYS_BUILD_OPTIONS
Keybinding.
@ GEANY_KEYS_BUILD_MAKEOBJECT
Keybinding.
@ GEANY_KEYS_EDITOR_CONTEXTACTION
Keybinding.
@ GEANY_KEYS_FORMAT_SENDTOCMD1
Keybinding.
@ GEANY_KEYS_EDITOR_SCROLLTOLINE
Keybinding.
@ GEANY_KEYS_EDITOR_COMPLETESNIPPET
Keybinding.
@ GEANY_KEYS_DOCUMENT_REPLACETABS
Keybinding.
@ GEANY_KEYS_FORMAT_UNCOMMENTLINE
Keybinding.
@ GEANY_KEYS_DOCUMENT_REPLACESPACES
Keybinding.
@ GEANY_KEYS_FOCUS_COMPILER
Keybinding.
@ GEANY_KEYS_FOCUS_MESSAGE_WINDOW
Keybinding.
@ GEANY_KEYS_PROJECT_NEW
Keybinding.
@ GEANY_KEYS_FILE_OPENSELECTED
Keybinding.
@ GEANY_KEYS_EDITOR_DELETELINE
Keybinding.
@ GEANY_KEYS_VIEW_ZOOMOUT
Keybinding.
@ GEANY_KEYS_FORMAT_COMMENTLINE
Keybinding.
@ GEANY_KEYS_SEARCH_FINDPREVSEL
Keybinding.
@ GEANY_KEYS_NOTEBOOK_SWITCHTABLEFT
Keybinding.
@ GEANY_KEYS_INSERT_DATE
Keybinding.
@ GEANY_KEYS_SEARCH_FINDPREVIOUS
Keybinding.
@ GEANY_KEYS_NOTEBOOK_MOVETABLEFT
Keybinding.
@ GEANY_KEYS_PROJECT_OPEN
Keybinding.
@ GEANY_KEYS_SELECT_LINE
Keybinding.
@ GEANY_KEYS_PROJECT_PROPERTIES
Keybinding.
void(* GeanyKeyCallback)(guint key_id)
Function pointer type used for keybinding callbacks.
gboolean(* GeanyKeyGroupCallback)(guint key_id)
Function pointer type used for keybinding group callbacks.
Main program-related commands.
void msgwin_switch_tab(gint tabnum, gboolean show)
Switches to the given notebook tab of the messages window.
Message window functions (status, compiler, messages windows).
@ MSG_COMPILER
Index of the compiler tab.
@ MSG_VTE
Index of the VTE tab.
@ MSG_MESSAGE
Index of the messages tab.
@ MSG_SCRATCH
Index of the scratch tab.
void navqueue_go_forward(void)
void navqueue_go_back(void)
void notebook_switch_tablastused(void)
void prefs_show_dialog(void)
void prefs_kb_search_name(const gchar *search)
gint sci_get_col_from_position(ScintillaObject *sci, gint position)
Gets the column number relative to the start of the line that position is on.
void sci_set_current_line(ScintillaObject *sci, gint line)
void sci_toggle_marker_at_line(ScintillaObject *sci, gint line, gint marker)
gint sci_marker_next(ScintillaObject *sci, gint line, gint marker_mask, gboolean wrap)
void sci_move_selected_lines_down(ScintillaObject *sci)
void sci_set_target_start(ScintillaObject *sci, gint start)
void sci_goto_pos(ScintillaObject *sci, gint pos, gboolean unfold)
gchar * sci_get_selection_contents(ScintillaObject *sci)
Gets selected text.
gint sci_get_current_position(ScintillaObject *sci)
Gets the cursor position.
void sci_send_command(ScintillaObject *sci, gint cmd)
Sends Scintilla commands without any parameters.
void sci_set_line_indentation(ScintillaObject *sci, gint line, gint indent)
Sets the indentation of a line.
gint sci_get_lines_selected(ScintillaObject *sci)
gint sci_get_current_line(ScintillaObject *sci)
Gets current line number.
gint sci_get_line_indentation(ScintillaObject *sci, gint line)
Gets the indentation width of a line.
gint sci_get_selection_end(ScintillaObject *sci)
Gets the selection end position.
void sci_set_selection(ScintillaObject *sci, gint anchorPos, gint currentPos)
gint sci_get_line_indent_position(ScintillaObject *sci, gint line)
void sci_set_current_position(ScintillaObject *sci, gint position, gboolean scroll_to_caret)
Sets the cursor position.
gchar sci_get_char_at(ScintillaObject *sci, gint pos)
Gets a character.
void sci_lines_join(ScintillaObject *sci)
gint sci_get_position_from_col(ScintillaObject *sci, gint line, gint col)
gboolean sci_has_selection(ScintillaObject *sci)
Checks if there's a selection.
void sci_move_selected_lines_up(ScintillaObject *sci)
void sci_set_anchor(ScintillaObject *sci, gint pos)
void sci_selection_duplicate(ScintillaObject *sci)
void sci_start_undo_action(ScintillaObject *sci)
Begins grouping a set of edits together as one Undo action.
void sci_insert_text(ScintillaObject *sci, gint pos, const gchar *text)
Inserts text.
void sci_end_undo_action(ScintillaObject *sci)
Ends grouping a set of edits together as one Undo action.
void sci_add_text(ScintillaObject *sci, const gchar *text)
void sci_set_target_end(ScintillaObject *sci, gint end)
gint sci_marker_previous(ScintillaObject *sci, gint line, gint marker_mask, gboolean wrap)
void sci_clear(ScintillaObject *sci)
gint sci_get_line_end_position(ScintillaObject *sci, gint line)
Gets the position at the end of a line.
gint sci_get_selection_start(ScintillaObject *sci)
Gets the selection start position.
void sci_line_duplicate(ScintillaObject *sci)
gint sci_get_line_from_position(ScintillaObject *sci, gint position)
Gets the line number from position.
gint sci_get_position_from_line(ScintillaObject *sci, gint line)
Gets the position for the start of line.
gint sci_find_matching_brace(ScintillaObject *sci, gint pos)
Finds a matching brace at pos.
Wrapper functions for the Scintilla editor widget SCI_* messages.
gint search_mark_all(GeanyDocument *doc, const gchar *search_text, GeanyFindFlags flags)
gtk_container_add(GTK_CONTAINER(dialog->vbox), check_button)
gtk_widget_show_all(dialog)
struct GeanyProject * project
Currently active project or NULL if none is open.
gchar * configdir
User configuration directory, usually ~/.config/geany.
Structure for representing an open tab with all its properties.
struct GeanyDocumentPrivate * priv
gboolean is_valid
Flag used to check if this document is valid when iterating GeanyData::documents_array.
GeanyEditor * editor
The editor associated with the document.
Default prefs when creating a new editor window.
gboolean complete_snippets
Editor-owned fields for each document.
gboolean line_breaking
Whether to split long lines as you type.
ScintillaObject * sci
The Scintilla editor GtkWidget.
gboolean strip_trailing_spaces
Represents a single keybinding action.
GeanyKeyBindingFunc cb_func
GtkWidget * menu_item
Optional widget to set an accelerator for, or NULL.
GdkModifierType default_mods
gchar * name
Key name for the configuration file, such as "menu_new".
GDestroyNotify cb_data_destroy
GdkModifierType mods
Modifier keys, such as GDK_CONTROL_MASK or 0.
GeanyKeyCallback callback
Function called when the key combination is pressed, or NULL to use the group callback (preferred).
guint key
Key value in lower-case, such as GDK_KEY_a or 0.
gchar * label
Label used in the preferences dialog keybindings tab.
GtkWidget * window
Main window.
GtkWidget * notebook
Document notebook.
GtkWidget * editor_menu
Popup editor menu.
GtkWidget * sidebar_notebook
Sidebar notebook.
Defines internationalization macros.
gboolean symbols_goto_tag(const gchar *name, gboolean definition)
void ui_update_statusbar(GeanyDocument *doc, gint pos)
const gchar * ui_lookup_stock_label(const gchar *stock_id)
Finds the label text associated with stock_id.
GtkWidget * ui_dialog_vbox_new(GtkDialog *dialog)
Makes a fixed border for dialogs without increasing the button box border.
GeanyMainWidgets main_widgets
void ui_document_show_hide(GeanyDocument *doc)
GtkWidget * ui_lookup_widget(GtkWidget *widget, const gchar *widget_name)
Returns a widget from a name in a component, usually created by Glade.
User Interface general utility functions.
gint utils_write_file(const gchar *filename, const gchar *text)
Writes text into a file named filename.
gchar * utils_str_remove_chars(gchar *string, const gchar *chars)
Removes characters from a string, in place.
gboolean utils_isbrace(gchar c, gboolean include_angles)
gchar * utils_get_locale_from_utf8(const gchar *utf8_text)
Converts the given UTF-8 encoded string into locale encoding.
General utility functions, non-GTK related.
#define foreach_ptr_array(item, idx, ptr_array)
Iterates all the pointers in ptr_array.
#define SETPTR(ptr, result)
Assigns result to ptr, then frees the old value.