mirror of https://github.com/xzeldon/htop.git
Merge pull request #148 from nckx/display-basename
[PATCH] New setting: "Show program path"
This commit is contained in:
commit
4d44c35519
6
Action.c
6
Action.c
|
@ -211,6 +211,11 @@ static Htop_Reaction actionToggleUserlandThreads(State* st) {
|
||||||
return HTOP_RECALCULATE | HTOP_SAVE_SETTINGS;
|
return HTOP_RECALCULATE | HTOP_SAVE_SETTINGS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Htop_Reaction actionToggleProgramPath(State* st) {
|
||||||
|
st->settings->showProgramPath = !st->settings->showProgramPath;
|
||||||
|
return HTOP_REFRESH | HTOP_SAVE_SETTINGS;
|
||||||
|
}
|
||||||
|
|
||||||
static Htop_Reaction actionToggleTreeView(State* st) {
|
static Htop_Reaction actionToggleTreeView(State* st) {
|
||||||
st->settings->treeView = !st->settings->treeView;
|
st->settings->treeView = !st->settings->treeView;
|
||||||
if (st->settings->treeView) st->settings->direction = 1;
|
if (st->settings->treeView) st->settings->direction = 1;
|
||||||
|
@ -501,6 +506,7 @@ void Action_setBindings(Htop_Action* keys) {
|
||||||
keys['P'] = actionSortByCPU;
|
keys['P'] = actionSortByCPU;
|
||||||
keys['H'] = actionToggleUserlandThreads;
|
keys['H'] = actionToggleUserlandThreads;
|
||||||
keys['K'] = actionToggleKernelThreads;
|
keys['K'] = actionToggleKernelThreads;
|
||||||
|
keys['p'] = actionToggleProgramPath;
|
||||||
keys['t'] = actionToggleTreeView;
|
keys['t'] = actionToggleTreeView;
|
||||||
keys[KEY_F(5)] = actionToggleTreeView;
|
keys[KEY_F(5)] = actionToggleTreeView;
|
||||||
keys[KEY_F(4)] = actionIncFilter;
|
keys[KEY_F(4)] = actionIncFilter;
|
||||||
|
|
|
@ -87,6 +87,7 @@ DisplayOptionsPanel* DisplayOptionsPanel_new(Settings* settings, ScreenManager*
|
||||||
Panel_add(super, (Object*) CheckItem_new(strdup("Hide userland threads"), &(settings->hideUserlandThreads), false));
|
Panel_add(super, (Object*) CheckItem_new(strdup("Hide userland threads"), &(settings->hideUserlandThreads), false));
|
||||||
Panel_add(super, (Object*) CheckItem_new(strdup("Display threads in a different color"), &(settings->highlightThreads), false));
|
Panel_add(super, (Object*) CheckItem_new(strdup("Display threads in a different color"), &(settings->highlightThreads), false));
|
||||||
Panel_add(super, (Object*) CheckItem_new(strdup("Show custom thread names"), &(settings->showThreadNames), false));
|
Panel_add(super, (Object*) CheckItem_new(strdup("Show custom thread names"), &(settings->showThreadNames), false));
|
||||||
|
Panel_add(super, (Object*) CheckItem_new(strdup("Show program path"), &(settings->showProgramPath), true));
|
||||||
Panel_add(super, (Object*) CheckItem_new(strdup("Highlight program \"basename\""), &(settings->highlightBaseName), false));
|
Panel_add(super, (Object*) CheckItem_new(strdup("Highlight program \"basename\""), &(settings->highlightBaseName), false));
|
||||||
Panel_add(super, (Object*) CheckItem_new(strdup("Highlight large numbers in memory counters"), &(settings->highlightMegabytes), false));
|
Panel_add(super, (Object*) CheckItem_new(strdup("Highlight large numbers in memory counters"), &(settings->highlightMegabytes), false));
|
||||||
Panel_add(super, (Object*) CheckItem_new(strdup("Leave a margin around header"), &(settings->headerMargin), false));
|
Panel_add(super, (Object*) CheckItem_new(strdup("Leave a margin around header"), &(settings->headerMargin), false));
|
||||||
|
|
36
Process.c
36
Process.c
|
@ -275,26 +275,34 @@ void Process_printTime(RichString* str, unsigned long long totalHundredths) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void Process_writeCommand(Process* this, int attr, int baseattr, RichString* str) {
|
static inline void Process_writeCommand(Process* this, int attr, int baseattr, RichString* str) {
|
||||||
int start = RichString_size(str);
|
int start = RichString_size(str), finish = 0;
|
||||||
RichString_append(str, attr, this->comm);
|
char* comm = this->comm;
|
||||||
if (this->settings->highlightBaseName) {
|
|
||||||
int finish = RichString_size(str) - 1;
|
if (this->settings->highlightBaseName || !this->settings->showProgramPath) {
|
||||||
if (this->basenameOffset != -1)
|
int i, basename = 0;
|
||||||
finish = (start + this->basenameOffset) - 1;
|
for (i = 0; i < this->basenameOffset; i++) {
|
||||||
int colon = RichString_findChar(str, ':', start);
|
if (comm[i] == '/') {
|
||||||
if (colon != -1 && colon < finish) {
|
basename = i + 1;
|
||||||
finish = colon;
|
} else if (comm[i] == ':') {
|
||||||
} else {
|
finish = i + 1;
|
||||||
for (int i = finish - start; i >= 0; i--) {
|
|
||||||
if (this->comm[i] == '/') {
|
|
||||||
start += i+1;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!finish) {
|
||||||
|
if (this->settings->showProgramPath)
|
||||||
|
start += basename;
|
||||||
|
else
|
||||||
|
comm += basename;
|
||||||
|
finish = this->basenameOffset - basename;
|
||||||
}
|
}
|
||||||
|
finish += start - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
RichString_append(str, attr, comm);
|
||||||
|
|
||||||
|
if (this->settings->highlightBaseName)
|
||||||
RichString_setAttrn(str, baseattr, start, finish);
|
RichString_setAttrn(str, baseattr, start, finish);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void Process_outputRate(RichString* str, char* buffer, int n, double rate, int coloring) {
|
void Process_outputRate(RichString* str, char* buffer, int n, double rate, int coloring) {
|
||||||
int largeNumberColor = CRT_colors[LARGE_NUMBER];
|
int largeNumberColor = CRT_colors[LARGE_NUMBER];
|
||||||
|
|
|
@ -46,6 +46,7 @@ typedef struct Settings_ {
|
||||||
bool countCPUsFromZero;
|
bool countCPUsFromZero;
|
||||||
bool detailedCPUTime;
|
bool detailedCPUTime;
|
||||||
bool treeView;
|
bool treeView;
|
||||||
|
bool showProgramPath;
|
||||||
bool hideThreads;
|
bool hideThreads;
|
||||||
bool shadowOtherUsers;
|
bool shadowOtherUsers;
|
||||||
bool showThreadNames;
|
bool showThreadNames;
|
||||||
|
@ -186,6 +187,8 @@ static bool Settings_read(Settings* this, const char* fileName) {
|
||||||
this->shadowOtherUsers = atoi(option[1]);
|
this->shadowOtherUsers = atoi(option[1]);
|
||||||
} else if (String_eq(option[0], "show_thread_names")) {
|
} else if (String_eq(option[0], "show_thread_names")) {
|
||||||
this->showThreadNames = atoi(option[1]);
|
this->showThreadNames = atoi(option[1]);
|
||||||
|
} else if (String_eq(option[0], "show_program_path")) {
|
||||||
|
this->showProgramPath = atoi(option[1]);
|
||||||
} else if (String_eq(option[0], "highlight_base_name")) {
|
} else if (String_eq(option[0], "highlight_base_name")) {
|
||||||
this->highlightBaseName = atoi(option[1]);
|
this->highlightBaseName = atoi(option[1]);
|
||||||
} else if (String_eq(option[0], "highlight_megabytes")) {
|
} else if (String_eq(option[0], "highlight_megabytes")) {
|
||||||
|
@ -272,6 +275,7 @@ bool Settings_write(Settings* this) {
|
||||||
fprintf(fd, "hide_userland_threads=%d\n", (int) this->hideUserlandThreads);
|
fprintf(fd, "hide_userland_threads=%d\n", (int) this->hideUserlandThreads);
|
||||||
fprintf(fd, "shadow_other_users=%d\n", (int) this->shadowOtherUsers);
|
fprintf(fd, "shadow_other_users=%d\n", (int) this->shadowOtherUsers);
|
||||||
fprintf(fd, "show_thread_names=%d\n", (int) this->showThreadNames);
|
fprintf(fd, "show_thread_names=%d\n", (int) this->showThreadNames);
|
||||||
|
fprintf(fd, "show_program_path=%d\n", (int) this->showProgramPath);
|
||||||
fprintf(fd, "highlight_base_name=%d\n", (int) this->highlightBaseName);
|
fprintf(fd, "highlight_base_name=%d\n", (int) this->highlightBaseName);
|
||||||
fprintf(fd, "highlight_megabytes=%d\n", (int) this->highlightMegabytes);
|
fprintf(fd, "highlight_megabytes=%d\n", (int) this->highlightMegabytes);
|
||||||
fprintf(fd, "highlight_threads=%d\n", (int) this->highlightThreads);
|
fprintf(fd, "highlight_threads=%d\n", (int) this->highlightThreads);
|
||||||
|
|
|
@ -37,6 +37,7 @@ typedef struct Settings_ {
|
||||||
bool countCPUsFromZero;
|
bool countCPUsFromZero;
|
||||||
bool detailedCPUTime;
|
bool detailedCPUTime;
|
||||||
bool treeView;
|
bool treeView;
|
||||||
|
bool showProgramPath;
|
||||||
bool hideThreads;
|
bool hideThreads;
|
||||||
bool shadowOtherUsers;
|
bool shadowOtherUsers;
|
||||||
bool showThreadNames;
|
bool showThreadNames;
|
||||||
|
|
|
@ -151,6 +151,9 @@ Hide user threads: on systems that represent them differently than ordinary
|
||||||
processes (such as recent NPTL-based systems), this can hide threads from
|
processes (such as recent NPTL-based systems), this can hide threads from
|
||||||
userspace processes in the process list. (This is a toggle key.)
|
userspace processes in the process list. (This is a toggle key.)
|
||||||
.TP
|
.TP
|
||||||
|
.B p
|
||||||
|
Show full paths to running programs, where applicable. (This is a toggle key.)
|
||||||
|
.TP
|
||||||
.B Ctrl-L
|
.B Ctrl-L
|
||||||
Refresh: redraw screen and recalculate values.
|
Refresh: redraw screen and recalculate values.
|
||||||
.TP
|
.TP
|
||||||
|
|
Loading…
Reference in New Issue