editor: Initial work in snippet support
Not really multiline yet but it's a start
This commit is contained in:
parent
feb1fc18e7
commit
19c48c6cdc
|
@ -71,7 +71,7 @@ EFL_CHECK_DOXYGEN([build_doc="yes"], [build_doc="no"])
|
|||
|
||||
### Checks for libraries
|
||||
|
||||
requirements_pc_edi="eina >= 1.19.0 evas >= 1.19.0 ecore >= 1.19.0 edje >= 1.19.0 eo >= 1.19.0 elementary >= 1.19.0 eio >= 1.19.0"
|
||||
requirements_pc_edi="eina >= 1.19.0 evas >= 1.19.0 ecore >= 1.19.0 edje >= 1.19.0 eo >= 1.19.0 elementary >= 1.19.99 eio >= 1.19.0"
|
||||
AC_SUBST([requirements_pc_edi])
|
||||
PKG_CHECK_MODULES([EFL], [${requirements_pc_edi}])
|
||||
|
||||
|
|
|
@ -580,6 +580,30 @@ _suggest_popup_setup(Edi_Editor *editor)
|
|||
_suggest_list_cb_selected, label);
|
||||
}
|
||||
|
||||
static void
|
||||
_edi_editor_snippet_insert(Edi_Editor *editor, Evas_Event_Key_Down *ev)
|
||||
{
|
||||
char *key;
|
||||
const char *snippet;
|
||||
unsigned int row, col;
|
||||
Edi_Language_Provider *provider;
|
||||
|
||||
provider = edi_language_provider_get(editor);
|
||||
elm_code_widget_cursor_position_get(editor->entry, &row, &col);
|
||||
key = _edi_editor_current_word_get(editor, row, col);
|
||||
snippet = provider->snippet_get(key);
|
||||
|
||||
if (!snippet)
|
||||
return;
|
||||
|
||||
elm_code_widget_selection_select_word(editor->entry, row, col);
|
||||
elm_code_widget_selection_delete(editor->entry);
|
||||
elm_code_widget_text_at_cursor_insert(editor->entry, snippet);
|
||||
|
||||
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
|
||||
free(key);
|
||||
}
|
||||
|
||||
static void
|
||||
_smart_cb_key_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED,
|
||||
Evas_Object *obj EINA_UNUSED, void *event)
|
||||
|
@ -635,9 +659,11 @@ _smart_cb_key_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED,
|
|||
}
|
||||
}
|
||||
|
||||
if (edi_language_provider_has(editor))
|
||||
if ((!alt) && (!ctrl))
|
||||
{
|
||||
if ((!alt) && (!ctrl))
|
||||
if (!strcmp(ev->key, "Tab") && edi_language_provider_has(editor))
|
||||
_edi_editor_snippet_insert(editor, ev);
|
||||
else if (edi_language_provider_has(editor))
|
||||
_suggest_popup_key_down_cb(editor, ev->key, ev->string);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,10 +14,11 @@ static Edi_Language_Provider _edi_language_provider_registry[] =
|
|||
{
|
||||
{
|
||||
"c", _edi_language_c_add, _edi_language_c_refresh, _edi_language_c_del,
|
||||
_edi_language_c_mime_name, _edi_language_c_lookup, _edi_language_c_lookup_doc
|
||||
_edi_language_c_mime_name, _edi_language_c_snippet_get,
|
||||
_edi_language_c_lookup, _edi_language_c_lookup_doc
|
||||
},
|
||||
|
||||
{NULL, NULL, NULL, NULL, NULL, NULL, NULL}
|
||||
{NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
Edi_Language_Provider *edi_language_provider_get(Edi_Editor *editor)
|
||||
|
|
|
@ -45,6 +45,7 @@ typedef struct _Edi_Language_Provider
|
|||
void (*refresh)(Edi_Editor *editor);
|
||||
void (*del)(Edi_Editor *editor);
|
||||
const char *(*mime_name)(const char *mime);
|
||||
const char *(*snippet_get)(const char *key);
|
||||
Eina_List *(*lookup)(Edi_Editor *editor, unsigned int row, unsigned int col);
|
||||
Edi_Language_Document *(*lookup_doc)(Edi_Editor *editor, unsigned int row, unsigned int col);
|
||||
} Edi_Language_Provider;
|
||||
|
|
|
@ -154,6 +154,29 @@ _edi_language_c_mime_name(const char *mime)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
const char *
|
||||
_edi_language_c_snippet_get(const char *key)
|
||||
{
|
||||
if (!strcmp(key, "ret"))
|
||||
return "return";
|
||||
if (!strcmp(key, "if"))
|
||||
return
|
||||
"if ()" \
|
||||
" {" \
|
||||
" }";
|
||||
if (!strcmp(key, "ifel"))
|
||||
return
|
||||
"if ()" \
|
||||
" {" \
|
||||
" }" \
|
||||
"else" \
|
||||
" {" \
|
||||
" }";
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
#if HAVE_LIBCLANG
|
||||
char *
|
||||
_edi_suggest_c_detail_get(Edi_Editor *editor, const char *term_str,
|
||||
|
|
Loading…
Reference in New Issue