2006-05-19 17:18:06 +00:00
/*
* keybindings . c - this file is part of Geany , a fast and lightweight IDE
*
2008-01-06 18:11:57 +00:00
* Copyright 2006 - 2008 Enrico Tröger < enrico ( dot ) troeger ( at ) uvena ( dot ) de >
* Copyright 2006 - 2008 Nick Treleaven < nick ( dot ) treleaven ( at ) btinternet ( dot ) com >
2006-05-19 17:18:06 +00:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
*
* $ Id $
*/
2007-02-24 11:41:56 +00:00
/*
* Configurable keyboard shortcuts .
*/
2006-05-19 17:18:06 +00:00
# include <gdk/gdkkeysyms.h>
# include "geany.h"
# include "keybindings.h"
# include "support.h"
# include "utils.h"
2006-09-05 14:24:47 +00:00
# include "ui_utils.h"
2006-05-19 17:18:06 +00:00
# include "document.h"
2007-08-15 15:37:21 +00:00
# include "filetypes.h"
2006-05-19 17:18:06 +00:00
# include "callbacks.h"
2006-07-11 14:15:56 +00:00
# include "prefs.h"
2006-05-19 17:18:06 +00:00
# include "msgwindow.h"
2007-05-28 16:07:30 +00:00
# include "editor.h"
2006-05-19 17:18:06 +00:00
# include "sciwrappers.h"
2006-10-18 19:35:42 +00:00
# include "build.h"
2007-02-25 14:26:55 +00:00
# include "tools.h"
2007-06-03 16:03:46 +00:00
# include "navqueue.h"
2007-09-25 12:39:41 +00:00
# include "symbols.h"
2007-09-26 16:22:20 +00:00
# include "vte.h"
2008-12-06 11:10:06 +00:00
# include "toolbar.h"
2006-05-19 17:18:06 +00:00
2008-08-08 18:05:53 +00:00
GPtrArray * keybinding_groups ; /* array of GeanyKeyGroup pointers */
2008-02-20 11:24:23 +00:00
2008-03-12 17:07:43 +00:00
/* keyfile group name for non-plugin KB groups */
2008-03-13 17:12:18 +00:00
const gchar keybindings_keyfile_group_name [ ] = " Bindings " ;
2008-02-20 11:24:23 +00:00
2008-07-02 11:58:01 +00:00
static gboolean ignore_keybinding = FALSE ;
2008-03-14 13:11:46 +00:00
static GtkAccelGroup * kb_accel_group = NULL ;
2007-09-27 11:13:59 +00:00
static const gboolean swap_alt_tab_order = FALSE ;
2006-11-23 12:23:36 +00:00
2006-05-19 17:18:06 +00:00
2008-03-12 13:37:39 +00:00
static gboolean check_current_word ( void ) ;
2008-12-19 17:15:52 +00:00
static gboolean read_current_word ( void ) ;
2006-10-26 15:22:27 +00:00
2007-05-03 15:38:02 +00:00
static void cb_func_file_action ( guint key_id ) ;
2008-03-12 13:37:39 +00:00
static void cb_func_project_action ( guint key_id ) ;
static void cb_func_editor_action ( guint key_id ) ;
static void cb_func_select_action ( guint key_id ) ;
static void cb_func_format_action ( guint key_id ) ;
static void cb_func_insert_action ( guint key_id ) ;
static void cb_func_search_action ( guint key_id ) ;
static void cb_func_goto_action ( guint key_id ) ;
2008-07-03 17:37:00 +00:00
static void cb_func_switch_action ( guint key_id ) ;
2007-12-25 14:00:18 +00:00
static void cb_func_clipboard ( guint key_id ) ;
2008-03-12 13:37:39 +00:00
static void cb_func_build_action ( guint key_id ) ;
2008-06-19 15:58:10 +00:00
static void cb_func_document_action ( guint key_id ) ;
2008-03-12 13:37:39 +00:00
/* TODO: refactor individual callbacks per group */
2007-07-04 14:41:58 +00:00
static void cb_func_menu_help ( guint key_id ) ;
2006-10-26 15:22:27 +00:00
static void cb_func_menu_preferences ( guint key_id ) ;
2007-05-03 16:13:30 +00:00
2007-05-06 14:49:51 +00:00
static void cb_func_menu_toggle_all ( guint key_id ) ;
2006-10-26 15:22:27 +00:00
static void cb_func_menu_fullscreen ( guint key_id ) ;
static void cb_func_menu_messagewindow ( guint key_id ) ;
static void cb_func_menu_zoomin ( guint key_id ) ;
static void cb_func_menu_zoomout ( guint key_id ) ;
2007-05-03 16:13:30 +00:00
static void cb_func_menu_opencolorchooser ( guint key_id ) ;
2006-10-26 15:22:27 +00:00
static void cb_func_switch_tableft ( guint key_id ) ;
static void cb_func_switch_tabright ( guint key_id ) ;
2007-03-13 17:00:12 +00:00
static void cb_func_switch_tablastused ( guint key_id ) ;
2007-09-07 12:34:57 +00:00
static void cb_func_move_tab ( guint key_id ) ;
2006-10-26 15:22:27 +00:00
static void cb_func_toggle_sidebar ( guint key_id ) ;
2008-03-12 13:37:39 +00:00
static void add_popup_menu_accels ( void ) ;
2008-08-08 18:05:53 +00:00
static void apply_kb_accel ( GeanyKeyGroup * group , GeanyKeyBinding * kb , gpointer user_data ) ;
2006-10-26 15:22:27 +00:00
2007-05-05 16:35:59 +00:00
2008-07-20 17:12:34 +00:00
/* This is used to set default keybindings on startup but at this point we don't want to
* assign the keybinding to the menu_item ( apply_kb_accel ) otherwise it can ' t be overridden
* by user keybindings anymore */
2008-09-16 15:37:50 +00:00
/** Simple convenience function to fill a GeanyKeyBinding struct item.
* @ param group
* @ param key_id
* @ param callback
* @ param key
* @ param mod
* @ param name
* @ param label
* @ param menu_item */
2008-08-08 18:05:53 +00:00
void keybindings_set_item ( GeanyKeyGroup * group , gsize key_id ,
GeanyKeyCallback callback , guint key , GdkModifierType mod ,
2008-03-14 17:23:24 +00:00
gchar * name , gchar * label , GtkWidget * menu_item )
2008-02-29 19:30:28 +00:00
{
2008-08-08 18:05:53 +00:00
GeanyKeyBinding * kb ;
2006-10-26 15:22:27 +00:00
2008-03-10 13:23:57 +00:00
g_assert ( key_id < group - > count ) ;
2006-05-19 17:18:06 +00:00
2008-03-10 13:23:57 +00:00
kb = & group - > keys [ key_id ] ;
2008-02-29 19:30:28 +00:00
kb - > name = name ;
kb - > label = label ;
kb - > key = key ;
kb - > mods = mod ;
2008-03-10 13:23:57 +00:00
kb - > callback = callback ;
kb - > menu_item = menu_item ;
2008-02-29 19:30:28 +00:00
}
2008-08-08 18:05:53 +00:00
static GeanyKeyGroup * add_kb_group ( GeanyKeyGroup * group ,
const gchar * name , const gchar * label , gsize count , GeanyKeyBinding * keys )
2008-02-29 19:30:28 +00:00
{
g_ptr_array_add ( keybinding_groups , group ) ;
group - > name = name ;
group - > label = label ;
group - > count = count ;
group - > keys = keys ;
return group ;
}
2006-05-24 13:18:42 +00:00
2008-02-29 19:30:28 +00:00
2008-03-12 13:37:39 +00:00
/* Lookup a widget in the main window */
# define LW(widget_name) \
2008-12-18 21:21:53 +00:00
ui_lookup_widget ( main_widgets . window , G_STRINGIFY ( widget_name ) )
2008-03-12 13:37:39 +00:00
2008-02-29 19:30:28 +00:00
/* Expansion for group_id = FILE:
2008-08-08 18:05:53 +00:00
* static GeanyKeyBinding FILE_keys [ GEANY_KEYS_FILE_COUNT ] ; */
2008-02-29 19:30:28 +00:00
# define DECLARE_KEYS(group_id) \
2008-08-08 18:05:53 +00:00
static GeanyKeyBinding group_id # # _keys [ GEANY_KEYS_ # # group_id # # _COUNT ]
2008-02-29 19:30:28 +00:00
/* Expansion for group_id = FILE:
2008-03-12 13:37:39 +00:00
* add_kb_group ( & groups [ GEANY_KEY_GROUP_FILE ] , NULL , _ ( " File menu " ) ,
2008-02-29 19:30:28 +00:00
* GEANY_KEYS_FILE_COUNT , FILE_keys ) ; */
# define ADD_KB_GROUP(group_id, label) \
2008-03-13 17:12:18 +00:00
add_kb_group ( & groups [ GEANY_KEY_GROUP_ # # group_id ] , keybindings_keyfile_group_name , label , \
2008-02-29 19:30:28 +00:00
GEANY_KEYS_ # # group_id # # _COUNT , group_id # # _keys )
2008-03-12 13:37:39 +00:00
/* Init all fields of keys with default values.
* The menu_item field is always the main menu item , popup menu accelerators are
* set in add_popup_menu_accels ( ) . */
2008-02-20 11:24:23 +00:00
static void init_default_kb ( void )
2006-05-19 17:18:06 +00:00
{
2008-08-08 18:05:53 +00:00
static GeanyKeyGroup groups [ GEANY_KEY_GROUP_COUNT ] ;
GeanyKeyGroup * group ;
2008-02-29 19:30:28 +00:00
DECLARE_KEYS ( FILE ) ;
2008-03-12 13:37:39 +00:00
DECLARE_KEYS ( PROJECT ) ;
DECLARE_KEYS ( EDITOR ) ;
DECLARE_KEYS ( CLIPBOARD ) ;
DECLARE_KEYS ( SELECT ) ;
DECLARE_KEYS ( FORMAT ) ;
DECLARE_KEYS ( INSERT ) ;
DECLARE_KEYS ( SETTINGS ) ;
2008-02-29 19:30:28 +00:00
DECLARE_KEYS ( SEARCH ) ;
2008-03-12 13:37:39 +00:00
DECLARE_KEYS ( GOTO ) ;
2008-02-29 19:30:28 +00:00
DECLARE_KEYS ( VIEW ) ;
2008-03-12 13:37:39 +00:00
DECLARE_KEYS ( FOCUS ) ;
DECLARE_KEYS ( NOTEBOOK ) ;
2008-02-29 19:30:28 +00:00
DECLARE_KEYS ( DOCUMENT ) ;
DECLARE_KEYS ( BUILD ) ;
DECLARE_KEYS ( TOOLS ) ;
DECLARE_KEYS ( HELP ) ;
2008-03-12 13:37:39 +00:00
group = ADD_KB_GROUP ( FILE , _ ( " File " ) ) ;
2008-02-29 19:30:28 +00:00
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FILE_NEW , cb_func_file_action ,
2008-03-10 13:23:57 +00:00
GDK_n , GDK_CONTROL_MASK , " menu_new " , _ ( " New " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FILE_OPEN , cb_func_file_action ,
2008-03-10 13:23:57 +00:00
GDK_o , GDK_CONTROL_MASK , " menu_open " , _ ( " Open " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FILE_OPENSELECTED , cb_func_file_action ,
2008-03-12 13:37:39 +00:00
GDK_o , GDK_SHIFT_MASK | GDK_CONTROL_MASK , " menu_open_selected " ,
_ ( " Open selected file " ) , LW ( menu_open_selected_file1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FILE_SAVE , cb_func_file_action ,
2008-03-10 13:23:57 +00:00
GDK_s , GDK_CONTROL_MASK , " menu_save " , _ ( " Save " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FILE_SAVEAS , cb_func_file_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " menu_saveas " , _ ( " Save as " ) , LW ( menu_save_as1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FILE_SAVEALL , cb_func_file_action ,
2008-03-12 13:37:39 +00:00
GDK_S , GDK_SHIFT_MASK | GDK_CONTROL_MASK , " menu_saveall " , _ ( " Save all " ) ,
LW ( menu_save_all1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FILE_PRINT , cb_func_file_action ,
2008-03-12 13:37:39 +00:00
GDK_p , GDK_CONTROL_MASK , " menu_print " , _ ( " Print " ) , LW ( print1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FILE_CLOSE , cb_func_file_action ,
2008-03-12 13:37:39 +00:00
GDK_w , GDK_CONTROL_MASK , " menu_close " , _ ( " Close " ) , LW ( menu_close1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FILE_CLOSEALL , cb_func_file_action ,
2008-03-12 13:37:39 +00:00
GDK_w , GDK_CONTROL_MASK | GDK_SHIFT_MASK , " menu_closeall " , _ ( " Close all " ) ,
LW ( menu_close_all1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FILE_RELOAD , cb_func_file_action ,
2008-03-12 13:37:39 +00:00
GDK_r , GDK_CONTROL_MASK , " menu_reloadfile " , _ ( " Reload file " ) , LW ( menu_reload1 ) ) ;
group = ADD_KB_GROUP ( PROJECT , _ ( " Project " ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_PROJECT_PROPERTIES , cb_func_project_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " project_properties " , _ ( " Project properties " ) , LW ( project_properties1 ) ) ;
group = ADD_KB_GROUP ( EDITOR , _ ( " Editor " ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_EDITOR_UNDO , cb_func_editor_action ,
2008-03-12 13:37:39 +00:00
GDK_z , GDK_CONTROL_MASK , " menu_undo " , _ ( " Undo " ) , LW ( menu_undo2 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_EDITOR_REDO , cb_func_editor_action ,
2008-03-12 13:37:39 +00:00
GDK_y , GDK_CONTROL_MASK , " menu_redo " , _ ( " Redo " ) , LW ( menu_redo2 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_EDITOR_DUPLICATELINE , cb_func_editor_action ,
2008-03-12 13:37:39 +00:00
GDK_d , GDK_CONTROL_MASK , " edit_duplicateline " , _ ( " Duplicate line or selection " ) ,
LW ( menu_duplicate_line1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_EDITOR_DELETELINE , cb_func_editor_action ,
2008-03-12 13:37:39 +00:00
GDK_k , GDK_CONTROL_MASK , " edit_deleteline " , _ ( " Delete current line(s) " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_EDITOR_TRANSPOSELINE , cb_func_editor_action ,
2008-03-12 13:37:39 +00:00
GDK_t , GDK_CONTROL_MASK , " edit_transposeline " , _ ( " Transpose current line " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_EDITOR_SCROLLTOLINE , cb_func_editor_action ,
2008-03-12 13:37:39 +00:00
GDK_l , GDK_SHIFT_MASK | GDK_CONTROL_MASK , " edit_scrolltoline " , _ ( " Scroll to current line " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_EDITOR_SCROLLLINEUP , cb_func_editor_action ,
2008-03-12 13:37:39 +00:00
GDK_Up , GDK_MOD1_MASK , " edit_scrolllineup " , _ ( " Scroll up the view by one line " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_EDITOR_SCROLLLINEDOWN , cb_func_editor_action ,
2008-03-12 13:37:39 +00:00
GDK_Down , GDK_MOD1_MASK , " edit_scrolllinedown " , _ ( " Scroll down the view by one line " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_EDITOR_COMPLETESNIPPET , NULL , /* handled specially in check_snippet_completion() */
2008-03-12 13:37:39 +00:00
GDK_Tab , 0 , " edit_completesnippet " , _ ( " Complete snippet " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_EDITOR_SUPPRESSSNIPPETCOMPLETION , cb_func_editor_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " edit_suppresssnippetcompletion " , _ ( " Suppress snippet completion " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_EDITOR_CONTEXTACTION , cb_func_editor_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " popup_contextaction " , _ ( " Context Action " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_EDITOR_AUTOCOMPLETE , cb_func_editor_action ,
2008-03-12 13:37:39 +00:00
GDK_space , GDK_CONTROL_MASK , " edit_autocomplete " , _ ( " Complete word " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_EDITOR_CALLTIP , cb_func_editor_action ,
2008-03-12 13:37:39 +00:00
GDK_space , GDK_CONTROL_MASK | GDK_SHIFT_MASK , " edit_calltip " , _ ( " Show calltip " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_EDITOR_MACROLIST , cb_func_editor_action ,
2008-03-12 13:37:39 +00:00
GDK_Return , GDK_CONTROL_MASK , " edit_macrolist " , _ ( " Show macro list " ) , NULL ) ;
group = ADD_KB_GROUP ( CLIPBOARD , _ ( " Clipboard " ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_CLIPBOARD_CUT , cb_func_clipboard ,
2008-03-10 13:23:57 +00:00
GDK_x , GDK_CONTROL_MASK , " menu_cut " , _ ( " Cut " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_CLIPBOARD_COPY , cb_func_clipboard ,
2008-03-10 13:23:57 +00:00
GDK_c , GDK_CONTROL_MASK , " menu_copy " , _ ( " Copy " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_CLIPBOARD_PASTE , cb_func_clipboard ,
2008-03-10 13:23:57 +00:00
GDK_v , GDK_CONTROL_MASK , " menu_paste " , _ ( " Paste " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_CLIPBOARD_COPYLINE , cb_func_clipboard ,
2008-03-12 13:37:39 +00:00
GDK_c , GDK_CONTROL_MASK | GDK_SHIFT_MASK , " edit_copyline " , _ ( " Copy current line(s) " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_CLIPBOARD_CUTLINE , cb_func_clipboard ,
2008-03-12 13:37:39 +00:00
GDK_x , GDK_CONTROL_MASK | GDK_SHIFT_MASK , " edit_cutline " , _ ( " Cut current line(s) " ) , NULL ) ;
2007-05-03 15:38:02 +00:00
2008-03-12 13:37:39 +00:00
group = ADD_KB_GROUP ( SELECT , _ ( " Select " ) ) ;
2008-02-29 19:30:28 +00:00
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_SELECT_ALL , cb_func_select_action ,
2008-03-12 13:37:39 +00:00
GDK_a , GDK_CONTROL_MASK , " menu_selectall " , _ ( " Select All " ) , LW ( menu_select_all1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_SELECT_WORD , cb_func_select_action ,
2008-03-12 13:37:39 +00:00
GDK_w , GDK_SHIFT_MASK | GDK_MOD1_MASK , " edit_selectword " , _ ( " Select current word " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_SELECT_LINE , cb_func_select_action ,
2008-03-12 13:37:39 +00:00
GDK_l , GDK_SHIFT_MASK | GDK_MOD1_MASK , " edit_selectline " , _ ( " Select current line(s) " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_SELECT_PARAGRAPH , cb_func_select_action ,
2008-03-12 13:37:39 +00:00
GDK_p , GDK_SHIFT_MASK | GDK_MOD1_MASK , " edit_selectparagraph " , _ ( " Select current paragraph " ) , NULL ) ;
2007-05-03 15:38:02 +00:00
2008-03-12 13:37:39 +00:00
group = ADD_KB_GROUP ( FORMAT , _ ( " Format " ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FORMAT_TOGGLECASE , cb_func_format_action ,
2008-03-12 13:37:39 +00:00
GDK_u , GDK_CONTROL_MASK | GDK_MOD1_MASK , " edit_togglecase " ,
_ ( " Toggle Case of Selection " ) , LW ( menu_toggle_case2 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FORMAT_COMMENTLINETOGGLE , cb_func_format_action ,
2008-03-12 13:37:39 +00:00
GDK_e , GDK_CONTROL_MASK , " edit_commentlinetoggle " , _ ( " Toggle line commentation " ) ,
LW ( menu_toggle_line_commentation1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FORMAT_COMMENTLINE , cb_func_format_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " edit_commentline " , _ ( " Comment line(s) " ) , LW ( menu_comment_line1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FORMAT_UNCOMMENTLINE , cb_func_format_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " edit_uncommentline " , _ ( " Uncomment line(s) " ) , LW ( menu_uncomment_line1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FORMAT_INCREASEINDENT , cb_func_format_action ,
2008-03-12 13:37:39 +00:00
GDK_i , GDK_CONTROL_MASK , " edit_increaseindent " , _ ( " Increase indent " ) ,
LW ( menu_increase_indent1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FORMAT_DECREASEINDENT , cb_func_format_action ,
2008-03-12 13:37:39 +00:00
GDK_u , GDK_CONTROL_MASK , " edit_decreaseindent " , _ ( " Decrease indent " ) ,
LW ( menu_decrease_indent1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FORMAT_INCREASEINDENTBYSPACE , cb_func_format_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " edit_increaseindentbyspace " , _ ( " Increase indent by one space " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FORMAT_DECREASEINDENTBYSPACE , cb_func_format_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " edit_decreaseindentbyspace " , _ ( " Decrease indent by one space " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FORMAT_AUTOINDENT , cb_func_format_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " edit_autoindent " , _ ( " Smart line indent " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FORMAT_SENDTOCMD1 , cb_func_format_action ,
2008-03-12 13:37:39 +00:00
GDK_1 , GDK_CONTROL_MASK , " edit_sendtocmd1 " , _ ( " Send to Custom Command 1 " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FORMAT_SENDTOCMD2 , cb_func_format_action ,
2008-03-12 13:37:39 +00:00
GDK_2 , GDK_CONTROL_MASK , " edit_sendtocmd2 " , _ ( " Send to Custom Command 2 " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FORMAT_SENDTOCMD3 , cb_func_format_action ,
2008-03-12 13:37:39 +00:00
GDK_3 , GDK_CONTROL_MASK , " edit_sendtocmd3 " , _ ( " Send to Custom Command 3 " ) , NULL ) ;
2008-02-29 19:30:28 +00:00
2008-03-12 13:37:39 +00:00
group = ADD_KB_GROUP ( INSERT , _ ( " Insert " ) ) ;
2008-02-29 19:30:28 +00:00
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_INSERT_DATE , cb_func_insert_action ,
2008-03-12 13:37:39 +00:00
GDK_d , GDK_SHIFT_MASK | GDK_MOD1_MASK , " menu_insert_date " , _ ( " Insert date " ) ,
LW ( insert_date_custom1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_INSERT_ALTWHITESPACE , cb_func_insert_action ,
2008-06-17 16:18:41 +00:00
0 , 0 , " edit_insertwhitespace " , _ ( " Insert alternative white space " ) , NULL ) ;
2008-02-29 19:30:28 +00:00
2008-03-12 13:37:39 +00:00
group = ADD_KB_GROUP ( SETTINGS , _ ( " Settings " ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_SETTINGS_PREFERENCES , cb_func_menu_preferences ,
2008-03-12 13:37:39 +00:00
GDK_p , GDK_CONTROL_MASK | GDK_MOD1_MASK , " menu_preferences " , _ ( " Preferences " ) ,
LW ( preferences1 ) ) ;
group = ADD_KB_GROUP ( SEARCH , _ ( " Search " ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_SEARCH_FIND , cb_func_search_action ,
2008-03-12 13:37:39 +00:00
GDK_f , GDK_CONTROL_MASK , " menu_find " , _ ( " Find " ) , LW ( find1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_SEARCH_FINDNEXT , cb_func_search_action ,
2008-03-12 13:37:39 +00:00
GDK_g , GDK_CONTROL_MASK , " menu_findnext " , _ ( " Find Next " ) , LW ( find_next1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_SEARCH_FINDPREVIOUS , cb_func_search_action ,
2008-03-12 13:37:39 +00:00
GDK_g , GDK_CONTROL_MASK | GDK_SHIFT_MASK , " menu_findprevious " , _ ( " Find Previous " ) ,
LW ( find_previous1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_SEARCH_FINDNEXTSEL , cb_func_search_action ,
2008-04-03 15:12:54 +00:00
0 , 0 , " menu_findnextsel " , _ ( " Find Next Selection " ) , LW ( find_nextsel1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_SEARCH_FINDPREVSEL , cb_func_search_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " menu_findprevsel " , _ ( " Find Previous Selection " ) , LW ( find_prevsel1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_SEARCH_REPLACE , cb_func_search_action ,
2008-03-12 13:37:39 +00:00
GDK_h , GDK_CONTROL_MASK , " menu_replace " , _ ( " Replace " ) , LW ( replace1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_SEARCH_FINDINFILES , cb_func_search_action , GDK_f ,
2008-03-12 13:37:39 +00:00
GDK_CONTROL_MASK | GDK_SHIFT_MASK , " menu_findinfiles " , _ ( " Find in Files " ) ,
LW ( find_in_files1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_SEARCH_NEXTMESSAGE , cb_func_search_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " menu_nextmessage " , _ ( " Next Message " ) , LW ( next_message1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_SEARCH_PREVIOUSMESSAGE , cb_func_search_action ,
2008-06-26 16:39:41 +00:00
0 , 0 , " menu_previousmessage " , _ ( " Previous Message " ) , LW ( previous_message1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_SEARCH_FINDUSAGE , cb_func_search_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " popup_findusage " , _ ( " Find Usage " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_SEARCH_FINDDOCUMENTUSAGE , cb_func_search_action ,
2008-07-17 16:42:03 +00:00
0 , 0 , " popup_finddocumentusage " , _ ( " Find Document Usage " ) , NULL ) ;
2007-07-04 14:41:58 +00:00
2008-03-12 13:37:39 +00:00
group = ADD_KB_GROUP ( GOTO , _ ( " Go to " ) ) ;
2008-02-29 19:30:28 +00:00
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_GOTO_BACK , cb_func_goto_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " nav_back " , _ ( " Navigate back a location " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_GOTO_FORWARD , cb_func_goto_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " nav_forward " , _ ( " Navigate forward a location " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_GOTO_LINE , cb_func_goto_action ,
2008-03-12 13:37:39 +00:00
GDK_l , GDK_CONTROL_MASK , " menu_gotoline " , _ ( " Go to Line " ) , LW ( go_to_line1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_GOTO_MATCHINGBRACE , cb_func_goto_action ,
2007-07-09 13:53:27 +00:00
GDK_b , GDK_CONTROL_MASK , " edit_gotomatchingbrace " ,
2008-03-12 13:37:39 +00:00
_ ( " Go to matching brace " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_GOTO_TOGGLEMARKER , cb_func_goto_action ,
2007-03-15 13:14:04 +00:00
GDK_m , GDK_CONTROL_MASK , " edit_togglemarker " ,
2008-03-12 13:37:39 +00:00
_ ( " Toggle marker " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_GOTO_NEXTMARKER , cb_func_goto_action ,
2007-03-15 12:52:16 +00:00
GDK_period , GDK_CONTROL_MASK , " edit_gotonextmarker " ,
2008-03-12 13:37:39 +00:00
_ ( " Go to next marker " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_GOTO_PREVIOUSMARKER , cb_func_goto_action ,
2007-03-15 12:52:16 +00:00
GDK_comma , GDK_CONTROL_MASK , " edit_gotopreviousmarker " ,
2008-03-12 13:37:39 +00:00
_ ( " Go to previous marker " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_GOTO_TAGDEFINITION , cb_func_goto_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " popup_gototagdefinition " , _ ( " Go to Tag Definition " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_GOTO_TAGDECLARATION , cb_func_goto_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " popup_gototagdeclaration " , _ ( " Go to Tag Declaration " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_GOTO_LINESTART , cb_func_goto_action ,
2008-06-27 17:54:36 +00:00
GDK_Home , 0 , " edit_gotolinestart " , _ ( " Go to Start of Line " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_GOTO_LINEEND , cb_func_goto_action ,
2008-06-27 17:54:36 +00:00
GDK_End , 0 , " edit_gotolineend " , _ ( " Go to End of Line " ) , NULL ) ;
2008-09-26 18:29:42 +00:00
keybindings_set_item ( group , GEANY_KEYS_GOTO_PREVWORDSTART , cb_func_goto_action ,
GDK_slash , GDK_CONTROL_MASK , " edit_prevwordstart " , _ ( " Go to Previous Word Part " ) , NULL ) ;
keybindings_set_item ( group , GEANY_KEYS_GOTO_NEXTWORDSTART , cb_func_goto_action ,
GDK_backslash , GDK_CONTROL_MASK , " edit_nextwordstart " , _ ( " Go to Next Word Part " ) , NULL ) ;
2008-03-12 13:37:39 +00:00
group = ADD_KB_GROUP ( VIEW , _ ( " View " ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_VIEW_TOGGLEALL , cb_func_menu_toggle_all ,
2008-03-12 13:37:39 +00:00
0 , 0 , " menu_toggleall " , _ ( " Toggle All Additional Widgets " ) ,
LW ( menu_toggle_all_additional_widgets1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_VIEW_FULLSCREEN , cb_func_menu_fullscreen ,
2008-03-12 13:37:39 +00:00
GDK_F11 , 0 , " menu_fullscreen " , _ ( " Fullscreen " ) , LW ( menu_fullscreen1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_VIEW_MESSAGEWINDOW , cb_func_menu_messagewindow ,
2008-03-12 13:37:39 +00:00
0 , 0 , " menu_messagewindow " , _ ( " Toggle Messages Window " ) ,
LW ( menu_show_messages_window1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_VIEW_SIDEBAR , cb_func_toggle_sidebar ,
2008-03-12 13:37:39 +00:00
0 , 0 , " toggle_sidebar " , _ ( " Toggle Sidebar " ) , LW ( menu_show_sidebar1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_VIEW_ZOOMIN , cb_func_menu_zoomin ,
2008-03-12 13:37:39 +00:00
GDK_plus , GDK_CONTROL_MASK , " menu_zoomin " , _ ( " Zoom In " ) , LW ( menu_zoom_in1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_VIEW_ZOOMOUT , cb_func_menu_zoomout ,
2008-03-12 13:37:39 +00:00
GDK_minus , GDK_CONTROL_MASK , " menu_zoomout " , _ ( " Zoom Out " ) , LW ( menu_zoom_out1 ) ) ;
group = ADD_KB_GROUP ( FOCUS , _ ( " Focus " ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FOCUS_EDITOR , cb_func_switch_action ,
2008-03-10 13:23:57 +00:00
GDK_F2 , 0 , " switch_editor " , _ ( " Switch to Editor " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FOCUS_SCRIBBLE , cb_func_switch_action ,
2008-03-10 13:23:57 +00:00
GDK_F6 , 0 , " switch_scribble " , _ ( " Switch to Scribble " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FOCUS_VTE , cb_func_switch_action ,
2008-03-10 13:23:57 +00:00
GDK_F4 , 0 , " switch_vte " , _ ( " Switch to VTE " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FOCUS_SEARCHBAR , cb_func_switch_action ,
2008-03-10 13:23:57 +00:00
GDK_F7 , 0 , " switch_search_bar " , _ ( " Switch to Search Bar " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FOCUS_SIDEBAR , cb_func_switch_action ,
2008-03-23 16:32:36 +00:00
0 , 0 , " switch_sidebar " , _ ( " Switch to Sidebar " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_FOCUS_COMPILER , cb_func_switch_action ,
2008-07-03 17:37:00 +00:00
0 , 0 , " switch_compiler " , _ ( " Switch to Compiler " ) , NULL ) ;
2008-02-29 19:30:28 +00:00
2008-03-12 13:37:39 +00:00
group = ADD_KB_GROUP ( NOTEBOOK , _ ( " Notebook tab " ) ) ;
2008-02-29 19:30:28 +00:00
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_NOTEBOOK_SWITCHTABLEFT , cb_func_switch_tableft ,
2008-03-10 13:23:57 +00:00
GDK_Page_Up , GDK_CONTROL_MASK , " switch_tableft " , _ ( " Switch to left document " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_NOTEBOOK_SWITCHTABRIGHT , cb_func_switch_tabright ,
2008-03-10 13:23:57 +00:00
GDK_Page_Down , GDK_CONTROL_MASK , " switch_tabright " , _ ( " Switch to right document " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_NOTEBOOK_SWITCHTABLASTUSED , cb_func_switch_tablastused ,
2008-03-10 13:23:57 +00:00
GDK_Tab , GDK_CONTROL_MASK , " switch_tablastused " , _ ( " Switch to last used document " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_NOTEBOOK_MOVETABLEFT , cb_func_move_tab ,
2008-03-10 13:23:57 +00:00
GDK_Page_Up , GDK_MOD1_MASK , " move_tableft " , _ ( " Move document left " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_NOTEBOOK_MOVETABRIGHT , cb_func_move_tab ,
2008-03-10 13:23:57 +00:00
GDK_Page_Down , GDK_MOD1_MASK , " move_tabright " , _ ( " Move document right " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_NOTEBOOK_MOVETABFIRST , cb_func_move_tab ,
2008-03-10 13:23:57 +00:00
0 , 0 , " move_tabfirst " , _ ( " Move document first " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_NOTEBOOK_MOVETABLAST , cb_func_move_tab ,
2008-03-10 13:23:57 +00:00
0 , 0 , " move_tablast " , _ ( " Move document last " ) , NULL ) ;
2006-10-26 15:22:27 +00:00
2008-03-12 13:37:39 +00:00
group = ADD_KB_GROUP ( DOCUMENT , _ ( " Document " ) ) ;
2008-02-29 19:30:28 +00:00
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_DOCUMENT_LINEWRAP , cb_func_document_action ,
2008-06-19 15:58:10 +00:00
0 , 0 , " menu_linewrap " , _ ( " Toggle Line wrapping " ) , LW ( menu_line_wrapping1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_DOCUMENT_LINEBREAK , cb_func_document_action ,
2008-06-19 15:58:10 +00:00
0 , 0 , " menu_linebreak " , _ ( " Toggle Line breaking " ) , LW ( line_breaking1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_DOCUMENT_REPLACETABS , cb_func_document_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " menu_replacetabs " , _ ( " Replace tabs by space " ) , LW ( menu_replace_tabs ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_DOCUMENT_REPLACESPACES , cb_func_document_action ,
2008-06-19 15:58:10 +00:00
0 , 0 , " menu_replacespaces " , _ ( " Replace spaces by tabs " ) , LW ( menu_replace_spaces ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_DOCUMENT_TOGGLEFOLD , cb_func_document_action ,
2008-06-19 15:58:10 +00:00
0 , 0 , " menu_togglefold " , _ ( " Toggle current fold " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_DOCUMENT_FOLDALL , cb_func_document_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " menu_foldall " , _ ( " Fold all " ) , LW ( menu_fold_all1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_DOCUMENT_UNFOLDALL , cb_func_document_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " menu_unfoldall " , _ ( " Unfold all " ) , LW ( menu_unfold_all1 ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_DOCUMENT_RELOADTAGLIST , cb_func_document_action ,
2008-03-12 13:37:39 +00:00
GDK_r , GDK_SHIFT_MASK | GDK_CONTROL_MASK , " reloadtaglist " , _ ( " Reload symbol list " ) , NULL ) ;
2007-03-25 20:51:45 +00:00
2008-03-12 13:37:39 +00:00
group = ADD_KB_GROUP ( BUILD , _ ( " Build " ) ) ;
2008-02-29 19:30:28 +00:00
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_BUILD_COMPILE , cb_func_build_action ,
2008-03-12 13:37:39 +00:00
GDK_F8 , 0 , " build_compile " , _ ( " Compile " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_BUILD_LINK , cb_func_build_action ,
2008-03-12 13:37:39 +00:00
GDK_F9 , 0 , " build_link " , _ ( " Build " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_BUILD_MAKE , cb_func_build_action ,
2008-03-12 13:37:39 +00:00
GDK_F9 , GDK_SHIFT_MASK , " build_make " , _ ( " Make all " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_BUILD_MAKEOWNTARGET , cb_func_build_action ,
2008-03-12 13:37:39 +00:00
GDK_F9 , GDK_SHIFT_MASK | GDK_CONTROL_MASK , " build_makeowntarget " ,
_ ( " Make custom target " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_BUILD_MAKEOBJECT , cb_func_build_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " build_makeobject " , _ ( " Make object " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_BUILD_NEXTERROR , cb_func_build_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " build_nexterror " , _ ( " Next error " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_BUILD_PREVIOUSERROR , cb_func_build_action ,
2008-06-26 16:39:41 +00:00
0 , 0 , " build_previouserror " , _ ( " Previous error " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_BUILD_RUN , cb_func_build_action ,
2008-03-12 13:37:39 +00:00
GDK_F5 , 0 , " build_run " , _ ( " Run " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_BUILD_RUN2 , cb_func_build_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " build_run2 " , _ ( " Run (alternative command) " ) , NULL ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_BUILD_OPTIONS , cb_func_build_action ,
2008-03-12 13:37:39 +00:00
0 , 0 , " build_options " , _ ( " Build options " ) , NULL ) ;
2008-02-29 19:30:28 +00:00
2008-03-12 13:37:39 +00:00
group = ADD_KB_GROUP ( TOOLS , _ ( " Tools " ) ) ;
2008-02-29 19:30:28 +00:00
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_TOOLS_OPENCOLORCHOOSER , cb_func_menu_opencolorchooser ,
2008-03-12 13:37:39 +00:00
0 , 0 , " menu_opencolorchooser " , _ ( " Show Color Chooser " ) , LW ( menu_choose_color1 ) ) ;
2008-02-29 19:30:28 +00:00
2008-03-12 13:37:39 +00:00
group = ADD_KB_GROUP ( HELP , _ ( " Help " ) ) ;
2008-08-08 15:15:50 +00:00
keybindings_set_item ( group , GEANY_KEYS_HELP_HELP , cb_func_menu_help ,
2008-03-12 13:37:39 +00:00
GDK_F1 , 0 , " menu_help " , _ ( " Help " ) , LW ( help1 ) ) ;
2007-09-27 11:13:59 +00:00
}
2008-03-14 13:11:46 +00:00
void keybindings_init ( void )
{
keybinding_groups = g_ptr_array_sized_new ( GEANY_KEY_GROUP_COUNT ) ;
2008-04-03 15:12:54 +00:00
kb_accel_group = gtk_accel_group_new ( ) ;
2008-03-14 13:11:46 +00:00
init_default_kb ( ) ;
2008-05-22 14:41:28 +00:00
gtk_window_add_accel_group ( GTK_WINDOW ( main_widgets . window ) , kb_accel_group ) ;
2008-03-14 13:11:46 +00:00
}
2008-08-08 18:05:53 +00:00
static void apply_kb_accel ( GeanyKeyGroup * group , GeanyKeyBinding * kb , gpointer user_data )
2008-07-20 17:12:34 +00:00
{
if ( kb - > key ! = 0 & & kb - > menu_item )
{
gtk_widget_add_accelerator ( kb - > menu_item , " activate " , kb_accel_group ,
kb - > key , kb - > mods , GTK_ACCEL_VISIBLE ) ;
}
}
2008-08-08 18:05:53 +00:00
typedef void ( * KBItemCallback ) ( GeanyKeyGroup * group , GeanyKeyBinding * kb , gpointer user_data ) ;
2008-02-29 19:30:28 +00:00
static void keybindings_foreach ( KBItemCallback cb , gpointer user_data )
2007-09-27 11:13:59 +00:00
{
2008-02-29 19:30:28 +00:00
gsize g , i ;
for ( g = 0 ; g < keybinding_groups - > len ; g + + )
{
2008-08-08 18:05:53 +00:00
GeanyKeyGroup * group = g_ptr_array_index ( keybinding_groups , g ) ;
2008-02-29 19:30:28 +00:00
for ( i = 0 ; i < group - > count ; i + + )
{
2008-08-08 18:05:53 +00:00
GeanyKeyBinding * kb = & group - > keys [ i ] ;
2008-02-29 19:30:28 +00:00
cb ( group , kb , user_data ) ;
}
}
}
2008-08-08 18:05:53 +00:00
static void load_kb ( GeanyKeyGroup * group , GeanyKeyBinding * kb , gpointer user_data )
2008-02-29 19:30:28 +00:00
{
GKeyFile * config = user_data ;
2007-09-27 11:13:59 +00:00
gchar * val ;
guint key ;
GdkModifierType mods ;
2008-02-29 19:30:28 +00:00
val = g_key_file_get_string ( config , group - > name , kb - > name , NULL ) ;
if ( val ! = NULL )
{
gtk_accelerator_parse ( val , & key , & mods ) ;
kb - > key = key ;
kb - > mods = mods ;
}
g_free ( val ) ;
}
static void load_user_kb ( void )
{
gchar * configfile = g_strconcat ( app - > configdir , G_DIR_SEPARATOR_S , " keybindings.conf " , NULL ) ;
2007-09-27 11:13:59 +00:00
GKeyFile * config = g_key_file_new ( ) ;
2006-05-19 17:18:06 +00:00
2008-02-27 13:17:29 +00:00
/* now load user defined keys */
2006-05-19 17:18:06 +00:00
if ( g_key_file_load_from_file ( config , configfile , G_KEY_FILE_KEEP_COMMENTS , NULL ) )
{
2008-03-14 13:11:46 +00:00
keybindings_foreach ( load_kb , config ) ;
2006-05-19 17:18:06 +00:00
}
2007-09-27 11:13:59 +00:00
g_free ( configfile ) ;
g_key_file_free ( config ) ;
}
2008-03-10 13:54:47 +00:00
void keybindings_load_keyfile ( void )
{
2007-09-27 11:13:59 +00:00
load_user_kb ( ) ;
2008-03-12 13:37:39 +00:00
add_popup_menu_accels ( ) ;
2008-07-20 17:12:34 +00:00
/* set menu accels now, after user keybindings have been read and processed
* if we would set it before , user keybindings could not override menu item ' s default
* keybindings */
keybindings_foreach ( apply_kb_accel , NULL ) ;
2006-05-24 16:56:14 +00:00
}
2008-08-08 18:05:53 +00:00
static void add_menu_accel ( GeanyKeyGroup * group , guint kb_id ,
2008-03-04 16:11:59 +00:00
GtkAccelGroup * accel_group , GtkWidget * menuitem )
{
2008-08-08 18:05:53 +00:00
GeanyKeyBinding * kb = & group - > keys [ kb_id ] ;
2008-03-04 16:11:59 +00:00
if ( kb - > key ! = 0 )
gtk_widget_add_accelerator ( menuitem , " activate " , accel_group ,
kb - > key , kb - > mods , GTK_ACCEL_VISIBLE ) ;
}
2006-05-24 16:56:14 +00:00
2006-06-17 21:08:47 +00:00
2008-03-04 16:11:59 +00:00
# define GEANY_ADD_POPUP_ACCEL(kb_id, wid) \
2008-12-18 21:21:53 +00:00
add_menu_accel ( group , kb_id , accel_group , ui_lookup_widget ( main_widgets . editor_menu , G_STRINGIFY ( wid ) ) )
2008-03-04 16:11:59 +00:00
/* set the menu item accelerator shortcuts (just for visibility, they are handled anyway) */
2008-03-12 13:37:39 +00:00
static void add_popup_menu_accels ( void )
2006-05-24 16:56:14 +00:00
{
GtkAccelGroup * accel_group = gtk_accel_group_new ( ) ;
2008-08-08 18:05:53 +00:00
GeanyKeyGroup * group ;
2006-05-19 17:18:06 +00:00
2008-03-12 13:37:39 +00:00
group = g_ptr_array_index ( keybinding_groups , GEANY_KEY_GROUP_EDITOR ) ;
GEANY_ADD_POPUP_ACCEL ( GEANY_KEYS_EDITOR_UNDO , undo1 ) ;
GEANY_ADD_POPUP_ACCEL ( GEANY_KEYS_EDITOR_REDO , redo1 ) ;
GEANY_ADD_POPUP_ACCEL ( GEANY_KEYS_EDITOR_DUPLICATELINE , menu_duplicate_line2 ) ;
GEANY_ADD_POPUP_ACCEL ( GEANY_KEYS_EDITOR_CONTEXTACTION , context_action1 ) ;
group = g_ptr_array_index ( keybinding_groups , GEANY_KEY_GROUP_SELECT ) ;
GEANY_ADD_POPUP_ACCEL ( GEANY_KEYS_SELECT_ALL , menu_select_all2 ) ;
group = g_ptr_array_index ( keybinding_groups , GEANY_KEY_GROUP_INSERT ) ;
GEANY_ADD_POPUP_ACCEL ( GEANY_KEYS_INSERT_DATE , insert_date_custom2 ) ;
2006-05-19 17:18:06 +00:00
2008-03-12 13:37:39 +00:00
group = g_ptr_array_index ( keybinding_groups , GEANY_KEY_GROUP_FILE ) ;
GEANY_ADD_POPUP_ACCEL ( GEANY_KEYS_FILE_OPENSELECTED , menu_open_selected_file2 ) ;
group = g_ptr_array_index ( keybinding_groups , GEANY_KEY_GROUP_SEARCH ) ;
GEANY_ADD_POPUP_ACCEL ( GEANY_KEYS_SEARCH_FINDUSAGE , find_usage1 ) ;
2008-07-17 16:42:03 +00:00
GEANY_ADD_POPUP_ACCEL ( GEANY_KEYS_SEARCH_FINDDOCUMENTUSAGE , find_document_usage1 ) ;
2008-03-12 13:37:39 +00:00
group = g_ptr_array_index ( keybinding_groups , GEANY_KEY_GROUP_GOTO ) ;
GEANY_ADD_POPUP_ACCEL ( GEANY_KEYS_GOTO_LINE , go_to_line ) ;
GEANY_ADD_POPUP_ACCEL ( GEANY_KEYS_GOTO_TAGDEFINITION , goto_tag_definition1 ) ;
GEANY_ADD_POPUP_ACCEL ( GEANY_KEYS_GOTO_TAGDECLARATION , goto_tag_declaration1 ) ;
group = g_ptr_array_index ( keybinding_groups , GEANY_KEY_GROUP_FORMAT ) ;
GEANY_ADD_POPUP_ACCEL ( GEANY_KEYS_FORMAT_TOGGLECASE , toggle_case1 ) ;
GEANY_ADD_POPUP_ACCEL ( GEANY_KEYS_FORMAT_COMMENTLINE , menu_comment_line2 ) ;
GEANY_ADD_POPUP_ACCEL ( GEANY_KEYS_FORMAT_UNCOMMENTLINE , menu_uncomment_line2 ) ;
GEANY_ADD_POPUP_ACCEL ( GEANY_KEYS_FORMAT_COMMENTLINETOGGLE , menu_toggle_line_commentation2 ) ;
GEANY_ADD_POPUP_ACCEL ( GEANY_KEYS_FORMAT_INCREASEINDENT , menu_increase_indent2 ) ;
GEANY_ADD_POPUP_ACCEL ( GEANY_KEYS_FORMAT_DECREASEINDENT , menu_decrease_indent2 ) ;
2006-06-17 21:08:47 +00:00
2008-02-27 13:17:29 +00:00
/* the build menu items are set if the build menus are created */
2006-05-19 17:18:06 +00:00
2008-05-22 14:41:28 +00:00
gtk_window_add_accel_group ( GTK_WINDOW ( main_widgets . window ) , accel_group ) ;
2006-05-19 17:18:06 +00:00
}
2008-08-08 18:05:53 +00:00
static void set_keyfile_kb ( GeanyKeyGroup * group , GeanyKeyBinding * kb , gpointer user_data )
2008-02-29 19:30:28 +00:00
{
GKeyFile * config = user_data ;
gchar * val ;
val = gtk_accelerator_name ( kb - > key , kb - > mods ) ;
g_key_file_set_string ( config , group - > name , kb - > name , val ) ;
g_free ( val ) ;
2006-05-19 17:18:06 +00:00
}
/* just write the content of the keys array to the config file */
void keybindings_write_to_file ( void )
{
gchar * configfile = g_strconcat ( app - > configdir , G_DIR_SEPARATOR_S , " keybindings.conf " , NULL ) ;
2008-02-29 19:30:28 +00:00
gchar * data ;
2006-05-19 17:18:06 +00:00
GKeyFile * config = g_key_file_new ( ) ;
2008-02-27 13:17:29 +00:00
/* add comment if the file is newly created */
2006-05-19 17:18:06 +00:00
if ( ! g_key_file_load_from_file ( config , configfile , G_KEY_FILE_KEEP_COMMENTS , NULL ) )
{
g_key_file_set_comment ( config , NULL , NULL , " Keybindings for Geany \n The format looks like \" <Control>a \" or \" <Shift><Alt>F1 \" . \n But you can also change the keys in Geany's preferences dialog. " , NULL ) ;
}
2008-02-29 19:30:28 +00:00
keybindings_foreach ( set_keyfile_kb , config ) ;
2006-05-19 17:18:06 +00:00
2008-02-27 13:17:29 +00:00
/* write the file */
2006-05-19 17:18:06 +00:00
data = g_key_file_to_data ( config , NULL , NULL ) ;
utils_write_file ( configfile , data ) ;
g_free ( data ) ;
g_free ( configfile ) ;
g_key_file_free ( config ) ;
}
void keybindings_free ( void )
{
2008-02-29 19:30:28 +00:00
g_ptr_array_free ( keybinding_groups , TRUE ) ;
2006-05-19 17:18:06 +00:00
}
2008-10-17 16:51:22 +00:00
static void fill_shortcut_labels_treeview ( GtkWidget * tree )
2007-03-23 16:34:54 +00:00
{
2008-03-03 17:54:59 +00:00
gsize g , i ;
2008-10-17 16:51:22 +00:00
gchar * shortcut ;
GeanyKeyBinding * kb ;
GeanyKeyGroup * group ;
GtkListStore * store ;
GtkTreeIter iter ;
2007-03-29 14:39:04 +00:00
2008-10-17 16:51:22 +00:00
store = gtk_list_store_new ( 3 , G_TYPE_STRING , G_TYPE_STRING , PANGO_TYPE_WEIGHT ) ;
2007-03-29 14:39:04 +00:00
2008-03-03 17:54:59 +00:00
for ( g = 0 ; g < keybinding_groups - > len ; g + + )
2007-03-29 14:39:04 +00:00
{
2008-10-17 16:51:22 +00:00
group = g_ptr_array_index ( keybinding_groups , g ) ;
2007-03-29 14:39:04 +00:00
2008-10-17 16:51:22 +00:00
if ( g > 0 )
2007-03-29 14:39:04 +00:00
{
2008-10-17 16:51:22 +00:00
gtk_list_store_append ( store , & iter ) ;
gtk_list_store_set ( store , & iter , - 1 ) ;
2007-03-29 14:39:04 +00:00
}
2008-10-17 16:51:22 +00:00
gtk_list_store_append ( store , & iter ) ;
gtk_list_store_set ( store , & iter , 0 , group - > label , 2 , PANGO_WEIGHT_BOLD , - 1 ) ;
2008-03-03 17:54:59 +00:00
for ( i = 0 ; i < group - > count ; i + + )
{
2008-10-17 16:51:22 +00:00
kb = & group - > keys [ i ] ;
2008-03-03 17:54:59 +00:00
shortcut = gtk_accelerator_get_label ( kb - > key , kb - > mods ) ;
2008-10-17 16:51:22 +00:00
gtk_list_store_append ( store , & iter ) ;
gtk_list_store_set ( store , & iter , 0 , kb - > label , 1 , shortcut , 2 , PANGO_WEIGHT_NORMAL , - 1 ) ;
2008-03-03 17:54:59 +00:00
g_free ( shortcut ) ;
}
2007-03-29 14:39:04 +00:00
}
2008-10-17 16:51:22 +00:00
gtk_tree_view_set_model ( GTK_TREE_VIEW ( tree ) , GTK_TREE_MODEL ( store ) ) ;
g_object_unref ( store ) ;
2007-03-29 14:39:04 +00:00
}
2008-06-24 12:25:23 +00:00
static GtkWidget * create_dialog ( void )
2007-03-29 14:39:04 +00:00
{
2008-10-17 16:51:22 +00:00
GtkWidget * dialog , * tree , * label , * swin , * vbox ;
GtkCellRenderer * text_renderer ;
GtkTreeViewColumn * column ;
2008-06-24 12:25:23 +00:00
gint height ;
2007-03-23 16:34:54 +00:00
2008-05-22 14:41:28 +00:00
dialog = gtk_dialog_new_with_buttons ( _ ( " Keyboard Shortcuts " ) , GTK_WINDOW ( main_widgets . window ) ,
2007-03-23 16:34:54 +00:00
GTK_DIALOG_DESTROY_WITH_PARENT ,
GTK_STOCK_EDIT , GTK_RESPONSE_APPLY ,
GTK_STOCK_CLOSE , GTK_RESPONSE_CANCEL , NULL ) ;
vbox = ui_dialog_vbox_new ( GTK_DIALOG ( dialog ) ) ;
gtk_box_set_spacing ( GTK_BOX ( vbox ) , 6 ) ;
2007-05-15 15:16:16 +00:00
gtk_widget_set_name ( dialog , " GeanyDialog " ) ;
2007-03-23 16:34:54 +00:00
height = GEANY_WINDOW_MINIMAL_HEIGHT ;
2008-04-03 15:38:16 +00:00
gtk_window_set_default_size ( GTK_WINDOW ( dialog ) , - 1 , height ) ;
2007-03-23 16:34:54 +00:00
gtk_dialog_set_default_response ( GTK_DIALOG ( dialog ) , GTK_RESPONSE_CANCEL ) ;
2008-10-17 16:51:22 +00:00
label = gtk_label_new ( _ ( " The following keyboard shortcuts are configurable: " ) ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0.5 ) ;
2007-03-23 16:34:54 +00:00
2008-10-17 16:51:22 +00:00
tree = gtk_tree_view_new ( ) ;
gtk_tree_view_set_rules_hint ( GTK_TREE_VIEW ( tree ) , TRUE ) ;
gtk_tree_view_set_headers_visible ( GTK_TREE_VIEW ( tree ) , FALSE ) ;
2007-03-23 16:34:54 +00:00
2008-10-17 16:51:22 +00:00
text_renderer = gtk_cell_renderer_text_new ( ) ;
/* we can't use "weight-set", see http://bugzilla.gnome.org/show_bug.cgi?id=355214 */
column = gtk_tree_view_column_new_with_attributes (
NULL , text_renderer , " text " , 0 , " weight " , 2 , NULL ) ;
gtk_tree_view_append_column ( GTK_TREE_VIEW ( tree ) , column ) ;
2007-03-23 16:34:54 +00:00
2008-10-17 16:51:22 +00:00
text_renderer = gtk_cell_renderer_text_new ( ) ;
column = gtk_tree_view_column_new_with_attributes ( NULL , text_renderer , " text " , 1 , NULL ) ;
gtk_tree_view_append_column ( GTK_TREE_VIEW ( tree ) , column ) ;
2007-03-29 14:39:04 +00:00
2008-10-17 16:51:22 +00:00
fill_shortcut_labels_treeview ( tree ) ;
2007-03-23 16:34:54 +00:00
swin = gtk_scrolled_window_new ( NULL , NULL ) ;
2008-04-03 15:38:16 +00:00
gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( swin ) , GTK_POLICY_NEVER ,
2007-03-23 16:34:54 +00:00
GTK_POLICY_AUTOMATIC ) ;
2008-10-17 16:51:22 +00:00
gtk_scrolled_window_set_shadow_type ( GTK_SCROLLED_WINDOW ( swin ) , GTK_SHADOW_ETCHED_IN ) ;
gtk_container_add ( GTK_CONTAINER ( swin ) , tree ) ;
2007-03-23 16:34:54 +00:00
2008-10-17 16:51:22 +00:00
gtk_box_pack_start ( GTK_BOX ( vbox ) , label , FALSE , FALSE , 6 ) ;
2007-03-23 16:34:54 +00:00
gtk_box_pack_start ( GTK_BOX ( vbox ) , swin , TRUE , TRUE , 0 ) ;
2008-06-24 12:25:23 +00:00
return dialog ;
}
2007-03-23 16:34:54 +00:00
2008-06-24 12:25:23 +00:00
/* non-modal keyboard shortcuts dialog, so user can edit whilst seeing the shortcuts */
static GtkWidget * key_dialog = NULL ;
static void on_dialog_response ( GtkWidget * dialog , gint response , gpointer user_data )
{
2007-03-23 16:34:54 +00:00
if ( response = = GTK_RESPONSE_APPLY )
{
GtkWidget * wid ;
2007-03-23 16:47:27 +00:00
prefs_show_dialog ( ) ;
2008-02-27 13:17:29 +00:00
/* select the KB page */
2008-12-18 21:21:53 +00:00
wid = ui_lookup_widget ( ui_widgets . prefs_dialog , " frame22 " ) ;
2007-03-23 16:34:54 +00:00
if ( wid ! = NULL )
{
2008-12-18 21:21:53 +00:00
GtkNotebook * nb = GTK_NOTEBOOK ( ui_lookup_widget ( ui_widgets . prefs_dialog , " notebook2 " ) ) ;
2007-03-23 16:34:54 +00:00
if ( nb ! = NULL )
gtk_notebook_set_current_page ( nb , gtk_notebook_page_num ( nb , wid ) ) ;
}
}
gtk_widget_destroy ( dialog ) ;
2008-06-24 12:25:23 +00:00
key_dialog = NULL ;
}
void keybindings_show_shortcuts ( void )
{
if ( key_dialog )
gtk_widget_destroy ( key_dialog ) ; /* in case the key_dialog is still visible */
key_dialog = create_dialog ( ) ;
g_signal_connect ( key_dialog , " response " , G_CALLBACK ( on_dialog_response ) , NULL ) ;
gtk_widget_show_all ( key_dialog ) ;
2007-03-23 16:34:54 +00:00
}
2008-02-12 15:49:54 +00:00
static gboolean check_fixed_kb ( guint keyval , guint state )
2006-11-23 12:23:36 +00:00
{
2008-02-27 13:17:29 +00:00
/* check alt-0 to alt-9 for setting current notebook page */
2008-02-12 15:49:54 +00:00
if ( state & GDK_MOD1_MASK & & keyval > = GDK_0 & & keyval < = GDK_9 )
2006-11-23 12:23:36 +00:00
{
2008-02-12 15:49:54 +00:00
gint page = keyval - GDK_0 - 1 ;
2008-05-22 14:41:28 +00:00
gint npages = gtk_notebook_get_n_pages ( GTK_NOTEBOOK ( main_widgets . notebook ) ) ;
2006-11-23 12:23:36 +00:00
2008-02-27 13:17:29 +00:00
/* alt-0 is for the rightmost tab */
2008-02-12 15:49:54 +00:00
if ( keyval = = GDK_0 )
2006-11-23 12:23:36 +00:00
page = npages - 1 ;
2008-02-27 13:17:29 +00:00
/* invert the order if tabs are added on the other side */
2008-05-16 12:08:39 +00:00
if ( swap_alt_tab_order & & ! file_prefs . tab_order_ltr )
2006-11-23 12:23:36 +00:00
page = ( npages - 1 ) - page ;
2008-05-22 14:41:28 +00:00
gtk_notebook_set_current_page ( GTK_NOTEBOOK ( main_widgets . notebook ) , page ) ;
2006-11-23 12:23:36 +00:00
return TRUE ;
}
2008-02-12 15:49:54 +00:00
if ( keyval = = GDK_Page_Up | | keyval = = GDK_Page_Down )
2007-09-07 12:34:57 +00:00
{
2008-02-27 13:17:29 +00:00
/* switch to first or last document */
2008-02-12 15:49:54 +00:00
if ( state = = ( GDK_CONTROL_MASK | GDK_SHIFT_MASK ) )
2007-09-07 12:34:57 +00:00
{
2008-02-12 15:49:54 +00:00
if ( keyval = = GDK_Page_Up )
2008-05-22 14:41:28 +00:00
gtk_notebook_set_current_page ( GTK_NOTEBOOK ( main_widgets . notebook ) , 0 ) ;
2008-02-12 15:49:54 +00:00
if ( keyval = = GDK_Page_Down )
2008-05-22 14:41:28 +00:00
gtk_notebook_set_current_page ( GTK_NOTEBOOK ( main_widgets . notebook ) ,
gtk_notebook_get_n_pages ( GTK_NOTEBOOK ( main_widgets . notebook ) ) - 1 ) ;
2007-09-07 12:34:57 +00:00
return TRUE ;
}
}
2006-11-23 12:23:36 +00:00
return FALSE ;
}
2007-11-12 09:27:43 +00:00
/* We have a special case for GEANY_KEYS_EDIT_COMPLETESNIPPET, because we need to
2007-03-27 15:48:16 +00:00
* return FALSE if no completion occurs , so the tab or space is handled normally . */
2008-02-12 15:49:54 +00:00
static gboolean check_snippet_completion ( guint keyval , guint state )
2007-03-27 15:48:16 +00:00
{
2008-08-08 18:05:53 +00:00
GeanyKeyBinding * kb = keybindings_lookup_item ( GEANY_KEY_GROUP_EDITOR ,
2008-03-12 13:37:39 +00:00
GEANY_KEYS_EDITOR_COMPLETESNIPPET ) ;
2007-03-27 15:48:16 +00:00
2008-03-03 17:35:32 +00:00
if ( kb - > key = = keyval & & kb - > mods = = state )
2007-03-27 15:48:16 +00:00
{
2008-06-15 13:35:48 +00:00
GeanyDocument * doc = document_get_current ( ) ;
2008-05-22 14:41:28 +00:00
GtkWidget * focusw = gtk_window_get_focus ( GTK_WINDOW ( main_widgets . window ) ) ;
2007-03-27 15:48:16 +00:00
2008-02-27 13:17:29 +00:00
/* keybinding only valid when scintilla widget has focus */
2008-07-14 11:13:54 +00:00
if ( doc ! = NULL & & focusw = = GTK_WIDGET ( doc - > editor - > sci ) )
2007-03-27 15:48:16 +00:00
{
2008-07-14 11:13:54 +00:00
ScintillaObject * sci = doc - > editor - > sci ;
2007-03-27 15:48:16 +00:00
gint pos = sci_get_current_position ( sci ) ;
2007-11-12 09:27:43 +00:00
if ( editor_prefs . complete_snippets )
2008-09-25 18:28:37 +00:00
return editor_complete_snippet ( doc - > editor , pos ) ;
2007-03-27 15:48:16 +00:00
}
}
return FALSE ;
}
2007-11-29 18:21:12 +00:00
# ifdef HAVE_VTE
2008-07-03 17:04:12 +00:00
static gboolean on_menu_expose_event ( GtkWidget * widget , GdkEventExpose * event ,
gpointer user_data )
{
if ( ! GTK_WIDGET_SENSITIVE ( widget ) )
gtk_widget_set_sensitive ( GTK_WIDGET ( widget ) , TRUE ) ;
return FALSE ;
}
2007-09-26 16:22:20 +00:00
static gboolean set_sensitive ( gpointer widget )
{
gtk_widget_set_sensitive ( GTK_WIDGET ( widget ) , TRUE ) ;
return FALSE ;
}
2007-11-08 16:58:20 +00:00
static gboolean check_vte ( GdkModifierType state , guint keyval )
2007-09-26 16:22:20 +00:00
{
2007-11-06 16:59:01 +00:00
guint i ;
2007-09-28 10:54:56 +00:00
GtkWidget * widget ;
2007-09-26 16:22:20 +00:00
2007-10-02 16:20:44 +00:00
if ( ! vc - > enable_bash_keys )
2007-09-26 16:22:20 +00:00
return FALSE ;
2008-05-22 14:41:28 +00:00
if ( gtk_window_get_focus ( GTK_WINDOW ( main_widgets . window ) ) ! = vc - > vte )
2007-09-26 16:22:20 +00:00
return FALSE ;
2008-02-27 13:17:29 +00:00
/* prevent menubar flickering: */
2007-12-18 13:35:51 +00:00
if ( state = = GDK_SHIFT_MASK & & ( keyval > = GDK_a & & keyval < = GDK_z ) )
return FALSE ;
2008-02-27 13:17:29 +00:00
if ( state = = 0 & & ( keyval < GDK_F1 | | keyval > GDK_F35 ) ) /* e.g. backspace */
2007-12-18 13:35:51 +00:00
return FALSE ;
2007-09-26 16:22:20 +00:00
2008-02-27 13:17:29 +00:00
/* make focus commands override any bash commands */
2008-03-03 17:28:15 +00:00
for ( i = 0 ; i < GEANY_KEYS_FOCUS_COUNT ; i + + )
2007-09-26 16:22:20 +00:00
{
2008-08-08 18:05:53 +00:00
GeanyKeyBinding * kb = keybindings_lookup_item ( GEANY_KEY_GROUP_FOCUS , i ) ;
2008-03-03 17:28:15 +00:00
if ( state = = kb - > mods & & keyval = = kb - > key )
2007-09-26 16:22:20 +00:00
return FALSE ;
}
2007-09-28 10:54:56 +00:00
/* Temporarily disable the menus to prevent conflicting menu accelerators
* from overriding the VTE bash shortcuts .
2008-07-03 17:04:12 +00:00
* Note : maybe there ' s a better way of doing this ; - ) */
2008-12-18 21:21:53 +00:00
widget = ui_lookup_widget ( main_widgets . window , " menubar1 " ) ;
2007-09-28 10:54:56 +00:00
gtk_widget_set_sensitive ( widget , FALSE ) ;
2008-07-03 17:04:12 +00:00
{
/* make the menubar sensitive before it is redrawn */
static gboolean connected = FALSE ;
if ( ! connected )
g_signal_connect ( widget , " expose-event " , G_CALLBACK ( on_menu_expose_event ) , NULL ) ;
}
2008-05-22 14:41:28 +00:00
widget = main_widgets . editor_menu ;
2007-09-28 10:54:56 +00:00
gtk_widget_set_sensitive ( widget , FALSE ) ;
2008-07-03 17:04:12 +00:00
g_idle_add ( set_sensitive , widget ) ;
2007-09-26 16:22:20 +00:00
return TRUE ;
}
2007-10-02 16:20:44 +00:00
# endif
2007-09-26 16:22:20 +00:00
2008-03-27 17:16:53 +00:00
static void check_disk_status ( void )
{
2008-06-15 13:35:48 +00:00
GeanyDocument * doc = document_get_current ( ) ;
2008-03-27 17:16:53 +00:00
2008-06-15 13:35:48 +00:00
if ( doc ! = NULL )
2008-03-27 17:16:53 +00:00
{
2008-06-15 13:35:48 +00:00
document_check_disk_status ( doc , FALSE ) ;
2008-03-27 17:16:53 +00:00
}
}
2006-05-19 17:18:06 +00:00
/* central keypress event handler, almost all keypress events go to this function */
2008-02-12 15:49:54 +00:00
gboolean keybindings_got_event ( GtkWidget * widget , GdkEventKey * ev , gpointer user_data )
2006-05-19 17:18:06 +00:00
{
2008-02-29 19:30:28 +00:00
guint state , keyval ;
gsize g , i ;
2006-05-19 17:18:06 +00:00
2008-02-13 16:08:47 +00:00
if ( ev - > keyval = = 0 )
2007-08-28 10:50:18 +00:00
return FALSE ;
2008-03-27 17:16:53 +00:00
check_disk_status ( ) ;
2008-02-12 15:49:54 +00:00
keyval = ev - > keyval ;
state = ev - > state & GEANY_KEYS_MODIFIER_MASK ;
2008-02-27 13:17:29 +00:00
/* hack to get around that CTRL+Shift+r results in GDK_R not GDK_r */
2008-02-27 14:21:34 +00:00
if ( ( ev - > state & GDK_SHIFT_MASK ) | | ( ev - > state & GDK_LOCK_MASK ) )
2007-08-30 14:07:49 +00:00
if ( keyval > = GDK_A & & keyval < = GDK_Z )
keyval + = GDK_a - GDK_A ;
2007-03-24 16:10:20 +00:00
2008-02-27 14:21:34 +00:00
/*geany_debug("%d (%d) %d (%d)", keyval, ev->keyval, state, ev->state);*/
2008-02-27 13:17:29 +00:00
/* special cases */
2007-10-02 16:20:44 +00:00
# ifdef HAVE_VTE
2008-02-12 15:49:54 +00:00
if ( vte_info . have_vte & & check_vte ( state , keyval ) )
2007-09-26 16:22:20 +00:00
return FALSE ;
2007-10-02 16:20:44 +00:00
# endif
2008-02-12 15:49:54 +00:00
if ( check_snippet_completion ( keyval , state ) )
2007-08-28 10:50:18 +00:00
return TRUE ;
2006-11-23 12:23:36 +00:00
2008-07-02 11:58:01 +00:00
ignore_keybinding = FALSE ;
2008-02-29 19:30:28 +00:00
for ( g = 0 ; g < keybinding_groups - > len ; g + + )
2006-05-19 17:18:06 +00:00
{
2008-08-08 18:05:53 +00:00
GeanyKeyGroup * group = g_ptr_array_index ( keybinding_groups , g ) ;
2008-02-29 19:30:28 +00:00
for ( i = 0 ; i < group - > count ; i + + )
2006-05-19 17:18:06 +00:00
{
2008-08-08 18:05:53 +00:00
GeanyKeyBinding * kb = & group - > keys [ i ] ;
2007-03-27 15:48:16 +00:00
2008-02-29 19:30:28 +00:00
if ( keyval = = kb - > key & & state = = kb - > mods )
{
2008-03-10 13:23:57 +00:00
if ( kb - > callback = = NULL )
2008-02-29 19:30:28 +00:00
return FALSE ; /* ignore the keybinding */
/* call the corresponding callback function for this shortcut */
2008-03-10 13:23:57 +00:00
kb - > callback ( i ) ;
2008-07-02 11:58:01 +00:00
return ! ignore_keybinding ;
2008-02-29 19:30:28 +00:00
}
2006-05-19 17:18:06 +00:00
}
}
2008-02-29 19:30:28 +00:00
/* fixed keybindings can be overridden by user bindings, so check them last */
2008-02-12 15:49:54 +00:00
if ( check_fixed_kb ( keyval , state ) )
2007-09-07 12:34:57 +00:00
return TRUE ;
2006-05-19 17:18:06 +00:00
return FALSE ;
}
2008-08-08 18:05:53 +00:00
GeanyKeyBinding * keybindings_lookup_item ( guint group_id , guint key_id )
2006-05-19 17:18:06 +00:00
{
2008-08-08 18:05:53 +00:00
GeanyKeyGroup * group ;
2008-02-29 19:30:28 +00:00
2008-03-07 17:24:36 +00:00
g_return_val_if_fail ( group_id < keybinding_groups - > len , NULL ) ;
2006-05-19 17:18:06 +00:00
2008-02-29 19:30:28 +00:00
group = g_ptr_array_index ( keybinding_groups , group_id ) ;
2006-05-19 17:18:06 +00:00
2008-03-07 17:24:36 +00:00
g_return_val_if_fail ( group , NULL ) ;
2008-03-10 13:23:57 +00:00
g_return_val_if_fail ( key_id < group - > count , NULL ) ;
2006-05-19 17:18:06 +00:00
2008-03-10 13:23:57 +00:00
return & group - > keys [ key_id ] ;
2006-05-19 17:18:06 +00:00
}
2008-03-07 17:24:36 +00:00
/** Mimic a (built-in only) keybinding action.
2008-03-12 13:37:39 +00:00
* Example : @ code keybindings_send_command ( GEANY_KEY_GROUP_FILE , GEANY_KEYS_FILE_OPEN ) ; @ endcode
2008-03-10 13:23:57 +00:00
* @ param group_id The index for the key group that contains the @ a key_id keybinding .
* @ param key_id The keybinding command index . */
2008-03-10 13:29:35 +00:00
void keybindings_send_command ( guint group_id , guint key_id )
2007-07-18 15:35:52 +00:00
{
2008-08-08 18:05:53 +00:00
GeanyKeyBinding * kb ;
2008-03-07 17:24:36 +00:00
2008-03-12 13:37:39 +00:00
g_return_if_fail ( group_id < GEANY_KEY_GROUP_COUNT ) ; /* can't use this for plugin groups */
2008-02-29 19:30:28 +00:00
2008-03-10 13:23:57 +00:00
kb = keybindings_lookup_item ( group_id , key_id ) ;
2008-02-29 19:30:28 +00:00
if ( kb )
2008-03-10 13:23:57 +00:00
kb - > callback ( key_id ) ;
2007-07-18 15:35:52 +00:00
}
2007-05-03 15:38:02 +00:00
/* These are the callback functions, either each group or each shortcut has it's
* own function . */
static void cb_func_file_action ( guint key_id )
{
switch ( key_id )
{
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FILE_NEW :
2007-09-03 16:09:53 +00:00
document_new_file ( NULL , NULL , NULL ) ;
2007-05-03 16:13:30 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FILE_OPEN :
2007-05-03 16:13:30 +00:00
on_open1_activate ( NULL , NULL ) ;
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FILE_OPENSELECTED :
2007-05-03 16:13:30 +00:00
on_menu_open_selected_file1_activate ( NULL , NULL ) ;
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FILE_SAVE :
2007-05-03 16:13:30 +00:00
on_save1_activate ( NULL , NULL ) ;
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FILE_SAVEAS :
2007-05-03 16:13:30 +00:00
on_save_as1_activate ( NULL , NULL ) ;
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FILE_SAVEALL :
2007-05-03 16:13:30 +00:00
on_save_all1_activate ( NULL , NULL ) ;
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FILE_CLOSE :
2007-05-03 16:13:30 +00:00
on_close1_activate ( NULL , NULL ) ;
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FILE_CLOSEALL :
2007-05-03 16:13:30 +00:00
on_close_all1_activate ( NULL , NULL ) ;
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FILE_RELOAD :
2008-09-08 14:22:39 +00:00
on_toolbutton_reload_clicked ( NULL , NULL ) ;
2007-05-03 16:13:30 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FILE_PRINT :
on_print1_activate ( NULL , NULL ) ;
2007-05-03 15:38:02 +00:00
break ;
}
}
2008-03-12 13:37:39 +00:00
static void cb_func_project_action ( guint key_id )
2006-05-19 17:18:06 +00:00
{
2008-03-12 13:37:39 +00:00
switch ( key_id )
{
case GEANY_KEYS_PROJECT_PROPERTIES :
if ( app - > project )
on_project_properties1_activate ( NULL , NULL ) ;
break ;
}
2006-05-19 17:18:06 +00:00
}
2006-07-01 14:12:05 +00:00
2006-10-26 15:22:27 +00:00
static void cb_func_menu_preferences ( G_GNUC_UNUSED guint key_id )
2006-05-24 13:18:42 +00:00
{
2006-08-11 21:12:49 +00:00
on_preferences1_activate ( NULL , NULL ) ;
2006-05-24 13:18:42 +00:00
}
2007-07-04 14:41:58 +00:00
static void cb_func_menu_help ( G_GNUC_UNUSED guint key_id )
{
on_help1_activate ( NULL , NULL ) ;
}
2008-03-12 13:37:39 +00:00
static void cb_func_search_action ( guint key_id )
2006-12-09 17:03:03 +00:00
{
2007-09-13 16:40:19 +00:00
switch ( key_id )
{
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_SEARCH_FIND :
2007-09-13 16:40:19 +00:00
on_find1_activate ( NULL , NULL ) ; break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_SEARCH_FINDNEXT :
2007-09-13 16:40:19 +00:00
on_find_next1_activate ( NULL , NULL ) ; break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_SEARCH_FINDPREVIOUS :
2007-09-13 16:40:19 +00:00
on_find_previous1_activate ( NULL , NULL ) ; break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_SEARCH_FINDPREVSEL :
2007-09-13 16:40:19 +00:00
on_find_prevsel1_activate ( NULL , NULL ) ; break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_SEARCH_FINDNEXTSEL :
2007-09-13 16:40:19 +00:00
on_find_nextsel1_activate ( NULL , NULL ) ; break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_SEARCH_REPLACE :
2007-09-13 16:40:19 +00:00
on_replace1_activate ( NULL , NULL ) ; break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_SEARCH_FINDINFILES :
2007-09-13 16:40:19 +00:00
on_find_in_files1_activate ( NULL , NULL ) ; break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_SEARCH_NEXTMESSAGE :
2007-09-13 16:40:19 +00:00
on_next_message1_activate ( NULL , NULL ) ; break ;
2008-06-26 16:39:41 +00:00
case GEANY_KEYS_SEARCH_PREVIOUSMESSAGE :
on_previous_message1_activate ( NULL , NULL ) ; break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_SEARCH_FINDUSAGE :
2008-12-19 17:15:52 +00:00
read_current_word ( ) ;
on_find_usage1_activate ( NULL , NULL ) ;
2008-03-12 13:37:39 +00:00
break ;
2008-07-17 16:42:03 +00:00
case GEANY_KEYS_SEARCH_FINDDOCUMENTUSAGE :
2008-12-19 17:15:52 +00:00
read_current_word ( ) ;
on_find_document_usage1_activate ( NULL , NULL ) ;
2008-07-17 16:42:03 +00:00
break ;
2007-09-13 16:40:19 +00:00
}
2006-05-19 17:18:06 +00:00
}
2006-10-26 15:22:27 +00:00
static void cb_func_menu_opencolorchooser ( G_GNUC_UNUSED guint key_id )
2006-05-19 17:18:06 +00:00
{
2006-07-27 20:57:13 +00:00
on_show_color_chooser1_activate ( NULL , NULL ) ;
2006-05-19 17:18:06 +00:00
}
2006-10-26 15:22:27 +00:00
static void cb_func_menu_fullscreen ( G_GNUC_UNUSED guint key_id )
2006-05-19 17:18:06 +00:00
{
2008-12-18 21:21:53 +00:00
GtkCheckMenuItem * c = GTK_CHECK_MENU_ITEM ( ui_lookup_widget ( main_widgets . window , " menu_fullscreen1 " ) ) ;
2006-05-19 17:18:06 +00:00
gtk_check_menu_item_set_active ( c , ! gtk_check_menu_item_get_active ( c ) ) ;
}
2006-10-26 15:22:27 +00:00
static void cb_func_menu_messagewindow ( G_GNUC_UNUSED guint key_id )
2006-05-21 14:02:55 +00:00
{
2008-12-18 21:21:53 +00:00
GtkCheckMenuItem * c = GTK_CHECK_MENU_ITEM ( ui_lookup_widget ( main_widgets . window , " menu_show_messages_window1 " ) ) ;
2006-05-21 14:02:55 +00:00
gtk_check_menu_item_set_active ( c , ! gtk_check_menu_item_get_active ( c ) ) ;
}
2006-10-26 15:22:27 +00:00
static void cb_func_menu_zoomin ( G_GNUC_UNUSED guint key_id )
2006-05-19 17:18:06 +00:00
{
on_zoom_in1_activate ( NULL , NULL ) ;
}
2006-10-26 15:22:27 +00:00
static void cb_func_menu_zoomout ( G_GNUC_UNUSED guint key_id )
2006-05-19 17:18:06 +00:00
{
on_zoom_out1_activate ( NULL , NULL ) ;
}
2006-11-29 10:29:34 +00:00
static void cb_func_build_action ( guint key_id )
2006-05-19 17:18:06 +00:00
{
2006-11-29 10:29:34 +00:00
GtkWidget * item ;
2008-05-16 14:17:54 +00:00
GeanyFiletype * ft ;
2006-11-30 15:42:52 +00:00
BuildMenuItems * menu_items ;
2006-05-19 17:18:06 +00:00
2008-06-15 13:35:48 +00:00
GeanyDocument * doc = document_get_current ( ) ;
if ( doc = = NULL )
return ;
2006-05-19 17:18:06 +00:00
2008-06-15 13:35:48 +00:00
ft = doc - > file_type ;
2006-11-30 15:42:52 +00:00
if ( ! ft ) return ;
2006-12-08 15:50:10 +00:00
menu_items = build_get_menu_items ( ft - > id ) ;
2006-05-19 17:18:06 +00:00
2006-11-29 10:29:34 +00:00
switch ( key_id )
{
case GEANY_KEYS_BUILD_COMPILE :
2007-05-05 16:35:59 +00:00
item = menu_items - > item_compile ;
break ;
2006-11-29 10:29:34 +00:00
case GEANY_KEYS_BUILD_LINK :
2007-05-05 16:35:59 +00:00
item = menu_items - > item_link ;
break ;
2006-11-29 10:29:34 +00:00
case GEANY_KEYS_BUILD_MAKE :
2007-05-05 16:35:59 +00:00
item = menu_items - > item_make_all ;
break ;
2006-11-29 10:29:34 +00:00
case GEANY_KEYS_BUILD_MAKEOWNTARGET :
2007-05-05 16:35:59 +00:00
item = menu_items - > item_make_custom ;
break ;
2006-11-29 10:29:34 +00:00
case GEANY_KEYS_BUILD_MAKEOBJECT :
2007-05-05 16:35:59 +00:00
item = menu_items - > item_make_object ;
break ;
2006-12-09 17:03:03 +00:00
case GEANY_KEYS_BUILD_NEXTERROR :
2007-05-05 16:35:59 +00:00
item = menu_items - > item_next_error ;
break ;
2008-06-26 16:39:41 +00:00
case GEANY_KEYS_BUILD_PREVIOUSERROR :
item = menu_items - > item_previous_error ;
break ;
2006-11-29 10:29:34 +00:00
case GEANY_KEYS_BUILD_RUN :
2007-05-05 16:35:59 +00:00
item = menu_items - > item_exec ;
break ;
2006-11-29 10:29:34 +00:00
case GEANY_KEYS_BUILD_RUN2 :
2007-05-05 16:35:59 +00:00
item = menu_items - > item_exec2 ;
break ;
2006-11-30 15:42:52 +00:00
case GEANY_KEYS_BUILD_OPTIONS :
2007-05-05 16:35:59 +00:00
item = menu_items - > item_set_args ;
break ;
2006-11-29 10:29:34 +00:00
default :
2007-05-05 16:35:59 +00:00
item = NULL ;
2006-11-29 10:29:34 +00:00
}
2008-01-10 13:41:58 +00:00
/* Note: For Build menu items it's OK (at the moment) to assume they are in the correct
* sensitive state , but some other menus don ' t update the sensitive status until
* they are redrawn . */
2006-11-29 10:29:34 +00:00
if ( item & & GTK_WIDGET_IS_SENSITIVE ( item ) )
gtk_menu_item_activate ( GTK_MENU_ITEM ( item ) ) ;
2006-05-19 17:18:06 +00:00
}
2008-12-19 17:15:52 +00:00
static gboolean read_current_word ( void )
2006-06-17 21:08:47 +00:00
{
2006-06-18 17:14:32 +00:00
gint pos ;
2008-06-15 13:35:48 +00:00
GeanyDocument * doc = document_get_current ( ) ;
2006-06-17 21:08:47 +00:00
2008-06-15 13:35:48 +00:00
if ( doc = = NULL )
2008-03-12 13:37:39 +00:00
return FALSE ;
2006-06-29 17:14:52 +00:00
2008-07-14 11:13:54 +00:00
pos = sci_get_current_position ( doc - > editor - > sci ) ;
2006-06-18 17:14:32 +00:00
2008-09-25 18:28:37 +00:00
editor_find_current_word ( doc - > editor , pos ,
2007-01-24 19:20:12 +00:00
editor_info . current_word , GEANY_MAX_WORD_LENGTH , NULL ) ;
2006-06-17 21:08:47 +00:00
2008-12-19 17:15:52 +00:00
return ( * editor_info . current_word ! = 0 ) ;
}
static gboolean check_current_word ( void )
{
if ( ! read_current_word ( ) )
2008-03-12 13:37:39 +00:00
{
2006-06-17 21:08:47 +00:00
utils_beep ( ) ;
2008-03-12 13:37:39 +00:00
return FALSE ;
}
return TRUE ;
2006-06-17 21:08:47 +00:00
}
2006-05-19 17:18:06 +00:00
2008-07-04 13:54:59 +00:00
static void focus_sidebar ( void )
2008-03-23 16:32:36 +00:00
{
if ( ui_prefs . sidebar_visible )
{
2008-05-22 14:41:28 +00:00
gint page_num = gtk_notebook_get_current_page ( GTK_NOTEBOOK ( main_widgets . sidebar_notebook ) ) ;
GtkWidget * page = gtk_notebook_get_nth_page ( GTK_NOTEBOOK ( main_widgets . sidebar_notebook ) , page_num ) ;
2008-03-23 16:32:36 +00:00
2008-05-19 14:33:50 +00:00
/* gtk_widget_grab_focus() won't work because of the scrolled window containers */
gtk_widget_child_focus ( page , GTK_DIR_TAB_FORWARD ) ;
2008-03-23 16:32:36 +00:00
}
}
2008-07-04 13:54:59 +00:00
static void cb_func_switch_action ( guint key_id )
2006-05-19 17:18:06 +00:00
{
2008-07-04 13:54:59 +00:00
switch ( key_id )
{
case GEANY_KEYS_FOCUS_EDITOR :
{
GeanyDocument * doc = document_get_current ( ) ;
if ( doc ! = NULL )
2008-07-14 11:13:54 +00:00
gtk_widget_grab_focus ( GTK_WIDGET ( doc - > editor - > sci ) ) ;
2008-07-04 13:54:59 +00:00
break ;
}
case GEANY_KEYS_FOCUS_SCRIBBLE :
msgwin_switch_tab ( MSG_SCRATCH , TRUE ) ;
break ;
case GEANY_KEYS_FOCUS_SEARCHBAR :
2008-12-06 11:10:06 +00:00
if ( toolbar_prefs . visible )
{
GtkWidget * search_entry = toolbar_get_widget_child_by_name ( " SearchEntry " ) ;
if ( search_entry ! = NULL )
gtk_widget_grab_focus ( search_entry ) ;
}
2008-07-04 13:54:59 +00:00
break ;
case GEANY_KEYS_FOCUS_SIDEBAR :
focus_sidebar ( ) ;
break ;
case GEANY_KEYS_FOCUS_VTE :
msgwin_switch_tab ( MSG_VTE , TRUE ) ;
break ;
case GEANY_KEYS_FOCUS_COMPILER :
msgwin_switch_tab ( MSG_COMPILER , TRUE ) ;
break ;
}
2006-05-19 17:18:06 +00:00
}
2008-05-22 14:41:28 +00:00
static void switch_document ( gint direction )
{
gint page_count = gtk_notebook_get_n_pages ( GTK_NOTEBOOK ( main_widgets . notebook ) ) ;
gint cur_page = gtk_notebook_get_current_page ( GTK_NOTEBOOK ( main_widgets . notebook ) ) ;
if ( direction = = LEFT )
{
if ( cur_page > 0 )
gtk_notebook_set_current_page ( GTK_NOTEBOOK ( main_widgets . notebook ) , cur_page - 1 ) ;
else
gtk_notebook_set_current_page ( GTK_NOTEBOOK ( main_widgets . notebook ) , page_count - 1 ) ;
}
else if ( direction = = RIGHT )
{
if ( cur_page < page_count - 1 )
gtk_notebook_set_current_page ( GTK_NOTEBOOK ( main_widgets . notebook ) , cur_page + 1 ) ;
else
gtk_notebook_set_current_page ( GTK_NOTEBOOK ( main_widgets . notebook ) , 0 ) ;
}
}
2006-10-26 15:22:27 +00:00
static void cb_func_switch_tableft ( G_GNUC_UNUSED guint key_id )
2006-05-19 17:18:06 +00:00
{
2008-05-22 14:41:28 +00:00
switch_document ( LEFT ) ;
2006-05-19 17:18:06 +00:00
}
2006-10-26 15:22:27 +00:00
static void cb_func_switch_tabright ( G_GNUC_UNUSED guint key_id )
2006-05-19 17:18:06 +00:00
{
2008-05-22 14:41:28 +00:00
switch_document ( RIGHT ) ;
2006-05-19 17:18:06 +00:00
}
2007-03-13 17:00:12 +00:00
static void cb_func_switch_tablastused ( G_GNUC_UNUSED guint key_id )
{
2008-06-15 13:35:48 +00:00
GeanyDocument * last_doc = callbacks_data . last_doc ;
2007-03-13 17:00:12 +00:00
2008-06-15 13:35:48 +00:00
if ( DOC_VALID ( last_doc ) )
2008-05-22 14:41:28 +00:00
gtk_notebook_set_current_page ( GTK_NOTEBOOK ( main_widgets . notebook ) ,
2008-06-15 13:35:48 +00:00
document_get_notebook_page ( last_doc ) ) ;
2007-03-13 17:00:12 +00:00
}
2008-02-27 13:17:29 +00:00
/* move document left/right/first/last */
2007-09-07 12:34:57 +00:00
static void cb_func_move_tab ( guint key_id )
{
2008-06-15 13:35:48 +00:00
GtkWidget * sci ;
2008-05-22 14:41:28 +00:00
GtkNotebook * nb = GTK_NOTEBOOK ( main_widgets . notebook ) ;
2007-09-07 12:34:57 +00:00
gint cur_page = gtk_notebook_get_current_page ( nb ) ;
2008-06-15 13:35:48 +00:00
GeanyDocument * doc = document_get_current ( ) ;
2007-09-07 12:34:57 +00:00
2008-06-15 13:35:48 +00:00
if ( doc = = NULL )
2007-09-07 12:34:57 +00:00
return ;
2008-07-14 11:13:54 +00:00
sci = GTK_WIDGET ( doc - > editor - > sci ) ;
2008-06-15 13:35:48 +00:00
2008-03-12 13:37:39 +00:00
switch ( key_id )
2007-09-07 12:34:57 +00:00
{
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_NOTEBOOK_MOVETABLEFT :
gtk_notebook_reorder_child ( nb , sci , cur_page - 1 ) ; /* notebook wraps around by default */
break ;
case GEANY_KEYS_NOTEBOOK_MOVETABRIGHT :
{
gint npage = cur_page + 1 ;
2007-09-07 12:34:57 +00:00
2008-03-12 13:37:39 +00:00
if ( npage = = gtk_notebook_get_n_pages ( nb ) )
npage = 0 ; /* wraparound */
gtk_notebook_reorder_child ( nb , sci , npage ) ;
break ;
}
case GEANY_KEYS_NOTEBOOK_MOVETABFIRST :
2008-05-16 12:08:39 +00:00
gtk_notebook_reorder_child ( nb , sci , ( file_prefs . tab_order_ltr ) ? 0 : - 1 ) ;
2008-03-12 13:37:39 +00:00
break ;
case GEANY_KEYS_NOTEBOOK_MOVETABLAST :
2008-05-16 12:08:39 +00:00
gtk_notebook_reorder_child ( nb , sci , ( file_prefs . tab_order_ltr ) ? - 1 : 0 ) ;
2008-03-12 13:37:39 +00:00
break ;
2007-12-16 16:54:47 +00:00
}
2007-09-07 12:34:57 +00:00
return ;
}
2006-10-26 15:22:27 +00:00
static void cb_func_toggle_sidebar ( G_GNUC_UNUSED guint key_id )
2006-05-21 14:02:55 +00:00
{
2007-05-06 14:49:51 +00:00
on_menu_show_sidebar1_toggled ( NULL , NULL ) ;
2006-05-21 14:02:55 +00:00
}
2006-08-01 10:35:32 +00:00
2007-05-06 14:49:51 +00:00
static void cb_func_menu_toggle_all ( G_GNUC_UNUSED guint key_id )
2007-05-04 16:59:00 +00:00
{
2007-05-06 14:49:51 +00:00
on_menu_toggle_all_additional_widgets1_activate ( NULL , NULL ) ;
2007-05-04 16:59:00 +00:00
}
2008-06-15 13:35:48 +00:00
static void goto_matching_brace ( GeanyDocument * doc )
2006-10-11 22:01:26 +00:00
{
gint pos , new_pos ;
2008-06-15 13:35:48 +00:00
if ( doc = = NULL )
return ;
2006-10-11 22:01:26 +00:00
2008-07-14 11:13:54 +00:00
pos = sci_get_current_position ( doc - > editor - > sci ) ;
if ( ! utils_isbrace ( sci_get_char_at ( doc - > editor - > sci , pos ) , TRUE ) )
2008-02-27 13:17:29 +00:00
pos - - ; /* set pos to the brace */
2006-10-11 22:01:26 +00:00
2008-09-17 18:02:55 +00:00
new_pos = sci_find_matching_brace ( doc - > editor - > sci , pos ) ;
2006-10-11 22:01:26 +00:00
if ( new_pos ! = - 1 )
2008-02-27 13:17:29 +00:00
{ /* set the cursor at the brace */
2008-07-14 11:13:54 +00:00
sci_set_current_position ( doc - > editor - > sci , new_pos , FALSE ) ;
2008-07-08 13:53:08 +00:00
editor_display_current_line ( doc - > editor , 0.5F ) ;
2006-10-11 22:01:26 +00:00
}
}
2006-10-26 15:22:27 +00:00
2007-12-25 14:00:18 +00:00
static void cb_func_clipboard ( guint key_id )
{
2008-06-15 13:35:48 +00:00
GeanyDocument * doc = document_get_current ( ) ;
2008-03-12 13:37:39 +00:00
2008-06-15 13:35:48 +00:00
if ( doc = = NULL )
return ;
2008-03-12 13:37:39 +00:00
2007-12-25 14:00:18 +00:00
switch ( key_id )
{
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_CLIPBOARD_CUT :
2008-01-10 13:27:26 +00:00
on_cut1_activate ( NULL , NULL ) ;
2007-12-25 14:00:18 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_CLIPBOARD_COPY :
2008-01-10 13:27:26 +00:00
on_copy1_activate ( NULL , NULL ) ;
2007-12-25 14:00:18 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_CLIPBOARD_PASTE :
2008-01-10 13:27:26 +00:00
on_paste1_activate ( NULL , NULL ) ;
2007-12-25 14:00:18 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_CLIPBOARD_COPYLINE :
2008-12-05 12:34:20 +00:00
sci_send_command ( doc - > editor - > sci , SCI_LINECOPY ) ;
2008-03-12 13:37:39 +00:00
break ;
case GEANY_KEYS_CLIPBOARD_CUTLINE :
2008-12-05 12:34:20 +00:00
sci_send_command ( doc - > editor - > sci , SCI_LINECUT ) ;
2008-03-12 13:37:39 +00:00
break ;
2007-12-25 14:00:18 +00:00
}
}
2008-03-12 13:37:39 +00:00
/* Common function for goto keybindings, useful even when sci doesn't have focus. */
static void cb_func_goto_action ( guint key_id )
2007-05-05 16:35:59 +00:00
{
gint cur_line ;
2008-06-15 13:35:48 +00:00
GeanyDocument * doc = document_get_current ( ) ;
2007-05-05 16:35:59 +00:00
2008-06-15 13:35:48 +00:00
if ( doc = = NULL )
return ;
2007-05-05 16:35:59 +00:00
2008-07-14 11:13:54 +00:00
cur_line = sci_get_current_line ( doc - > editor - > sci ) ;
2007-05-05 16:35:59 +00:00
switch ( key_id )
{
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_GOTO_BACK :
navqueue_go_back ( ) ;
2008-07-02 11:58:01 +00:00
return ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_GOTO_FORWARD :
navqueue_go_forward ( ) ;
2008-07-02 11:58:01 +00:00
return ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_GOTO_LINE :
2008-12-06 17:48:36 +00:00
on_go_to_line_activate ( NULL , NULL ) ;
2008-07-02 11:58:01 +00:00
return ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_GOTO_MATCHINGBRACE :
2008-06-15 13:35:48 +00:00
goto_matching_brace ( doc ) ;
2008-07-02 11:58:01 +00:00
return ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_GOTO_TOGGLEMARKER :
2007-05-05 16:35:59 +00:00
{
2008-07-14 11:13:54 +00:00
gboolean set = sci_is_marker_set_at_line ( doc - > editor - > sci , cur_line , 1 ) ;
2007-05-05 16:35:59 +00:00
2008-07-14 11:13:54 +00:00
sci_set_marker_at_line ( doc - > editor - > sci , cur_line , ! set , 1 ) ;
2008-07-02 11:58:01 +00:00
return ;
2007-05-05 16:35:59 +00:00
}
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_GOTO_NEXTMARKER :
2007-05-05 16:35:59 +00:00
{
2008-07-14 11:13:54 +00:00
gint mline = sci_marker_next ( doc - > editor - > sci , cur_line + 1 , 1 < < 1 , TRUE ) ;
2007-05-05 16:35:59 +00:00
if ( mline ! = - 1 )
{
2008-07-14 11:13:54 +00:00
sci_set_current_line ( doc - > editor - > sci , mline ) ;
2008-07-08 13:53:08 +00:00
editor_display_current_line ( doc - > editor , 0.5F ) ;
2007-05-05 16:35:59 +00:00
}
2008-07-02 11:58:01 +00:00
return ;
2007-05-05 16:35:59 +00:00
}
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_GOTO_PREVIOUSMARKER :
2007-05-05 16:35:59 +00:00
{
2008-07-14 11:13:54 +00:00
gint mline = sci_marker_previous ( doc - > editor - > sci , cur_line - 1 , 1 < < 1 , TRUE ) ;
2007-05-05 16:35:59 +00:00
if ( mline ! = - 1 )
{
2008-07-14 11:13:54 +00:00
sci_set_current_line ( doc - > editor - > sci , mline ) ;
2008-07-08 13:53:08 +00:00
editor_display_current_line ( doc - > editor , 0.5F ) ;
2007-05-05 16:35:59 +00:00
}
2008-07-02 11:58:01 +00:00
return ;
2007-05-05 16:35:59 +00:00
}
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_GOTO_TAGDEFINITION :
if ( check_current_word ( ) )
symbols_goto_tag ( editor_info . current_word , TRUE ) ;
2008-07-02 11:58:01 +00:00
return ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_GOTO_TAGDECLARATION :
if ( check_current_word ( ) )
symbols_goto_tag ( editor_info . current_word , FALSE ) ;
2008-07-02 11:58:01 +00:00
return ;
}
/* only check editor-sensitive keybindings when editor has focus */
2008-07-14 11:13:54 +00:00
if ( gtk_window_get_focus ( GTK_WINDOW ( main_widgets . window ) ) ! = GTK_WIDGET ( doc - > editor - > sci ) )
2008-07-02 11:58:01 +00:00
{
ignore_keybinding = TRUE ;
return ;
}
switch ( key_id )
{
2008-06-27 17:54:36 +00:00
case GEANY_KEYS_GOTO_LINESTART :
2008-12-05 12:34:20 +00:00
sci_send_command ( doc - > editor - > sci , editor_prefs . smart_home_key ? SCI_VCHOME : SCI_HOME ) ;
2008-06-27 17:54:36 +00:00
break ;
case GEANY_KEYS_GOTO_LINEEND :
2008-12-05 12:34:20 +00:00
sci_send_command ( doc - > editor - > sci , SCI_LINEEND ) ;
2008-06-27 17:54:36 +00:00
break ;
2008-09-26 18:29:42 +00:00
case GEANY_KEYS_GOTO_PREVWORDSTART :
2008-12-05 12:34:20 +00:00
sci_send_command ( doc - > editor - > sci , SCI_WORDPARTLEFT ) ;
2008-09-26 18:29:42 +00:00
break ;
case GEANY_KEYS_GOTO_NEXTWORDSTART :
2008-12-05 12:34:20 +00:00
sci_send_command ( doc - > editor - > sci , SCI_WORDPARTRIGHT ) ;
2008-09-26 18:29:42 +00:00
break ;
2007-05-05 16:35:59 +00:00
}
}
2008-09-25 18:28:37 +00:00
static void duplicate_lines ( GeanyEditor * editor )
2007-09-21 16:39:21 +00:00
{
2008-09-25 18:28:37 +00:00
if ( sci_get_lines_selected ( editor - > sci ) > 1 )
2008-02-27 13:17:29 +00:00
{ /* ignore extra_line because of selecting lines from the line number column */
2008-09-25 18:28:37 +00:00
editor_select_lines ( editor , FALSE ) ;
sci_selection_duplicate ( editor - > sci ) ;
2007-09-21 16:39:21 +00:00
}
2008-09-25 18:28:37 +00:00
else if ( sci_has_selection ( editor - > sci ) )
sci_selection_duplicate ( editor - > sci ) ;
2007-09-21 16:39:21 +00:00
else
2008-09-25 18:28:37 +00:00
sci_line_duplicate ( editor - > sci ) ;
2007-09-21 16:39:21 +00:00
}
2008-09-25 18:28:37 +00:00
static void delete_lines ( GeanyEditor * editor )
2007-09-22 11:11:24 +00:00
{
2008-09-25 18:28:37 +00:00
editor_select_lines ( editor , TRUE ) ; /* include last line (like cut lines, copy lines do) */
sci_clear ( editor - > sci ) ; /* (SCI_LINEDELETE only does 1 line) */
2007-09-22 11:11:24 +00:00
}
2008-03-12 13:37:39 +00:00
/* common function for editor keybindings, only valid when scintilla has focus. */
static void cb_func_editor_action ( guint key_id )
2006-09-12 08:32:52 +00:00
{
2008-06-15 13:35:48 +00:00
GeanyDocument * doc = document_get_current ( ) ;
2008-05-22 14:41:28 +00:00
GtkWidget * focusw = gtk_window_get_focus ( GTK_WINDOW ( main_widgets . window ) ) ;
2006-10-26 15:22:27 +00:00
2008-02-27 13:17:29 +00:00
/* edit keybindings only valid when scintilla widget has focus */
2008-07-14 11:13:54 +00:00
if ( doc = = NULL | | focusw ! = GTK_WIDGET ( doc - > editor - > sci ) )
2008-06-15 13:35:48 +00:00
return ;
2006-10-26 15:22:27 +00:00
switch ( key_id )
{
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_EDITOR_UNDO :
on_undo1_activate ( NULL , NULL ) ;
break ;
case GEANY_KEYS_EDITOR_REDO :
on_redo1_activate ( NULL , NULL ) ;
break ;
case GEANY_KEYS_EDITOR_SCROLLTOLINE :
2008-09-25 18:28:37 +00:00
editor_scroll_to_line ( doc - > editor , - 1 , 0.5F ) ;
2007-07-17 16:27:49 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_EDITOR_SCROLLLINEUP :
2008-12-05 12:34:20 +00:00
sci_send_command ( doc - > editor - > sci , SCI_LINESCROLLUP ) ;
2007-09-05 18:55:51 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_EDITOR_SCROLLLINEDOWN :
2008-12-05 12:34:20 +00:00
sci_send_command ( doc - > editor - > sci , SCI_LINESCROLLDOWN ) ;
2007-09-05 18:55:51 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_EDITOR_DUPLICATELINE :
2008-09-25 18:28:37 +00:00
duplicate_lines ( doc - > editor ) ;
2006-10-26 15:22:27 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_EDITOR_DELETELINE :
2008-09-25 18:28:37 +00:00
delete_lines ( doc - > editor ) ;
2007-08-10 11:29:37 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_EDITOR_TRANSPOSELINE :
2008-12-05 12:34:20 +00:00
sci_send_command ( doc - > editor - > sci , SCI_LINETRANSPOSE ) ;
2007-07-07 15:12:13 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_EDITOR_AUTOCOMPLETE :
2008-09-25 18:28:37 +00:00
editor_start_auto_complete ( doc - > editor , sci_get_current_position ( doc - > editor - > sci ) , TRUE ) ;
2006-10-26 15:22:27 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_EDITOR_CALLTIP :
2008-09-25 18:28:37 +00:00
editor_show_calltip ( doc - > editor , - 1 ) ;
2006-10-26 15:22:27 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_EDITOR_MACROLIST :
2008-09-25 18:28:37 +00:00
editor_show_macro_list ( doc - > editor ) ;
2006-10-26 15:22:27 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_EDITOR_CONTEXTACTION :
if ( check_current_word ( ) )
2008-12-18 21:21:53 +00:00
on_context_action1_activate ( GTK_MENU_ITEM ( ui_lookup_widget ( main_widgets . editor_menu ,
2008-03-12 13:37:39 +00:00
" context_action1 " ) ) , NULL ) ;
2007-03-22 15:51:39 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_EDITOR_SUPPRESSSNIPPETCOMPLETION :
{
2008-08-08 18:05:53 +00:00
GeanyKeyBinding * kb = keybindings_lookup_item ( GEANY_KEY_GROUP_EDITOR ,
2008-03-12 13:37:39 +00:00
GEANY_KEYS_EDITOR_COMPLETESNIPPET ) ;
2007-03-27 15:48:16 +00:00
2008-03-12 13:37:39 +00:00
switch ( kb - > key )
2007-03-27 15:48:16 +00:00
{
case GDK_space :
2008-07-14 11:13:54 +00:00
sci_add_text ( doc - > editor - > sci , " " ) ;
2007-03-27 15:48:16 +00:00
break ;
case GDK_Tab :
2008-12-05 12:34:20 +00:00
sci_send_command ( doc - > editor - > sci , SCI_TAB ) ;
2007-03-27 15:48:16 +00:00
break ;
default :
break ;
}
2006-10-26 15:22:27 +00:00
break ;
2008-03-12 13:37:39 +00:00
}
}
}
2007-03-27 15:48:16 +00:00
2008-03-12 13:37:39 +00:00
/* common function for format keybindings, only valid when scintilla has focus. */
static void cb_func_format_action ( guint key_id )
{
2008-06-15 13:35:48 +00:00
GeanyDocument * doc = document_get_current ( ) ;
2008-05-22 14:41:28 +00:00
GtkWidget * focusw = gtk_window_get_focus ( GTK_WINDOW ( main_widgets . window ) ) ;
2008-03-12 13:37:39 +00:00
/* keybindings only valid when scintilla widget has focus */
2008-07-14 11:13:54 +00:00
if ( doc = = NULL | | focusw ! = GTK_WIDGET ( doc - > editor - > sci ) )
2008-06-15 13:35:48 +00:00
return ;
2008-03-12 13:37:39 +00:00
switch ( key_id )
{
case GEANY_KEYS_FORMAT_COMMENTLINETOGGLE :
on_menu_toggle_line_commentation1_activate ( NULL , NULL ) ;
2007-07-07 15:12:13 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FORMAT_COMMENTLINE :
on_menu_comment_line1_activate ( NULL , NULL ) ;
2007-07-06 10:16:51 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FORMAT_UNCOMMENTLINE :
on_menu_uncomment_line1_activate ( NULL , NULL ) ;
2007-03-25 20:51:45 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FORMAT_INCREASEINDENT :
2006-10-26 15:22:27 +00:00
on_menu_increase_indent1_activate ( NULL , NULL ) ;
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FORMAT_DECREASEINDENT :
2006-10-26 15:22:27 +00:00
on_menu_decrease_indent1_activate ( NULL , NULL ) ;
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FORMAT_INCREASEINDENTBYSPACE :
2008-09-25 18:28:37 +00:00
editor_indentation_by_one_space ( doc - > editor , - 1 , FALSE ) ;
2007-07-16 15:42:12 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FORMAT_DECREASEINDENTBYSPACE :
2008-09-25 18:28:37 +00:00
editor_indentation_by_one_space ( doc - > editor , - 1 , TRUE ) ;
2007-07-16 15:42:12 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FORMAT_AUTOINDENT :
2008-09-25 18:28:37 +00:00
editor_smart_line_indentation ( doc - > editor , - 1 ) ;
2007-07-16 15:42:12 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FORMAT_TOGGLECASE :
2007-09-07 19:01:55 +00:00
on_toggle_case1_activate ( NULL , NULL ) ;
2006-10-26 15:22:27 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FORMAT_SENDTOCMD1 :
2007-08-23 11:34:06 +00:00
if ( ui_prefs . custom_commands & & g_strv_length ( ui_prefs . custom_commands ) > 0 )
2008-06-15 13:35:48 +00:00
tools_execute_custom_command ( doc , ui_prefs . custom_commands [ 0 ] ) ;
2007-02-25 14:26:55 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FORMAT_SENDTOCMD2 :
2007-08-23 11:34:06 +00:00
if ( ui_prefs . custom_commands & & g_strv_length ( ui_prefs . custom_commands ) > 1 )
2008-06-15 13:35:48 +00:00
tools_execute_custom_command ( doc , ui_prefs . custom_commands [ 1 ] ) ;
2007-02-25 14:26:55 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_FORMAT_SENDTOCMD3 :
2007-08-23 11:34:06 +00:00
if ( ui_prefs . custom_commands & & g_strv_length ( ui_prefs . custom_commands ) > 2 )
2008-06-15 13:35:48 +00:00
tools_execute_custom_command ( doc , ui_prefs . custom_commands [ 2 ] ) ;
2007-02-25 14:26:55 +00:00
break ;
2006-10-26 15:22:27 +00:00
}
2006-09-12 08:32:52 +00:00
}
2006-10-26 15:22:27 +00:00
2008-03-12 13:37:39 +00:00
/* common function for select keybindings, only valid when scintilla has focus. */
static void cb_func_select_action ( guint key_id )
2006-09-12 08:32:52 +00:00
{
2008-06-15 13:35:48 +00:00
GeanyDocument * doc = document_get_current ( ) ;
2008-05-22 14:41:28 +00:00
GtkWidget * focusw = gtk_window_get_focus ( GTK_WINDOW ( main_widgets . window ) ) ;
2008-04-27 15:43:47 +00:00
static GtkWidget * scribble_widget = NULL ;
/* special case for Select All in the scribble widget */
if ( scribble_widget = = NULL ) /* lookup the scribble widget only once */
2008-12-18 21:21:53 +00:00
scribble_widget = ui_lookup_widget ( main_widgets . window , " textview_scribble " ) ;
2008-04-27 15:43:47 +00:00
if ( key_id = = GEANY_KEYS_SELECT_ALL & & focusw = = scribble_widget )
{
g_signal_emit_by_name ( scribble_widget , " select-all " , TRUE ) ;
return ;
}
2006-10-26 15:22:27 +00:00
2008-03-12 13:37:39 +00:00
/* keybindings only valid when scintilla widget has focus */
2008-07-14 11:13:54 +00:00
if ( doc = = NULL | | focusw ! = GTK_WIDGET ( doc - > editor - > sci ) )
2008-06-15 13:35:48 +00:00
return ;
2006-12-13 00:46:14 +00:00
2008-02-29 19:30:28 +00:00
switch ( key_id )
{
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_SELECT_ALL :
on_menu_select_all1_activate ( NULL , NULL ) ;
2008-02-29 19:30:28 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_SELECT_WORD :
2008-09-25 18:28:37 +00:00
editor_select_word ( doc - > editor ) ;
2008-02-29 19:30:28 +00:00
break ;
2008-03-12 13:37:39 +00:00
case GEANY_KEYS_SELECT_LINE :
2008-09-25 18:28:37 +00:00
editor_select_lines ( doc - > editor , FALSE ) ;
2008-03-12 13:37:39 +00:00
break ;
case GEANY_KEYS_SELECT_PARAGRAPH :
2008-09-25 18:28:37 +00:00
editor_select_paragraph ( doc - > editor ) ;
2008-02-29 19:30:28 +00:00
break ;
}
2006-12-13 00:46:14 +00:00
}
2007-03-23 16:34:54 +00:00
2008-02-29 19:30:28 +00:00
2008-06-19 15:58:10 +00:00
static void cb_func_document_action ( guint key_id )
2007-06-03 16:03:46 +00:00
{
2008-06-19 15:58:10 +00:00
GeanyDocument * doc = document_get_current ( ) ;
if ( doc = = NULL )
return ;
switch ( key_id )
{
case GEANY_KEYS_DOCUMENT_REPLACETABS :
on_replace_tabs_activate ( NULL , NULL ) ;
break ;
case GEANY_KEYS_DOCUMENT_REPLACESPACES :
on_replace_spaces_activate ( NULL , NULL ) ;
break ;
case GEANY_KEYS_DOCUMENT_LINEBREAK :
on_line_breaking1_activate ( NULL , NULL ) ;
2008-11-23 16:24:16 +00:00
ui_document_show_hide ( doc ) ;
2008-06-19 15:58:10 +00:00
break ;
case GEANY_KEYS_DOCUMENT_LINEWRAP :
on_line_wrapping1_toggled ( NULL , NULL ) ;
2008-11-23 16:24:16 +00:00
ui_document_show_hide ( doc ) ;
2008-06-19 15:58:10 +00:00
break ;
case GEANY_KEYS_DOCUMENT_RELOADTAGLIST :
document_update_tag_list ( doc , TRUE ) ;
break ;
case GEANY_KEYS_DOCUMENT_FOLDALL :
2008-09-25 18:28:37 +00:00
editor_fold_all ( doc - > editor ) ;
2008-06-19 15:58:10 +00:00
break ;
case GEANY_KEYS_DOCUMENT_UNFOLDALL :
2008-09-25 18:28:37 +00:00
editor_unfold_all ( doc - > editor ) ;
2008-06-19 15:58:10 +00:00
break ;
case GEANY_KEYS_DOCUMENT_TOGGLEFOLD :
if ( editor_prefs . folding )
{
2008-07-14 11:13:54 +00:00
gint line = sci_get_current_line ( doc - > editor - > sci ) ;
sci_toggle_fold ( doc - > editor - > sci , line ) ;
2008-06-19 15:58:10 +00:00
break ;
}
}
2007-06-03 16:03:46 +00:00
}
2006-12-13 00:46:14 +00:00
2008-03-12 13:37:39 +00:00
/* common function for insert keybindings, only valid when scintilla has focus. */
static void cb_func_insert_action ( guint key_id )
2007-06-03 16:03:46 +00:00
{
2008-06-15 13:35:48 +00:00
GeanyDocument * doc = document_get_current ( ) ;
2008-05-22 14:41:28 +00:00
GtkWidget * focusw = gtk_window_get_focus ( GTK_WINDOW ( main_widgets . window ) ) ;
2007-06-03 16:03:46 +00:00
2008-03-12 13:37:39 +00:00
/* keybindings only valid when scintilla widget has focus */
2008-07-14 11:13:54 +00:00
if ( doc = = NULL | | focusw ! = GTK_WIDGET ( doc - > editor - > sci ) ) return ;
2008-03-12 13:37:39 +00:00
switch ( key_id )
{
case GEANY_KEYS_INSERT_ALTWHITESPACE :
2008-07-08 13:53:08 +00:00
editor_insert_alternative_whitespace ( doc - > editor ) ;
2008-03-12 13:37:39 +00:00
break ;
case GEANY_KEYS_INSERT_DATE :
2008-12-18 21:21:53 +00:00
gtk_menu_item_activate ( GTK_MENU_ITEM ( ui_lookup_widget ( main_widgets . window , " insert_date_custom1 " ) ) ) ;
2008-03-12 13:37:39 +00:00
break ;
}
2007-06-03 16:03:46 +00:00
}
2007-07-18 15:35:52 +00:00