aboutsummaryrefslogtreecommitdiff
path: root/src/sc_editor.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sc_editor.c')
-rw-r--r--src/sc_editor.c39
1 files changed, 12 insertions, 27 deletions
diff --git a/src/sc_editor.c b/src/sc_editor.c
index 6b8ba69..6e03eb2 100644
--- a/src/sc_editor.c
+++ b/src/sc_editor.c
@@ -742,38 +742,23 @@ static void do_backspace(struct frame *fr, SCEditor *e)
} else {
/* Delete one character */
- size_t old_pos = e->cursor_pos;
- int old_para = e->cursor_para;
- int old_trail = e->cursor_trail;
+ struct edit_pos p1, p2;
- int new_para = old_para;
- size_t new_pos = old_pos;
- int new_trail = old_trail;
+ p1.para = e->cursor_para;
+ p1.pos = e->cursor_pos;
+ p1.trail = e->cursor_trail;
- Paragraph *para = e->cursor_frame->paras[old_para];
+ p2 = p1;
- cursor_moveh(e->cursor_frame, &new_para, &new_pos, &new_trail, -1);
- cursor_moveh(e->cursor_frame, &e->cursor_para, &e->cursor_pos, &e->cursor_trail, -1);
+ cursor_moveh(e->cursor_frame, &p2.para, &p2.pos, &p2.trail, -1);
+ show_edit_pos(p1);
+ show_edit_pos(p2);
- if ( e->cursor_para != old_para ) {
+ delete_text_from_frame(e->cursor_frame, p1, p2, wrapw);
- merge_paragraphs(e->cursor_frame, e->cursor_para);
- wrap_paragraph(e->cursor_frame->paras[new_para], NULL, wrapw, 0, 0);
-
- } else {
-
- size_t offs_new, offs_old;
-
- offs_new = pos_trail_to_offset(para, e->cursor_pos,
- e->cursor_trail);
- offs_old = pos_trail_to_offset(para, old_pos, old_trail);
-
- delete_text_in_paragraph(e->cursor_frame, old_para,
- offs_new, offs_old);
- wrap_paragraph(para, NULL, wrapw, 0, 0);
-
-
- }
+ e->cursor_para = p2.para;
+ e->cursor_pos = p2.pos;
+ e->cursor_trail = p2.trail;
}