Skip to content

Commit 854f80a

Browse files
committed
possibility to mark columns by ctrl shift left,right cursor
1 parent 0918423 commit 854f80a

File tree

4 files changed

+132
-16
lines changed

4 files changed

+132
-16
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,8 @@ definitions are stored in log file.
416416
| <kbd>Space</kbd> | stop/continue in watch mode |
417417
| <kbd>R</kbd> | Repaint screen and refresh input file |
418418
| <kbd>Ins</kbd> | export row, column or cell to default target |
419-
| <kbd>shift</kbd>+<kbd>cursor...</kbd> | define range |
419+
| <kbd>shift</kbd>+<kbd>cursor up, down</kbd> | define row range |
420+
| <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>cursor left, right</kbd> | define column range |
420421
| <kbd>F3</kbd> | start/finish of selection rows |
421422
| <kbd>Shift</kbd>+<kbd>F3</kbd> | start/finish of selection block |
422423
| <kbd>Ctrl</kbd>+<kbd>drag mouse</kbd> | defines rows selection, on column header defines column selection |

src/commands.c

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ int CTRL_HOME;
1818
int CTRL_END;
1919
int CTRL_SHIFT_HOME;
2020
int CTRL_SHIFT_END;
21+
int CTRL_SHIFT_LEFT;
22+
int CTRL_SHIFT_RIGHT;
2123
int CTRL_LEFT;
2224
int CTRL_RIGHT;
2325
int SHIFT_LEFT;
@@ -66,6 +68,8 @@ initialize_special_keycodes()
6668
CTRL_END = CTL_END;
6769
CTRL_SHIFT_HOME = -1;
6870
CTRL_SHIFT_END = -1;
71+
CTRL_SHIFT_LEFT = -1;
72+
CTRL_SHIFT_RIGHT = -1;
6973
CTRL_RIGHT = CTL_RIGHT;
7074
CTRL_LEFT = CTL_LEFT;
7175
SHIFT_RIGHT = KEY_SRIGHT;
@@ -85,13 +89,35 @@ initialize_special_keycodes()
8589
CTRL_SHIFT_END = get_code("kEND6", 532);
8690
CTRL_RIGHT = get_code("kRIT5", 561);
8791
CTRL_LEFT = get_code("kLFT5", 546);
92+
CTRL_SHIFT_RIGHT = get_code("kRIT6", -1);
93+
CTRL_SHIFT_LEFT = get_code("kLFT6", -1);
8894
SHIFT_RIGHT = get_code("kRIT2", 402);
8995
SHIFT_LEFT = get_code("kLFT2", 393);
9096

9197
#endif
9298

9399
}
94100

101+
bool
102+
key_is_allowed_mark_mode_cursor(int c)
103+
{
104+
switch (c)
105+
{
106+
case KEY_SF:
107+
case KEY_SR:
108+
case KEY_SNEXT:
109+
case KEY_SPREVIOUS:
110+
case KEY_SLEFT:
111+
case KEY_SEND:
112+
return true;
113+
}
114+
115+
if (c == CTRL_SHIFT_LEFT || c == CTRL_SHIFT_RIGHT)
116+
return true;
117+
118+
return false;
119+
}
120+
95121
/*
96122
* For debug purposes
97123
*/
@@ -582,6 +608,12 @@ translate_event(int c, bool alt, Options *opts, int *nested_command)
582608
case KEY_SPREVIOUS:
583609
*nested_command = cmd_PageUp;
584610
return cmd_Mark_NestedCursorCommand;
611+
case KEY_SHOME:
612+
*nested_command = cmd_ShowFirstCol;
613+
return cmd_Mark_NestedCursorCommand;
614+
case KEY_SEND:
615+
*nested_command = cmd_ShowLastCol;
616+
return cmd_Mark_NestedCursorCommand;
585617
}
586618
}
587619

@@ -607,6 +639,16 @@ translate_event(int c, bool alt, Options *opts, int *nested_command)
607639
return cmd_MoveColumnLeft;
608640
else if (c == SHIFT_RIGHT)
609641
return cmd_MoveColumnRight;
642+
else if (c == CTRL_SHIFT_LEFT)
643+
{
644+
*nested_command = cmd_MoveColumnLeft;
645+
return cmd_Mark_NestedCursorCommand;
646+
}
647+
else if (c == CTRL_SHIFT_RIGHT)
648+
{
649+
*nested_command = cmd_MoveColumnRight;
650+
return cmd_Mark_NestedCursorCommand;
651+
}
610652

611653
return cmd_Invalid;
612654
}

src/commands.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,8 @@ extern int translate_event(int c, bool alt, Options *opts, int *nested_command);
168168
extern bool require_complete_load(int cmd);
169169

170170
extern bool is_cmd_RowNumToggle(int c, bool alt);
171+
extern bool key_is_allowed_mark_mode_cursor(int c);
172+
171173

172174
extern int cmd_get_theme(int cmd);
173175
extern int theme_get_cmd(int theme);

src/pspg.c

Lines changed: 86 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ typedef enum
162162
MARK_MODE_BLOCK, /* activated by F15 ~ Shift F3 */
163163
MARK_MODE_COLUMNS, /* activated by F15 ~ Shift F3, when row cursor is hidden */
164164
MARK_MODE_CURSOR, /* activated by SHIFT + CURSOR */
165+
MARK_MODE_CURSOR_COLUMNS, /* activated by SHIFT - vertical cursors */
165166
MARK_MODE_MOUSE, /* activated by CTRL + MOUSE */
166167
MARK_MODE_MOUSE_COLUMNS,/* activated by CTRL + MOUSE on column headers */
167168
MARK_MODE_MOUSE_BLOCK, /* activated by ALT + MOUSE */
@@ -1029,7 +1030,8 @@ redraw_screen(void)
10291030
mark_mode == MARK_MODE_MOUSE_COLUMNS)
10301031
ref_col = mouse_col;
10311032
else if (mark_mode == MARK_MODE_BLOCK ||
1032-
mark_mode == MARK_MODE_COLUMNS)
1033+
mark_mode == MARK_MODE_COLUMNS ||
1034+
mark_mode == MARK_MODE_CURSOR_COLUMNS)
10331035
ref_col = vertical_cursor_column;
10341036
else
10351037
ref_col = -1;
@@ -1213,8 +1215,7 @@ redraw_screen(void)
12131215
!opts->no_mouse &&
12141216
!(mark_mode == MARK_MODE_MOUSE ||
12151217
mark_mode == MARK_MODE_MOUSE_BLOCK ||
1216-
mark_mode == MARK_MODE_MOUSE_COLUMNS ||
1217-
mark_mode == MARK_MODE_COLUMNS))
1218+
mark_mode == MARK_MODE_MOUSE_COLUMNS))
12181219
{
12191220
long td = time_diff(current_sec, current_ms,
12201221
last_doupdate_sec, last_doupdate_ms);
@@ -2384,6 +2385,38 @@ throw_selection(ScrDesc *scrdesc, DataDesc *desc, MarkModeType *_mark_mode)
23842385
throw_searching(scrdesc, desc);
23852386
}
23862387

2388+
static bool
2389+
is_horizontal_move(int c)
2390+
{
2391+
switch (c)
2392+
{
2393+
case cmd_MoveColumnLeft:
2394+
case cmd_MoveColumnRight:
2395+
case cmd_ShowFirstCol:
2396+
case cmd_ShowLastCol:
2397+
return true;
2398+
}
2399+
2400+
return false;
2401+
}
2402+
2403+
static bool
2404+
is_vertical_move(int c)
2405+
{
2406+
switch (c)
2407+
{
2408+
case cmd_CursorUp:
2409+
case cmd_CursorDown:
2410+
case cmd_PageUp:
2411+
case cmd_PageDown:
2412+
case cmd_CursorFirstRow:
2413+
case cmd_CursorLastRow:
2414+
return true;
2415+
}
2416+
2417+
return false;
2418+
}
2419+
23872420
static bool
23882421
check_visible_vertical_cursor(DataDesc *desc,
23892422
Options *opts,
@@ -3533,13 +3566,9 @@ main(int argc, char *argv[])
35333566
}
35343567

35353568
/* Disable mark cursor mode immediately */
3536-
if (mark_mode == MARK_MODE_CURSOR &&
3537-
!(event_keycode == KEY_SF ||
3538-
event_keycode == KEY_SR ||
3539-
event_keycode == KEY_SNEXT ||
3540-
event_keycode == KEY_SPREVIOUS ||
3541-
event_keycode == KEY_LEFT ||
3542-
event_keycode == KEY_RIGHT ||
3569+
if ((mark_mode == MARK_MODE_CURSOR ||
3570+
mark_mode == MARK_MODE_CURSOR_COLUMNS) &&
3571+
!(key_is_allowed_mark_mode_cursor(event_keycode) ||
35433572
is_cmd_RowNumToggle(event_keycode, nced.alt)))
35443573
mark_mode = MARK_MODE_NONE;
35453574

@@ -4447,7 +4476,9 @@ main(int argc, char *argv[])
44474476
case cmd_Mark:
44484477
if (mark_mode != MARK_MODE_ROWS &&
44494478
mark_mode != MARK_MODE_BLOCK &&
4450-
mark_mode != MARK_MODE_COLUMNS)
4479+
mark_mode != MARK_MODE_COLUMNS &&
4480+
mark_mode != MARK_MODE_CURSOR &&
4481+
mark_mode != MARK_MODE_CURSOR_COLUMNS)
44514482
{
44524483
throw_selection(&scrdesc, &desc, &mark_mode);
44534484

@@ -4487,14 +4518,54 @@ main(int argc, char *argv[])
44874518
break;
44884519

44894520
case cmd_Mark_NestedCursorCommand:
4490-
if (mark_mode != MARK_MODE_CURSOR)
44914521
{
4522+
MarkModeType next_mark_mode = MARK_MODE_NONE;
4523+
int next_mark_mode_start_col = -1;
4524+
int next_mark_mode_start_row = -1;
4525+
bool is_horizontal_mv;
4526+
bool is_vertical_mv;
4527+
4528+
is_horizontal_mv = is_horizontal_move(nested_command);
4529+
is_vertical_mv = is_vertical_move(nested_command);
4530+
4531+
if (mark_mode == MARK_MODE_CURSOR && is_vertical_mv)
4532+
{
4533+
next_command = nested_command;
4534+
break;
4535+
}
4536+
4537+
if (mark_mode == MARK_MODE_CURSOR_COLUMNS && is_horizontal_mv)
4538+
{
4539+
next_command = nested_command;
4540+
break;
4541+
}
4542+
4543+
if (is_vertical_mv)
4544+
{
4545+
if (opts.no_cursor)
4546+
break;
4547+
4548+
next_mark_mode = MARK_MODE_CURSOR;
4549+
next_mark_mode_start_row = cursor_row;
4550+
}
4551+
4552+
if (is_horizontal_mv)
4553+
{
4554+
if (!opts.vertical_cursor)
4555+
break;
4556+
4557+
next_mark_mode = MARK_MODE_CURSOR_COLUMNS;
4558+
next_mark_mode_start_col = vertical_cursor_column;
4559+
}
4560+
44924561
throw_selection(&scrdesc, &desc, &mark_mode);
44934562

4494-
mark_mode = MARK_MODE_CURSOR;
4495-
mark_mode_start_row = cursor_row;
4563+
mark_mode = next_mark_mode;
4564+
mark_mode_start_row = next_mark_mode_start_row;
4565+
mark_mode_start_col = next_mark_mode_start_col;
4566+
4567+
next_command = nested_command;
44964568
}
4497-
next_command = nested_command;
44984569
break;
44994570

45004571
case cmd_Unmark:

0 commit comments

Comments
 (0)