mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-22 20:36:50 +03:00
fix: incorrect delete selected block if is utf-8 text
add param byte_delete to edit_delete, if byte_delete = 1 then one byte only delete, but not multibyte char.
This commit is contained in:
parent
990838a226
commit
945d2183ac
21
edit/edit.c
21
edit/edit.c
@ -1070,7 +1070,7 @@ void edit_insert_ahead (WEdit * edit, int c)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int edit_delete (WEdit * edit)
|
int edit_delete (WEdit * edit, const int byte_delete)
|
||||||
{
|
{
|
||||||
int p = 0;
|
int p = 0;
|
||||||
int cw = 1;
|
int cw = 1;
|
||||||
@ -1083,7 +1083,8 @@ int edit_delete (WEdit * edit)
|
|||||||
edit->last_get_rule -= (edit->last_get_rule > edit->curs1);
|
edit->last_get_rule -= (edit->last_get_rule > edit->curs1);
|
||||||
|
|
||||||
cw = 1;
|
cw = 1;
|
||||||
if ( edit->utf8 ) {
|
/* if byte_delete = 1 then delete only one byte not multibyte char*/
|
||||||
|
if ( edit->utf8 && byte_delete == 0 ) {
|
||||||
edit_get_utf (edit, edit->curs1, &cw);
|
edit_get_utf (edit, edit->curs1, &cw);
|
||||||
if ( cw < 1 )
|
if ( cw < 1 )
|
||||||
cw = 1;
|
cw = 1;
|
||||||
@ -1950,7 +1951,7 @@ static void edit_right_delete_word (WEdit * edit)
|
|||||||
for (;;) {
|
for (;;) {
|
||||||
if (edit->curs1 >= edit->last_byte)
|
if (edit->curs1 >= edit->last_byte)
|
||||||
break;
|
break;
|
||||||
c1 = edit_delete (edit);
|
c1 = edit_delete (edit, 1);
|
||||||
c2 = edit_get_byte (edit, edit->curs1);
|
c2 = edit_get_byte (edit, edit->curs1);
|
||||||
if ((isspace (c1) == 0) != (isspace (c2) == 0))
|
if ((isspace (c1) == 0) != (isspace (c2) == 0))
|
||||||
break;
|
break;
|
||||||
@ -2000,7 +2001,7 @@ edit_do_undo (WEdit * edit)
|
|||||||
edit_backspace (edit);
|
edit_backspace (edit);
|
||||||
break;
|
break;
|
||||||
case DELCHAR:
|
case DELCHAR:
|
||||||
edit_delete (edit);
|
edit_delete (edit, 0);
|
||||||
break;
|
break;
|
||||||
case COLUMN_ON:
|
case COLUMN_ON:
|
||||||
column_highlighting = 1;
|
column_highlighting = 1;
|
||||||
@ -2044,7 +2045,7 @@ static void edit_delete_to_line_end (WEdit * edit)
|
|||||||
while (edit_get_byte (edit, edit->curs1) != '\n') {
|
while (edit_get_byte (edit, edit->curs1) != '\n') {
|
||||||
if (!edit->curs2)
|
if (!edit->curs2)
|
||||||
break;
|
break;
|
||||||
edit_delete (edit);
|
edit_delete (edit, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2066,7 +2067,7 @@ edit_delete_line (WEdit *edit)
|
|||||||
* beyond EOF.
|
* beyond EOF.
|
||||||
*/
|
*/
|
||||||
while (edit_get_byte (edit, edit->curs1) != '\n') {
|
while (edit_get_byte (edit, edit->curs1) != '\n') {
|
||||||
(void) edit_delete (edit);
|
(void) edit_delete (edit, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2074,7 +2075,7 @@ edit_delete_line (WEdit *edit)
|
|||||||
* Note that edit_delete() will not corrupt anything if called while
|
* Note that edit_delete() will not corrupt anything if called while
|
||||||
* cursor position is EOF.
|
* cursor position is EOF.
|
||||||
*/
|
*/
|
||||||
(void) edit_delete (edit);
|
(void) edit_delete (edit, 1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Delete left part of the line.
|
* Delete left part of the line.
|
||||||
@ -2383,7 +2384,7 @@ edit_execute_cmd (WEdit *edit, int command, int char_for_insertion)
|
|||||||
if (char_for_insertion >= 0) {
|
if (char_for_insertion >= 0) {
|
||||||
if (edit->overwrite) {
|
if (edit->overwrite) {
|
||||||
if (edit_get_byte (edit, edit->curs1) != '\n')
|
if (edit_get_byte (edit, edit->curs1) != '\n')
|
||||||
edit_delete (edit);
|
edit_delete (edit, 1);
|
||||||
}
|
}
|
||||||
#ifdef HAVE_CHARSET
|
#ifdef HAVE_CHARSET
|
||||||
if ( char_for_insertion > 255 && utf8_display == 0 ) {
|
if ( char_for_insertion > 255 && utf8_display == 0 ) {
|
||||||
@ -2501,11 +2502,11 @@ edit_execute_cmd (WEdit *edit, int command, int char_for_insertion)
|
|||||||
int i;
|
int i;
|
||||||
if (is_in_indent (edit) && left_of_four_spaces (edit)) {
|
if (is_in_indent (edit) && left_of_four_spaces (edit)) {
|
||||||
for (i = 1; i <= HALF_TAB_SIZE; i++)
|
for (i = 1; i <= HALF_TAB_SIZE; i++)
|
||||||
edit_delete (edit);
|
edit_delete (edit, 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
edit_delete (edit);
|
edit_delete (edit, 0);
|
||||||
break;
|
break;
|
||||||
case CK_Delete_Word_Left:
|
case CK_Delete_Word_Left:
|
||||||
edit_left_delete_word (edit);
|
edit_left_delete_word (edit);
|
||||||
|
@ -160,7 +160,7 @@ void edit_block_move_cmd (WEdit * edit);
|
|||||||
int edit_block_delete_cmd (WEdit * edit);
|
int edit_block_delete_cmd (WEdit * edit);
|
||||||
void edit_delete_line (WEdit * edit);
|
void edit_delete_line (WEdit * edit);
|
||||||
|
|
||||||
int edit_delete (WEdit * edit);
|
int edit_delete (WEdit * edit, const int byte_delete);
|
||||||
void edit_insert (WEdit * edit, int c);
|
void edit_insert (WEdit * edit, int c);
|
||||||
void edit_cursor_move (WEdit * edit, long increment);
|
void edit_cursor_move (WEdit * edit, long increment);
|
||||||
void edit_push_action (WEdit * edit, long c, ...);
|
void edit_push_action (WEdit * edit, long c, ...);
|
||||||
|
@ -1142,7 +1142,7 @@ edit_block_move_cmd (WEdit *edit)
|
|||||||
edit_scroll_screen_over_cursor (edit);
|
edit_scroll_screen_over_cursor (edit);
|
||||||
count = start_mark;
|
count = start_mark;
|
||||||
while (count < end_mark) {
|
while (count < end_mark) {
|
||||||
copy_buf[end_mark - count - 1] = edit_delete (edit);
|
copy_buf[end_mark - count - 1] = edit_delete (edit, 1);
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
edit_scroll_screen_over_cursor (edit);
|
edit_scroll_screen_over_cursor (edit);
|
||||||
@ -1187,7 +1187,7 @@ edit_delete_column_of_text (WEdit * edit)
|
|||||||
edit_cursor_move (edit, p - edit->curs1);
|
edit_cursor_move (edit, p - edit->curs1);
|
||||||
while (q > p) { /* delete line between margins */
|
while (q > p) { /* delete line between margins */
|
||||||
if (edit_get_byte (edit, edit->curs1) != '\n')
|
if (edit_get_byte (edit, edit->curs1) != '\n')
|
||||||
edit_delete (edit);
|
edit_delete (edit, 1);
|
||||||
q--;
|
q--;
|
||||||
}
|
}
|
||||||
if (n) /* move to next line except on the last delete */
|
if (n) /* move to next line except on the last delete */
|
||||||
@ -1226,7 +1226,7 @@ edit_block_delete (WEdit *edit)
|
|||||||
edit_delete_column_of_text (edit);
|
edit_delete_column_of_text (edit);
|
||||||
} else {
|
} else {
|
||||||
while (count < end_mark) {
|
while (count < end_mark) {
|
||||||
edit_delete (edit);
|
edit_delete (edit, 1);
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2119,7 +2119,7 @@ edit_replace_cmd (WEdit *edit, int again)
|
|||||||
times_replaced++;
|
times_replaced++;
|
||||||
i = editcmd_get_str_nlen(edit_get_byte_ptr(edit,edit->found_start), i);
|
i = editcmd_get_str_nlen(edit_get_byte_ptr(edit,edit->found_start), i);
|
||||||
while (i--)
|
while (i--)
|
||||||
edit_delete (edit);
|
edit_delete (edit, 1);
|
||||||
while (repl_str[++i])
|
while (repl_str[++i])
|
||||||
edit_insert (edit, repl_str[i]);
|
edit_insert (edit, repl_str[i]);
|
||||||
} else {
|
} else {
|
||||||
@ -2132,7 +2132,7 @@ edit_replace_cmd (WEdit *edit, int again)
|
|||||||
} else {
|
} else {
|
||||||
times_replaced++;
|
times_replaced++;
|
||||||
while (i--)
|
while (i--)
|
||||||
edit_delete (edit);
|
edit_delete (edit, 1);
|
||||||
while (input2[++i])
|
while (input2[++i])
|
||||||
edit_insert (edit, input2[i]);
|
edit_insert (edit, input2[i]);
|
||||||
}
|
}
|
||||||
|
@ -272,7 +272,7 @@ static void format_this (unsigned char *t, int size, int indent)
|
|||||||
static void replace_at (WEdit * edit, long q, int c)
|
static void replace_at (WEdit * edit, long q, int c)
|
||||||
{
|
{
|
||||||
edit_cursor_move (edit, q - edit->curs1);
|
edit_cursor_move (edit, q - edit->curs1);
|
||||||
edit_delete (edit);
|
edit_delete (edit, 1);
|
||||||
edit_insert_ahead (edit, c);
|
edit_insert_ahead (edit, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -302,7 +302,7 @@ put_paragraph (WEdit * edit, unsigned char *t, long p, int indent, int size)
|
|||||||
} else if (c == '\n') {
|
} else if (c == '\n') {
|
||||||
edit_cursor_move (edit, p - edit->curs1);
|
edit_cursor_move (edit, p - edit->curs1);
|
||||||
while (strchr ("\t ", edit_get_byte (edit, p))) {
|
while (strchr ("\t ", edit_get_byte (edit, p))) {
|
||||||
edit_delete (edit);
|
edit_delete (edit, 1);
|
||||||
if (cursor > edit->curs1)
|
if (cursor > edit->curs1)
|
||||||
cursor--;
|
cursor--;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user