@@ -1102,10 +1102,13 @@ static enum window_copy_cmd_action
1102
1102
window_copy_cmd_cursor_right (struct window_copy_cmd_state * cs )
1103
1103
{
1104
1104
struct window_mode_entry * wme = cs -> wme ;
1105
+ struct window_copy_mode_data * data = wme -> data ;
1105
1106
u_int np = wme -> prefix ;
1106
1107
1107
- for (; np != 0 ; np -- )
1108
- window_copy_cursor_right (wme , 0 );
1108
+ for (; np != 0 ; np -- ) {
1109
+ window_copy_cursor_right (wme , data -> screen .sel != NULL &&
1110
+ data -> rectflag );
1111
+ }
1109
1112
return (WINDOW_COPY_CMD_NOTHING );
1110
1113
}
1111
1114
@@ -4425,10 +4428,12 @@ window_copy_cursor_up(struct window_mode_entry *wme, int scroll_only)
4425
4428
struct window_copy_mode_data * data = wme -> data ;
4426
4429
struct screen * s = & data -> screen ;
4427
4430
u_int ox , oy , px , py ;
4431
+ int norectsel ;
4428
4432
4433
+ norectsel = data -> screen .sel == NULL || !data -> rectflag ;
4429
4434
oy = screen_hsize (data -> backing ) + data -> cy - data -> oy ;
4430
4435
ox = window_copy_find_length (wme , oy );
4431
- if (data -> cx != ox ) {
4436
+ if (norectsel && data -> cx != ox ) {
4432
4437
data -> lastcx = data -> cx ;
4433
4438
data -> lastsx = ox ;
4434
4439
}
@@ -4437,7 +4442,8 @@ window_copy_cursor_up(struct window_mode_entry *wme, int scroll_only)
4437
4442
window_copy_other_end (wme );
4438
4443
4439
4444
if (scroll_only || data -> cy == 0 ) {
4440
- data -> cx = data -> lastcx ;
4445
+ if (norectsel )
4446
+ data -> cx = data -> lastcx ;
4441
4447
window_copy_scroll_down (wme , 1 );
4442
4448
if (scroll_only ) {
4443
4449
if (data -> cy == screen_size_y (s ) - 1 )
@@ -4446,7 +4452,11 @@ window_copy_cursor_up(struct window_mode_entry *wme, int scroll_only)
4446
4452
window_copy_redraw_lines (wme , data -> cy , 2 );
4447
4453
}
4448
4454
} else {
4449
- window_copy_update_cursor (wme , data -> lastcx , data -> cy - 1 );
4455
+ if (norectsel ) {
4456
+ window_copy_update_cursor (wme , data -> lastcx ,
4457
+ data -> cy - 1 );
4458
+ } else
4459
+ window_copy_update_cursor (wme , data -> cx , data -> cy - 1 );
4450
4460
if (window_copy_update_selection (wme , 1 , 0 )) {
4451
4461
if (data -> cy == screen_size_y (s ) - 1 )
4452
4462
window_copy_redraw_lines (wme , data -> cy , 1 );
@@ -4455,7 +4465,7 @@ window_copy_cursor_up(struct window_mode_entry *wme, int scroll_only)
4455
4465
}
4456
4466
}
4457
4467
4458
- if (data -> screen . sel == NULL || ! data -> rectflag ) {
4468
+ if (norectsel ) {
4459
4469
py = screen_hsize (data -> backing ) + data -> cy - data -> oy ;
4460
4470
px = window_copy_find_length (wme , py );
4461
4471
if ((data -> cx >= data -> lastsx && data -> cx != px ) ||
@@ -4492,10 +4502,12 @@ window_copy_cursor_down(struct window_mode_entry *wme, int scroll_only)
4492
4502
struct window_copy_mode_data * data = wme -> data ;
4493
4503
struct screen * s = & data -> screen ;
4494
4504
u_int ox , oy , px , py ;
4505
+ int norectsel ;
4495
4506
4507
+ norectsel = data -> screen .sel == NULL || !data -> rectflag ;
4496
4508
oy = screen_hsize (data -> backing ) + data -> cy - data -> oy ;
4497
4509
ox = window_copy_find_length (wme , oy );
4498
- if (data -> cx != ox ) {
4510
+ if (norectsel && data -> cx != ox ) {
4499
4511
data -> lastcx = data -> cx ;
4500
4512
data -> lastsx = ox ;
4501
4513
}
@@ -4504,17 +4516,22 @@ window_copy_cursor_down(struct window_mode_entry *wme, int scroll_only)
4504
4516
window_copy_other_end (wme );
4505
4517
4506
4518
if (scroll_only || data -> cy == screen_size_y (s ) - 1 ) {
4507
- data -> cx = data -> lastcx ;
4519
+ if (norectsel )
4520
+ data -> cx = data -> lastcx ;
4508
4521
window_copy_scroll_up (wme , 1 );
4509
4522
if (scroll_only && data -> cy > 0 )
4510
4523
window_copy_redraw_lines (wme , data -> cy - 1 , 2 );
4511
4524
} else {
4512
- window_copy_update_cursor (wme , data -> lastcx , data -> cy + 1 );
4525
+ if (norectsel ) {
4526
+ window_copy_update_cursor (wme , data -> lastcx ,
4527
+ data -> cy + 1 );
4528
+ } else
4529
+ window_copy_update_cursor (wme , data -> cx , data -> cy + 1 );
4513
4530
if (window_copy_update_selection (wme , 1 , 0 ))
4514
4531
window_copy_redraw_lines (wme , data -> cy - 1 , 2 );
4515
4532
}
4516
4533
4517
- if (data -> screen . sel == NULL || ! data -> rectflag ) {
4534
+ if (norectsel ) {
4518
4535
py = screen_hsize (data -> backing ) + data -> cy - data -> oy ;
4519
4536
px = window_copy_find_length (wme , py );
4520
4537
if ((data -> cx >= data -> lastsx && data -> cx != px ) ||
0 commit comments