ajwillia-ms pushed a commit to branch master. http://git.enlightenment.org/tools/edi.git/commit/?id=74b7c2a3d3b12adbf50531d5646c1359c50da163
commit 74b7c2a3d3b12adbf50531d5646c1359c50da163 Author: Andy Williams <a...@andywilliams.me> Date: Tue May 5 21:41:29 2015 +0100 editor: correctly paste multiline windows text --- elm_code/src/lib/elm_code_text.c | 9 +++++++-- elm_code/src/lib/elm_code_text.h | 2 +- elm_code/src/lib/widget/elm_code_widget_selection.c | 9 +++++---- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/elm_code/src/lib/elm_code_text.c b/elm_code/src/lib/elm_code_text.c index f51569c..2ae3432 100644 --- a/elm_code/src/lib/elm_code_text.c +++ b/elm_code/src/lib/elm_code_text.c @@ -220,15 +220,17 @@ elm_code_text_tabwidth_at_position(unsigned int position, unsigned int tabstop) } EAPI int -elm_code_text_newlinenpos(const char *text, unsigned int length) +elm_code_text_newlinenpos(const char *text, unsigned int length, short *nllen) { int lfpos, crpos; int check; + if (nllen) + *nllen = 1; lfpos = elm_code_text_strnpos(text, length, "\n", 0); check = length; if (lfpos != ELM_CODE_TEXT_NOT_FOUND) - check = lfpos; + check = lfpos + 1; crpos = elm_code_text_strnpos(text, check, "\r", 0); if (lfpos == ELM_CODE_TEXT_NOT_FOUND && crpos == ELM_CODE_TEXT_NOT_FOUND) @@ -238,6 +240,9 @@ elm_code_text_newlinenpos(const char *text, unsigned int length) return lfpos; if (lfpos == ELM_CODE_TEXT_NOT_FOUND) return crpos; + + if (nllen) + *nllen = 2; if (lfpos < crpos) return lfpos; return crpos; diff --git a/elm_code/src/lib/elm_code_text.h b/elm_code/src/lib/elm_code_text.h index 15b236e..07eced9 100644 --- a/elm_code/src/lib/elm_code_text.h +++ b/elm_code/src/lib/elm_code_text.h @@ -52,7 +52,7 @@ EAPI unsigned int elm_code_text_tabwidth_at_position(unsigned int position, unsi EAPI int elm_code_text_strnpos(const char *text, unsigned int length, const char *search, int offset); -EAPI int elm_code_text_newlinenpos(const char *text, unsigned int length); +EAPI int elm_code_text_newlinenpos(const char *text, unsigned int length, short *nllen); EAPI unsigned int elm_code_line_text_column_width_to_position(Elm_Code_Line *line, unsigned int length, unsigned int tabstop); diff --git a/elm_code/src/lib/widget/elm_code_widget_selection.c b/elm_code/src/lib/widget/elm_code_widget_selection.c index 440833c..3838c10 100644 --- a/elm_code/src/lib/widget/elm_code_widget_selection.c +++ b/elm_code/src/lib/widget/elm_code_widget_selection.c @@ -310,6 +310,7 @@ _selection_paste_multi(Elm_Code_Widget *widget, Elm_Code_Widget_Data *pd, Elm_Co Elm_Code_Line *line; unsigned int position, newrow, remain; int nlpos; + short nllen; char *ptr; line = elm_code_file_line_get(code->file, row); @@ -319,15 +320,15 @@ _selection_paste_multi(Elm_Code_Widget *widget, Elm_Code_Widget_Data *pd, Elm_Co newrow = row; ptr = (char *)text; remain = len; - while ((nlpos = elm_code_text_newlinenpos(ptr, remain)) != ELM_CODE_TEXT_NOT_FOUND) + while ((nlpos = elm_code_text_newlinenpos(ptr, remain, &nllen)) != ELM_CODE_TEXT_NOT_FOUND) { if (newrow == row) _selection_paste_single(widget, pd, code, col, row, text, nlpos); else elm_code_file_line_insert(code->file, newrow, ptr, nlpos, NULL); - remain -= nlpos + 1; // TODO make this adapt to windows lengths (length param to newlinenpos) - ptr += nlpos + 1; + remain -= nlpos + nllen; + ptr += nlpos + nllen; newrow++; } @@ -355,7 +356,7 @@ _selection_paste_cb(void *data, Evas_Object *obj EINA_UNUSED, Elm_Selection_Data code = elm_code_widget_code_get(), elm_code_widget_cursor_position_get(&col, &row)); - if (elm_code_text_newlinenpos(ev->data, ev->len) == ELM_CODE_TEXT_NOT_FOUND) + if (elm_code_text_newlinenpos(ev->data, ev->len, NULL) == ELM_CODE_TEXT_NOT_FOUND) _selection_paste_single(widget, pd, code, col, row, ev->data, ev->len - 1); else _selection_paste_multi(widget, pd, code, col, row, ev->data, ev->len - 1); --