The modifications below provide: 1. While calling the popup menu: - all find and context menu items are enabled if there is a selected text / caret-set word and there is a defined context action - if there is a defined context action and no selected text/word, the find items are disabled and the context item is enabled - if there is a selected text/word and no defined context action,the find items are enabled and the context item is disabled - if there is no selected text/word and no defined context action, the find items and the context item are disabled 2. While pressing a context hotkey: - if there is a defined context action, the context action is executed 3. The context action string can contain the %f, %d, %e, %p, &l wildcards.
**ui_utils.h**
void ui_update_popup_goto_items(gchar* enable);
**ui_utils.c**
void ui_update_popup_goto_items(gchar* enable) { guint i, len; len = G_N_ELEMENTS(widgets.popup_goto_items); for (i = 0; i < len; i++) ui_widget_set_sensitive(widgets.popup_goto_items[i], enable[i]=='1'); }
**keybindings.c**
case GEANY_KEYS_EDITOR_CONTEXTACTION: //if (check_current_word(doc, FALSE)) on_context_action1_activate(GTK_MENU_ITEM(ui_lookup_widget(main_widgets.editor_menu, "context_action1")), NULL);
**editor.c**
gchar cangos[64];//never reachable maximum for (gint i=0; i<64; i++) cangos[i]=(can_goto?'1':'0'); //apl gchar* command; if (doc->file_type != NULL && !EMPTY(doc->file_type->context_action_cmd)) command = g_strdup(doc->file_type->context_action_cmd); else command = g_strdup(tool_prefs.context_action_cmd); cangos[1] = (G_LIKELY(!EMPTY(command))?'1':'0'); //flag the context action g_free(command);
ui_update_popup_goto_items(cangos);
**callbacks.c**
{ editor_find_current_word_sciwc(doc->editor, -1, editor_info.current_word, GEANY_MAX_WORD_LENGTH); word = g_strdup(editor_info.current_word); } <..> gchar *command_tmp = g_strdup(command); //== gchar *command_line = build_replace_placeholder(doc, command_tmp); //== g_free(command_tmp); //==
utils_str_replace_all(&command_line, "%s", word);