--- button.c- 2023-05-09 02:09:12.000000000 -0600 +++ button.c 2023-06-12 15:31:34.487618338 -0600 @@ -2832,15 +2832,15 @@ static SelectUnit EvalSelectUnit(XtermWidget xw, - Time buttonDownTime, - SelectUnit defaultUnit, - unsigned int button) + XButtonEvent *event, + SelectUnit defaultUnit) { + Time buttonDownTime = event->time; TScreen *screen = TScreenOf(xw); SelectUnit result; int delta; - if (button != screen->lastButton) { + if (event->button != screen->lastButton) { delta = screen->multiClickTime + 1; } else if (screen->lastButtonUpTime == (Time) 0) { /* first time and once in a blue moon */ @@ -2853,7 +2853,11 @@ delta = (int) ((((Time) ~ 0) - screen->lastButtonUpTime) + buttonDownTime); } - if (delta > screen->multiClickTime) { + if ((event->state & ShiftMask)) { + screen->numberOfClicks = 1; + screen->andPasteToo = !(event->state & ControlMask); + result = Select_WORD; + } else if (delta > screen->multiClickTime) { screen->numberOfClicks = 1; result = defaultUnit; } else { @@ -2874,9 +2878,8 @@ if (SendMousePosition(xw, event)) return; screen->selectUnit = EvalSelectUnit(xw, - event->xbutton.time, - Select_CHAR, - event->xbutton.button); + &event->xbutton, + Select_CHAR); screen->replyToEmacs = False; #if OPT_READLINE @@ -2936,9 +2939,8 @@ CELL cell; screen->selectUnit = EvalSelectUnit(xw, - event->time, - Select_CHAR, - event->button); + event, + Select_CHAR); if (screen->numberOfClicks > 1) { PointToCELL(screen, event->y, event->x, &cell); screen->replyToEmacs = True; @@ -3102,6 +3104,10 @@ } } SelectSet(xw, event, params, num_params); + if (screen->andPasteToo) { + xtermGetSelection((Widget) xw, event->xbutton.time, params, num_params, NULL); + screen->andPasteToo = False; + } screen->eventMode = NORMAL; } @@ -3168,9 +3174,8 @@ || !(SCREEN_FLAG(screen, dclick3_deletes))) #endif screen->selectUnit = EvalSelectUnit(xw, - event->xbutton.time, - screen->selectUnit, - event->xbutton.button); + &event->xbutton, + screen->selectUnit); screen->replyToEmacs = False; #if OPT_READLINE --- ptyx.h- 2023-05-02 02:19:02.000000000 -0600 +++ ptyx.h 2023-06-12 15:31:34.487618338 -0600 @@ -2870,6 +2870,7 @@ Time selection_time; /* latest event timestamp */ Time lastButtonUpTime; unsigned lastButton; + Boolean andPasteToo; #define MAX_CUT_BUFFER 8 /* CUT_BUFFER0 to CUT_BUFFER7 */ #define MAX_SELECTIONS (MAX_SELECTION_CODES + MAX_CUT_BUFFER)