summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Williams <andy@andywilliams.me>2016-02-09 00:32:16 +0000
committerAndy Williams <andy@andywilliams.me>2016-02-09 00:32:16 +0000
commit70471e0ad89554bbe6368f649bc8a9c36147eac7 (patch)
treec56ca0b9273de1e6b71bb953bc85c115651b96fb
parent0d11f3d7d8fff83a42a7ee84b761a8eb638d9c7e (diff)
downloadefl-70471e0ad89554bbe6368f649bc8a9c36147eac7.tar.gz
[editor] Support space insertion instead of tabs
Elm_Code support and option in Edi to use spaces when the Tab key is pressed - make this default too.
-rw-r--r--legacy/elm_code/src/lib/widget/elm_code_widget.c39
-rw-r--r--legacy/elm_code/src/lib/widget/elm_code_widget.eo11
-rw-r--r--legacy/elm_code/src/lib/widget/elm_code_widget_private.h2
3 files changed, 51 insertions, 1 deletions
diff --git a/legacy/elm_code/src/lib/widget/elm_code_widget.c b/legacy/elm_code/src/lib/widget/elm_code_widget.c
index 98811bda14..a6cde05b3f 100644
--- a/legacy/elm_code/src/lib/widget/elm_code_widget.c
+++ b/legacy/elm_code/src/lib/widget/elm_code_widget.c
@@ -1007,6 +1007,30 @@ _elm_code_widget_text_at_cursor_insert(Elm_Code_Widget *widget, const char *text
}
static void
+_elm_code_widget_tab_at_cursor_insert(Elm_Code_Widget *widget)
+{
+ Elm_Code_Widget_Data *pd;
+ unsigned int col, row;
+
+ pd = eo_data_scope_get(widget, ELM_CODE_WIDGET_CLASS);
+ if (!pd->tab_inserts_spaces)
+ {
+ _elm_code_widget_text_at_cursor_insert(widget, "\t", 1);
+ return;
+ }
+
+ eo_do(widget,
+ elm_obj_code_widget_cursor_position_get(&col, &row));
+ col = (col - 1) % pd->tabstop;
+
+ while (col < pd->tabstop)
+ {
+ _elm_code_widget_text_at_cursor_insert(widget, " ", 1);
+ col++;
+ }
+}
+
+static void
_elm_code_widget_newline(Elm_Code_Widget *widget)
{
Elm_Code *code;
@@ -1215,6 +1239,8 @@ _elm_code_widget_key_down_cb(void *data, Evas *evas EINA_UNUSED,
_elm_code_widget_backspace(widget);
else if (!strcmp(ev->key, "Delete"))
_elm_code_widget_delete(widget);
+ else if (!strcmp(ev->key, "Tab"))
+ _elm_code_widget_tab_at_cursor_insert(widget);
else if (ev->string && strlen(ev->string) == 1)
_elm_code_widget_text_at_cursor_insert(widget, ev->string, 1);
@@ -1446,6 +1472,19 @@ _elm_code_widget_show_whitespace_get(Eo *obj EINA_UNUSED, Elm_Code_Widget_Data *
}
EOLIAN static void
+_elm_code_widget_tab_inserts_spaces_set(Eo *obj, Elm_Code_Widget_Data *pd, Eina_Bool spaces)
+{
+ pd->tab_inserts_spaces = spaces;
+ _elm_code_widget_fill(obj);
+}
+
+EOLIAN static Eina_Bool
+_elm_code_widget_tab_inserts_spaces_get(Eo *obj EINA_UNUSED, Elm_Code_Widget_Data *pd)
+{
+ return pd->tab_inserts_spaces;
+}
+
+EOLIAN static void
_elm_code_widget_cursor_position_set(Eo *obj, Elm_Code_Widget_Data *pd, unsigned int col, unsigned int line)
{
_elm_code_widget_cursor_move(obj, pd, col, line, EINA_FALSE);
diff --git a/legacy/elm_code/src/lib/widget/elm_code_widget.eo b/legacy/elm_code/src/lib/widget/elm_code_widget.eo
index 1bbcc1803e..0e11331dbc 100644
--- a/legacy/elm_code/src/lib/widget/elm_code_widget.eo
+++ b/legacy/elm_code/src/lib/widget/elm_code_widget.eo
@@ -130,6 +130,17 @@ class Elm.Code_Widget (Elm.Layout, Elm_Interface_Atspi_Text)
show_whitespace: Eina_Bool; [[Whether or not we show whitespace characters]]
}
}
+ @property tab_inserts_spaces {
+ set {
+ [[Set whether space characters should be inserted instead of tabs.]]
+ }
+ get {
+ [[Get whether or not space characters will be inserted instead of tabs.]]
+ }
+ values {
+ tab_inserts_spaces: Eina_Bool; [[EINA_TRUE if we should insert space characters instead of a tab when the Tab key is pressed]]
+ }
+ }
@property cursor_position {
set {
[[Set the current location of the text cursor.]]
diff --git a/legacy/elm_code/src/lib/widget/elm_code_widget_private.h b/legacy/elm_code/src/lib/widget/elm_code_widget_private.h
index b89973fd0f..b9f8ad296d 100644
--- a/legacy/elm_code/src/lib/widget/elm_code_widget_private.h
+++ b/legacy/elm_code/src/lib/widget/elm_code_widget_private.h
@@ -23,7 +23,7 @@ typedef struct
Eina_Bool editable, focussed;
Eina_Bool show_line_numbers;
unsigned int line_width_marker, tabstop;
- Eina_Bool show_whitespace;
+ Eina_Bool show_whitespace, tab_inserts_spaces;
Elm_Code_Widget_Selection_Data *selection;
Evas_Object *tooltip;