1
1

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>
Этот коммит содержится в:
Ilia Maslakov 2011-02-14 10:43:01 +00:00
родитель 6cd8812756
Коммит afed48a44a
7 изменённых файлов: 88 добавлений и 2 удалений

Просмотреть файл

@ -84,6 +84,8 @@ static name_keymap_t command_names[] = {
{"EditRemove", CK_Remove}, {"EditRemove", CK_Remove},
{"EditMarkAll", CK_Mark_All}, {"EditMarkAll", CK_Mark_All},
{"EditUnmark", CK_Unmark}, {"EditUnmark", CK_Unmark},
{"EditMarkWord", CK_Mark_Word},
{"EditMarkLine", CK_Mark_Line},
{"EditSaveBlock", CK_Save_Block}, {"EditSaveBlock", CK_Save_Block},
{"EditColumnMark", CK_Column_Mark}, {"EditColumnMark", CK_Column_Mark},
{"EditFind", CK_Find}, {"EditFind", CK_Find},

Просмотреть файл

@ -65,6 +65,8 @@
#define CK_Shift_Block_Left 211 #define CK_Shift_Block_Left 211
#define CK_Shift_Block_Right 212 #define CK_Shift_Block_Right 212
#define CK_Mark_All 213 #define CK_Mark_All 213
#define CK_Mark_Word 214
#define CK_Mark_Line 215
/* search and replace */ /* search and replace */
#define CK_Find 301 #define CK_Find 301

Просмотреть файл

@ -45,6 +45,8 @@ EditRemove = f8
EditMarkAll = EditMarkAll =
EditUnmark = EditUnmark =
EditFind = f7 EditFind = f7
EditMarkLine =
EditMarkWord =
EditShiftBlockLeft = EditShiftBlockLeft =
EditShiftBlockRight = EditShiftBlockRight =

Просмотреть файл

@ -43,6 +43,8 @@ EditRemove = f8
EditMarkAll = EditMarkAll =
EditUnmark = EditUnmark =
EditFind = f7; ctrl-s EditFind = f7; ctrl-s
EditMarkLine =
EditMarkWord =
EditShiftBlockLeft = EditShiftBlockLeft =
EditShiftBlockRight = EditShiftBlockRight =

Просмотреть файл

@ -278,6 +278,8 @@ int edit_new_cmd (WEdit * edit);
int edit_reload (WEdit * edit, const char *filename); int edit_reload (WEdit * edit, const char *filename);
int edit_load_cmd (WEdit * edit, edit_current_file_t what); int edit_load_cmd (WEdit * edit, edit_current_file_t what);
void edit_mark_cmd (WEdit * edit, int unmark); 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_set_markers (WEdit * edit, long m1, long m2, int c1, int c2);
void edit_push_markers (WEdit * edit); void edit_push_markers (WEdit * edit);
void edit_replace_cmd (WEdit * edit, int again); void edit_replace_cmd (WEdit * edit, int again);

Просмотреть файл

@ -4,7 +4,7 @@
2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
Authors: Paul Sheer 1996, 1997 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 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 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]; c = edit->undo_stack[(sp - 1) & edit->undo_stack_size_mask];
return c; return c;
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
/** is called whenever a modification is made by one of the four routines below */ /** 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 void
@ -3811,7 +3862,18 @@ edit_execute_cmd (WEdit * edit, unsigned long command, int char_for_insertion)
edit->column_highlight = 0; edit->column_highlight = 0;
edit_mark_cmd (edit, 1); edit_mark_cmd (edit, 1);
break; 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: case CK_Toggle_Line_State:
option_line_state = !option_line_state; option_line_state = !option_line_state;
if (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) || event->x > edit->num_widget_columns || event->y > edit->num_widget_lines + 1)
return MOU_NORMAL; 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 */ /* Wheel events */
if ((event->buttons & GPM_B_UP) && (event->type & GPM_DOWN)) if ((event->buttons & GPM_B_UP) && (event->type & GPM_DOWN))
{ {