top: prevent display corruption in Locate highlighting
There existed a small chance that the display could be corrupted when a search string was found within a row. For that to happen, conditions like these were needed: . a very short Locate string was active in some window . the string matched part of a terminfo <esc> sequence . that sequence was used in highlighting running tasks . the 'x' toggle was active (sort column highlighting) One solution to this potential problem was to manually turn off sort column highlighting before using Locate. But rather than rely on a user remedy, we'll automate. Since other top provisions were already being enforced when Locate was in use (off 'i' and/or 'u'/'U'), we'll now also force column highlighting off when the search string in a given window is not empty. However, unlike idle tasks and user filtering, when that search string *is* emptied, we restore highlighting for that window. (everything is perfectly justified plus right margins) (are completely filled, but of course it must be luck) Signed-off-by: Jim Warner <james.warner@comcast.net>
This commit is contained in:
parent
1da293bf59
commit
d9f7c76114
@ -90,7 +90,7 @@
|
|||||||
.
|
.
|
||||||
.\" Document /////////////////////////////////////////////////////////////
|
.\" Document /////////////////////////////////////////////////////////////
|
||||||
.\" ----------------------------------------------------------------------
|
.\" ----------------------------------------------------------------------
|
||||||
.TH TOP 1 "November 2012" "procps-ng" "User Commands"
|
.TH TOP 1 "January 2013" "procps-ng" "User Commands"
|
||||||
.\" ----------------------------------------------------------------------
|
.\" ----------------------------------------------------------------------
|
||||||
|
|
||||||
.\" ----------------------------------------------------------------------
|
.\" ----------------------------------------------------------------------
|
||||||
@ -1662,6 +1662,10 @@ available in \*(AM if the \*(CW's \*(TD has been toggled \*F.
|
|||||||
filtering \*F to ensure that every task is encountered.
|
filtering \*F to ensure that every task is encountered.
|
||||||
\*(XC 'i' and 'u/U' \*(CIs for additional information on how displayed tasks
|
\*(XC 'i' and 'u/U' \*(CIs for additional information on how displayed tasks
|
||||||
might be filtered.
|
might be filtered.
|
||||||
|
Additionally, \*(We will turn column highlighting \*F to prevent false
|
||||||
|
matches on internal non-display escape sequences.
|
||||||
|
Such highlighting will be restored when a window's search string is empty.
|
||||||
|
\*(XC 'x' \*(CI for additional information on sort column highlighting.
|
||||||
|
|
||||||
.\" ----------------------------------------------------------------------
|
.\" ----------------------------------------------------------------------
|
||||||
.SH 6. FILES
|
.SH 6. FILES
|
||||||
|
@ -3123,6 +3123,9 @@ static void configs_read (void) {
|
|||||||
goto default_or_error;
|
goto default_or_error;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#ifndef USE_X_COLHDR
|
||||||
|
OFFw(w, NOHICOL_xxx);
|
||||||
|
#endif
|
||||||
} // end: for (GROUPSMAX)
|
} // end: for (GROUPSMAX)
|
||||||
|
|
||||||
// any new addition(s) last, for older rcfiles compatibility...
|
// any new addition(s) last, for older rcfiles compatibility...
|
||||||
@ -3766,6 +3769,10 @@ static void find_string (int ch) {
|
|||||||
snprintf(Curwin->findstr, FNDBUFSIZ, "%s", linein(N_txt(GET_find_str_txt)));
|
snprintf(Curwin->findstr, FNDBUFSIZ, "%s", linein(N_txt(GET_find_str_txt)));
|
||||||
Curwin->findlen = strlen(Curwin->findstr);
|
Curwin->findlen = strlen(Curwin->findstr);
|
||||||
found = 0;
|
found = 0;
|
||||||
|
#ifndef USE_X_COLHDR
|
||||||
|
if (Curwin->findstr[0]) SETw(Curwin, NOHICOL_xxx);
|
||||||
|
else OFFw(Curwin, NOHICOL_xxx);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if (Curwin->findstr[0]) {
|
if (Curwin->findstr[0]) {
|
||||||
SETw(Curwin, INFINDS_xxx);
|
SETw(Curwin, INFINDS_xxx);
|
||||||
@ -4626,7 +4633,7 @@ static const char *task_show (const WIN_t *q, const proc_t *p) {
|
|||||||
case X_XON:
|
case X_XON:
|
||||||
case X_XOF:
|
case X_XOF:
|
||||||
cp = NULL;
|
cp = NULL;
|
||||||
if (!CHKw(q, INFINDS_xxx)) {
|
if (!CHKw(q, INFINDS_xxx | NOHICOL_xxx)) {
|
||||||
/* treat running tasks specially - entire row may get highlighted
|
/* treat running tasks specially - entire row may get highlighted
|
||||||
so we needn't turn it on and we MUST NOT turn it off */
|
so we needn't turn it on and we MUST NOT turn it off */
|
||||||
if (!('R' == p->state && CHKw(q, Show_HIROWS)))
|
if (!('R' == p->state && CHKw(q, Show_HIROWS)))
|
||||||
|
@ -298,6 +298,9 @@ typedef struct CPU_t {
|
|||||||
// these flag(s) have no command as such - they're for internal use
|
// these flag(s) have no command as such - they're for internal use
|
||||||
#define INFINDS_xxx 0x010000 // build rows for find_string, not display
|
#define INFINDS_xxx 0x010000 // build rows for find_string, not display
|
||||||
#define EQUWINS_xxx 0x000001 // rebalance all wins & tasks (off i,n,u/U)
|
#define EQUWINS_xxx 0x000001 // rebalance all wins & tasks (off i,n,u/U)
|
||||||
|
#ifndef USE_X_COLHDR
|
||||||
|
#define NOHICOL_xxx 0x100000 // must restrict Show_HICOLS temporarily
|
||||||
|
#endif
|
||||||
|
|
||||||
// Default flags if there's no rcfile to provide user customizations
|
// Default flags if there's no rcfile to provide user customizations
|
||||||
#define DEF_WINFLGS ( View_LOADAV | View_STATES | View_CPUSUM | View_MEMORY \
|
#define DEF_WINFLGS ( View_LOADAV | View_STATES | View_CPUSUM | View_MEMORY \
|
||||||
|
Loading…
Reference in New Issue
Block a user