XFree86 3.1.2Ek - xterm patch #27 - T.Dickey
This patch fixes one of my long-term gripes: xterm's selection doesn't clearly
show what's being selected (as per David's request, it's controlled by a
resource, which defaults to the older behavior).
--------------------------------------------------------------------------------
charproc.c | 6 ++++++
ptyx.h | 1 +
screen.c | 22 ++++++++++++++++++++++
xterm.man | 9 ++++++++-
4 files changed, 37 insertions, 1 deletion
--------------------------------------------------------------------------------
Index: charproc.c
--- xterm-26+/charproc.c Tue Aug 20 15:08:28 1996
+++ xterm-27/charproc.c Wed Aug 21 21:15:31 1996
@@ -174,6 +174,7 @@
#define XtNeightBitOutput "eightBitOutput"
#define XtNeightBitControl "eightBitControl"
#define XtNgeometry "geometry"
+#define XtNhighlightSelection "highlightSelection"
#define XtNtekGeometry "tekGeometry"
#define XtNinternalBorder "internalBorder"
#define XtNjumpScroll "jumpScroll"
@@ -247,6 +248,7 @@
#define XtCEightBitOutput "EightBitOutput"
#define XtCEightBitControl "EightBitControl"
#define XtCGeometry "Geometry"
+#define XtCHighlightSelection "HighlightSelection"
#define XtCJumpScroll "JumpScroll"
#ifdef ALLOWLOGGING
#define XtCLogfile "Logfile"
@@ -439,6 +441,9 @@
{XtNcutToBeginningOfLine, XtCCutToBeginningOfLine, XtRBoolean, sizeof(Boolean),
XtOffsetOf(XtermWidgetRec, screen.cutToBeginningOfLine),
XtRBoolean, (XtPointer) &defaultTRUE},
+{XtNhighlightSelection,XtCHighlightSelection,XtRBoolean,
+ sizeof(Boolean),XtOffsetOf(XtermWidgetRec, screen.highlight_selection),
+ XtRBoolean, (XtPointer) &defaultFALSE},
{XtNbackground, XtCBackground, XtRPixel, sizeof(Pixel),
XtOffsetOf(XtermWidgetRec, core.background_pixel),
XtRString, "XtDefaultBackground"},
@@ -3119,6 +3124,7 @@
new->screen.charClass = request->screen.charClass;
new->screen.cutNewline = request->screen.cutNewline;
new->screen.cutToBeginningOfLine = request->screen.cutToBeginningOfLine;
+ new->screen.highlight_selection = request->screen.highlight_selection;
new->screen.always_highlight = request->screen.always_highlight;
new->screen.pointer_cursor = request->screen.pointer_cursor;
new->screen.input_eight_bits = request->screen.input_eight_bits;
Index: ptyx.h
--- xterm-26+/ptyx.h Tue Aug 13 14:51:20 1996
+++ xterm-27/ptyx.h Wed Aug 21 20:52:19 1996
@@ -506,6 +506,7 @@
char *charClass; /* for overriding word selection */
Boolean cutNewline; /* whether or not line cut has \n */
Boolean cutToBeginningOfLine; /* line cuts to BOL? */
+ Boolean highlight_selection; /* controls appearance of selection */
char *selection; /* the current selection */
int selection_size; /* size of allocated buffer */
int selection_length; /* number of significant bytes */
Index: screen.c
--- xterm-26+/screen.c Tue Aug 13 14:51:20 1996
+++ xterm-27/screen.c Wed Aug 21 21:12:25 1996
@@ -500,6 +500,28 @@
maxcol - screen->endHCol + 1, force);
maxcol = screen->endHCol - 1;
}
+
+ /*
+ * If we're highlighting because the user is doing cut/paste,
+ * trim the trailing blanks from the highlighted region so we're
+ * showing the actual extent of the text that'll be cut. If
+ * we're selecting a blank line, we'll highlight one column
+ * anyway.
+ *
+ * We don't do this if the mouse-hilite mode is set because that
+ * would be too confusing.
+ *
+ * The default if the highlightSelection resource isn't set will
+ * highlight the whole width of the terminal, which is easy to
+ * see, but harder to use (because trailing blanks aren't as
+ * apparent).
+ */
+ if (screen->highlight_selection
+ && maxcol >= screen->max_col
+ && screen->send_mouse_pos != 3)
+ while (maxcol > 0 && !(attrs[maxcol] & CHARDRAWN))
+ maxcol--;
+
/* remaining piece should be hilited */
hilite = True;
}
Index: xterm.man
--- xterm-26+/xterm.man Tue Aug 13 14:51:20 1996
+++ xterm-27/xterm.man Wed Aug 21 21:08:26 1996
@@ -769,11 +769,18 @@
.B "geometry (\fPclass\fB Geometry)"
Specifies the preferred size and position of the VT102 window.
.TP 8
+.B "highlightSelection (\fPclass\fB HighlightSelection)"
+If false, selecting with the mouse highlights all positions on the screen
+between the beginning of the selection and the current position.
+If true, \fIxterm\fP highlights only the positions that contain text that
+can be selected.
+The default is ``false.''
+.TP 8
.B "hpLowerleftBugCompat (\fPclass\fB HpLowerleftBugCompat)"
Specifies whether to work around a bug in HP's \fIxdb\fP,
which ignores termcap and always sends
ESC F to move to the lower left corner.
-``true'' causes xterm to interpret ESC F as a request to move to the
+``true'' causes \fIxterm\fP to interpret ESC F as a request to move to the
lower left corner of the screen. The default is ``false.''
.TP 8
.B "internalBorder (\fPclass\fB BorderWidth)"