From e98d27fd8d432650489f973abcdfad4163e87f42 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 22 Nov 2019 20:50:17 +1100 Subject: Keymap: use tab key for indent or auto-complete Only indent when there aren't characters before the cursor. This resolves the conflict with Ctrl-Space for view maximize. D6239 by @wbrbr for text editor, based console support on this. --- source/blender/editors/space_text/text_ops.c | 35 ++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'source/blender/editors/space_text/text_ops.c') diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c index a4608123f19..71e24090aa1 100644 --- a/source/blender/editors/space_text/text_ops.c +++ b/source/blender/editors/space_text/text_ops.c @@ -1068,6 +1068,41 @@ void TEXT_OT_cut(wmOperatorType *ot) /** \} */ +/* -------------------------------------------------------------------- */ +/** \name Indent or Autocomplete Operator + * \{ */ + +static int text_indent_or_autocomplete_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Text *text = CTX_data_edit_text(C); + TextLine *line = text->curl; + bool text_before_cursor = text->curc != 0 && !ELEM(line->line[text->curc - 1], ' ', '\t'); + if (text_before_cursor && (txt_has_sel(text) == false)) { + WM_operator_name_call(C, "TEXT_OT_autocomplete", WM_OP_INVOKE_DEFAULT, NULL); + } + else { + WM_operator_name_call(C, "TEXT_OT_indent", WM_OP_EXEC_DEFAULT, NULL); + } + return OPERATOR_FINISHED; +} + +void TEXT_OT_indent_or_autocomplete(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Indent or Autocomplete"; + ot->idname = "TEXT_OT_indent_or_autocomplete"; + ot->description = "Indent selected text or autocomplete"; + + /* api callbacks */ + ot->exec = text_indent_or_autocomplete_exec; + ot->poll = text_edit_poll; + + /* flags */ + ot->flag = 0; +} + +/** \} */ + /* -------------------------------------------------------------------- */ /** \name Indent Operator * \{ */ -- cgit v1.2.3