mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-22 20:36:50 +03:00
Ticket #2499 (action to the mark current word)
added action CK_Mark_Word to the mark current word changed double-click the mouse handler of the editor Signed-off-by: Ilia Maslakov <il.smind@gmail.com>
This commit is contained in:
parent
6cd8812756
commit
afed48a44a
@ -84,6 +84,8 @@ static name_keymap_t command_names[] = {
|
||||
{"EditRemove", CK_Remove},
|
||||
{"EditMarkAll", CK_Mark_All},
|
||||
{"EditUnmark", CK_Unmark},
|
||||
{"EditMarkWord", CK_Mark_Word},
|
||||
{"EditMarkLine", CK_Mark_Line},
|
||||
{"EditSaveBlock", CK_Save_Block},
|
||||
{"EditColumnMark", CK_Column_Mark},
|
||||
{"EditFind", CK_Find},
|
||||
|
@ -65,6 +65,8 @@
|
||||
#define CK_Shift_Block_Left 211
|
||||
#define CK_Shift_Block_Right 212
|
||||
#define CK_Mark_All 213
|
||||
#define CK_Mark_Word 214
|
||||
#define CK_Mark_Line 215
|
||||
|
||||
/* search and replace */
|
||||
#define CK_Find 301
|
||||
|
@ -45,6 +45,8 @@ EditRemove = f8
|
||||
EditMarkAll =
|
||||
EditUnmark =
|
||||
EditFind = f7
|
||||
EditMarkLine =
|
||||
EditMarkWord =
|
||||
|
||||
EditShiftBlockLeft =
|
||||
EditShiftBlockRight =
|
||||
|
@ -43,6 +43,8 @@ EditRemove = f8
|
||||
EditMarkAll =
|
||||
EditUnmark =
|
||||
EditFind = f7; ctrl-s
|
||||
EditMarkLine =
|
||||
EditMarkWord =
|
||||
|
||||
EditShiftBlockLeft =
|
||||
EditShiftBlockRight =
|
||||
|
@ -278,6 +278,8 @@ int edit_new_cmd (WEdit * edit);
|
||||
int edit_reload (WEdit * edit, const char *filename);
|
||||
int edit_load_cmd (WEdit * edit, edit_current_file_t what);
|
||||
void edit_mark_cmd (WEdit * edit, int unmark);
|
||||
void edit_mark_current_word_cmd (WEdit * edit);
|
||||
void edit_mark_current_line_cmd (WEdit * edit);
|
||||
void edit_set_markers (WEdit * edit, long m1, long m2, int c1, int c2);
|
||||
void edit_push_markers (WEdit * edit);
|
||||
void edit_replace_cmd (WEdit * edit, int again);
|
||||
|
@ -4,7 +4,7 @@
|
||||
2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
|
||||
|
||||
Authors: Paul Sheer 1996, 1997
|
||||
Ilia Maslakov <il.smind@gmail.com> 2009, 2010, 2011
|
||||
Ilia Maslakov <il.smind@gmail.com> 2009, 2010, 2011
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -663,6 +663,7 @@ get_prev_undo_action (WEdit * edit)
|
||||
c = edit->undo_stack[(sp - 1) & edit->undo_stack_size_mask];
|
||||
return c;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
/** is called whenever a modification is made by one of the four routines below */
|
||||
|
||||
@ -3239,6 +3240,56 @@ edit_mark_cmd (WEdit * edit, int unmark)
|
||||
}
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
/** highlight the word under cursor */
|
||||
|
||||
void
|
||||
edit_mark_current_word_cmd (WEdit * edit)
|
||||
{
|
||||
long pos;
|
||||
|
||||
for (pos = edit->curs1; pos != 0; pos--)
|
||||
{
|
||||
int c1, c2;
|
||||
|
||||
c1 = edit_get_byte (edit, pos);
|
||||
c2 = edit_get_byte (edit, pos - 1);
|
||||
if (!isspace (c1) && isspace (c2))
|
||||
break;
|
||||
if ((my_type_of (c1) & my_type_of (c2)) == 0)
|
||||
break;
|
||||
}
|
||||
edit->mark1 = pos;
|
||||
|
||||
for (; pos < edit->last_byte; pos++)
|
||||
{
|
||||
int c1, c2;
|
||||
|
||||
c1 = edit_get_byte (edit, pos);
|
||||
c2 = edit_get_byte (edit, pos + 1);
|
||||
if (!isspace (c1) && isspace (c2))
|
||||
break;
|
||||
if ((my_type_of (c1) & my_type_of (c2)) == 0)
|
||||
break;
|
||||
}
|
||||
edit->mark2 = min (pos + 1, edit->last_byte);
|
||||
|
||||
edit->force |= REDRAW_LINE_ABOVE | REDRAW_AFTER_CURSOR;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
void
|
||||
edit_mark_current_line_cmd (WEdit * edit)
|
||||
{
|
||||
long pos = edit->curs1;
|
||||
|
||||
edit->mark1 = edit_bol (edit, pos);
|
||||
edit->mark2 = edit_eol (edit, pos);
|
||||
|
||||
edit->force |= REDRAW_LINE_ABOVE | REDRAW_AFTER_CURSOR;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
void
|
||||
@ -3811,7 +3862,18 @@ edit_execute_cmd (WEdit * edit, unsigned long command, int char_for_insertion)
|
||||
edit->column_highlight = 0;
|
||||
edit_mark_cmd (edit, 1);
|
||||
break;
|
||||
|
||||
case CK_Mark_Word:
|
||||
if (edit->column_highlight)
|
||||
edit_push_undo_action (edit, COLUMN_ON);
|
||||
edit->column_highlight = 0;
|
||||
edit_mark_current_word_cmd (edit);
|
||||
break;
|
||||
case CK_Mark_Line:
|
||||
if (edit->column_highlight)
|
||||
edit_push_undo_action (edit, COLUMN_ON);
|
||||
edit->column_highlight = 0;
|
||||
edit_mark_current_line_cmd (edit);
|
||||
break;
|
||||
case CK_Toggle_Line_State:
|
||||
option_line_state = !option_line_state;
|
||||
if (option_line_state)
|
||||
|
@ -133,6 +133,20 @@ edit_event (Gpm_Event * event, void *data)
|
||||
|| event->x > edit->num_widget_columns || event->y > edit->num_widget_lines + 1)
|
||||
return MOU_NORMAL;
|
||||
|
||||
/* Double click */
|
||||
if ((event->type & (GPM_DOUBLE | GPM_UP)) == (GPM_UP | GPM_DOUBLE))
|
||||
{
|
||||
edit_mark_current_word_cmd (edit);
|
||||
goto update;
|
||||
}
|
||||
#if 0
|
||||
/* Triple click */
|
||||
if ((event->type & (GPM_TRIPLE | GPM_UP)) == (GPM_UP | GPM_TRIPLE))
|
||||
{
|
||||
edit_mark_current_line_cmd (edit);
|
||||
goto update;
|
||||
}
|
||||
#endif
|
||||
/* Wheel events */
|
||||
if ((event->buttons & GPM_B_UP) && (event->type & GPM_DOWN))
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user