mirror of https://github.com/xzeldon/htop.git
Introduce screen tabs
This commit is contained in:
parent
e77a16f4ae
commit
8c43218aa0
28
Action.c
28
Action.c
|
@ -26,6 +26,7 @@ in the source distribution for its full text.
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
@ -80,7 +81,7 @@ Object* Action_pickFromVector(State* st, Panel* list, int x) {
|
||||||
header->pl->following = pid;
|
header->pl->following = pid;
|
||||||
unfollow = true;
|
unfollow = true;
|
||||||
}
|
}
|
||||||
ScreenManager_run(scr, &panelFocus, &ch);
|
ScreenManager_run(scr, &panelFocus, &ch, NULL);
|
||||||
if (unfollow) {
|
if (unfollow) {
|
||||||
header->pl->following = -1;
|
header->pl->following = -1;
|
||||||
}
|
}
|
||||||
|
@ -106,7 +107,7 @@ static void Action_runSetup(Settings* settings, const Header* header, ProcessLis
|
||||||
CategoriesPanel_makeMetersPage(panelCategories);
|
CategoriesPanel_makeMetersPage(panelCategories);
|
||||||
Panel* panelFocus;
|
Panel* panelFocus;
|
||||||
int ch;
|
int ch;
|
||||||
ScreenManager_run(scr, &panelFocus, &ch);
|
ScreenManager_run(scr, &panelFocus, &ch, "Setup");
|
||||||
ScreenManager_delete(scr);
|
ScreenManager_delete(scr);
|
||||||
if (settings->changed) {
|
if (settings->changed) {
|
||||||
Header_writeBackToSettings(header);
|
Header_writeBackToSettings(header);
|
||||||
|
@ -307,14 +308,33 @@ static Htop_Reaction actionNextScreen(State* st) {
|
||||||
|
|
||||||
static Htop_Reaction actionPrevScreen(State* st) {
|
static Htop_Reaction actionPrevScreen(State* st) {
|
||||||
Settings* settings = st->settings;
|
Settings* settings = st->settings;
|
||||||
settings->ssIndex--;
|
if (settings->ssIndex == 0) {
|
||||||
if (settings->ssIndex == -1) {
|
|
||||||
settings->ssIndex = settings->nScreens - 1;
|
settings->ssIndex = settings->nScreens - 1;
|
||||||
|
} else {
|
||||||
|
settings->ssIndex--;
|
||||||
}
|
}
|
||||||
settings->ss = settings->screens[settings->ssIndex];
|
settings->ss = settings->screens[settings->ssIndex];
|
||||||
return HTOP_REFRESH;
|
return HTOP_REFRESH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Htop_Reaction Action_setScreenTab(Settings* settings, int x) {
|
||||||
|
int s = 2;
|
||||||
|
for (unsigned int i = 0; i < settings->nScreens; i++) {
|
||||||
|
if (x < s) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
const char* name = settings->screens[i]->name;
|
||||||
|
int len = strlen(name);
|
||||||
|
if (x <= s + len + 1) {
|
||||||
|
settings->ssIndex = i;
|
||||||
|
settings->ss = settings->screens[i];
|
||||||
|
return HTOP_REFRESH;
|
||||||
|
}
|
||||||
|
s += len + 3;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static Htop_Reaction actionSetAffinity(State* st) {
|
static Htop_Reaction actionSetAffinity(State* st) {
|
||||||
if (st->pl->cpuCount == 1)
|
if (st->pl->cpuCount == 1)
|
||||||
return HTOP_OK;
|
return HTOP_OK;
|
||||||
|
|
2
Action.h
2
Action.h
|
@ -49,6 +49,8 @@ Htop_Reaction Action_setSortKey(Settings* settings, ProcessField sortKey);
|
||||||
|
|
||||||
// ----------------------------------------
|
// ----------------------------------------
|
||||||
|
|
||||||
|
Htop_Reaction Action_setScreenTab(Settings* settings, int x);
|
||||||
|
|
||||||
Htop_Reaction Action_follow(State* st);
|
Htop_Reaction Action_follow(State* st);
|
||||||
|
|
||||||
|
|
||||||
|
|
28
CRT.c
28
CRT.c
|
@ -130,6 +130,10 @@ typedef enum ColorElements_ {
|
||||||
CPU_STEAL,
|
CPU_STEAL,
|
||||||
CPU_GUEST,
|
CPU_GUEST,
|
||||||
PANEL_EDIT,
|
PANEL_EDIT,
|
||||||
|
SCREENS_OTH_BORDER,
|
||||||
|
SCREENS_OTH_TEXT,
|
||||||
|
SCREENS_CUR_BORDER,
|
||||||
|
SCREENS_CUR_TEXT,
|
||||||
LAST_COLORELEMENT
|
LAST_COLORELEMENT
|
||||||
} ColorElements;
|
} ColorElements;
|
||||||
|
|
||||||
|
@ -235,6 +239,10 @@ int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
|
||||||
[CPU_STEAL] = ColorPair(Cyan,Black),
|
[CPU_STEAL] = ColorPair(Cyan,Black),
|
||||||
[CPU_GUEST] = ColorPair(Cyan,Black),
|
[CPU_GUEST] = ColorPair(Cyan,Black),
|
||||||
[PANEL_EDIT] = ColorPair(White,Blue),
|
[PANEL_EDIT] = ColorPair(White,Blue),
|
||||||
|
[SCREENS_OTH_BORDER] = ColorPair(Blue,Blue),
|
||||||
|
[SCREENS_OTH_TEXT] = ColorPair(Black,Blue),
|
||||||
|
[SCREENS_CUR_BORDER] = ColorPair(Green,Green),
|
||||||
|
[SCREENS_CUR_TEXT] = ColorPair(Black,Green),
|
||||||
},
|
},
|
||||||
[COLORSCHEME_MONOCHROME] = {
|
[COLORSCHEME_MONOCHROME] = {
|
||||||
[RESET_COLOR] = A_NORMAL,
|
[RESET_COLOR] = A_NORMAL,
|
||||||
|
@ -295,6 +303,10 @@ int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
|
||||||
[CPU_STEAL] = A_REVERSE,
|
[CPU_STEAL] = A_REVERSE,
|
||||||
[CPU_GUEST] = A_REVERSE,
|
[CPU_GUEST] = A_REVERSE,
|
||||||
[PANEL_EDIT] = A_BOLD,
|
[PANEL_EDIT] = A_BOLD,
|
||||||
|
[SCREENS_OTH_BORDER] = A_DIM,
|
||||||
|
[SCREENS_OTH_TEXT] = A_DIM,
|
||||||
|
[SCREENS_CUR_BORDER] = A_REVERSE,
|
||||||
|
[SCREENS_CUR_TEXT] = A_REVERSE,
|
||||||
},
|
},
|
||||||
[COLORSCHEME_BLACKONWHITE] = {
|
[COLORSCHEME_BLACKONWHITE] = {
|
||||||
[RESET_COLOR] = ColorPair(Black,White),
|
[RESET_COLOR] = ColorPair(Black,White),
|
||||||
|
@ -355,6 +367,10 @@ int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
|
||||||
[CPU_STEAL] = ColorPair(Cyan,White),
|
[CPU_STEAL] = ColorPair(Cyan,White),
|
||||||
[CPU_GUEST] = ColorPair(Cyan,White),
|
[CPU_GUEST] = ColorPair(Cyan,White),
|
||||||
[PANEL_EDIT] = ColorPair(White,Blue),
|
[PANEL_EDIT] = ColorPair(White,Blue),
|
||||||
|
[SCREENS_OTH_BORDER] = A_BOLD | ColorPair(Black,White),
|
||||||
|
[SCREENS_OTH_TEXT] = A_BOLD | ColorPair(Black,White),
|
||||||
|
[SCREENS_CUR_BORDER] = ColorPair(Green,Green),
|
||||||
|
[SCREENS_CUR_TEXT] = ColorPair(Black,Green),
|
||||||
},
|
},
|
||||||
[COLORSCHEME_LIGHTTERMINAL] = {
|
[COLORSCHEME_LIGHTTERMINAL] = {
|
||||||
[RESET_COLOR] = ColorPair(Black,Black),
|
[RESET_COLOR] = ColorPair(Black,Black),
|
||||||
|
@ -415,6 +431,10 @@ int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
|
||||||
[CPU_STEAL] = ColorPair(Black,Black),
|
[CPU_STEAL] = ColorPair(Black,Black),
|
||||||
[CPU_GUEST] = ColorPair(Black,Black),
|
[CPU_GUEST] = ColorPair(Black,Black),
|
||||||
[PANEL_EDIT] = ColorPair(White,Blue),
|
[PANEL_EDIT] = ColorPair(White,Blue),
|
||||||
|
[SCREENS_OTH_BORDER] = ColorPair(Blue,Black),
|
||||||
|
[SCREENS_OTH_TEXT] = ColorPair(Blue,Black),
|
||||||
|
[SCREENS_CUR_BORDER] = ColorPair(Green,Green),
|
||||||
|
[SCREENS_CUR_TEXT] = ColorPair(Black,Green),
|
||||||
},
|
},
|
||||||
[COLORSCHEME_MIDNIGHT] = {
|
[COLORSCHEME_MIDNIGHT] = {
|
||||||
[RESET_COLOR] = ColorPair(White,Blue),
|
[RESET_COLOR] = ColorPair(White,Blue),
|
||||||
|
@ -475,6 +495,10 @@ int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
|
||||||
[CPU_STEAL] = ColorPair(White,Blue),
|
[CPU_STEAL] = ColorPair(White,Blue),
|
||||||
[CPU_GUEST] = ColorPair(White,Blue),
|
[CPU_GUEST] = ColorPair(White,Blue),
|
||||||
[PANEL_EDIT] = ColorPair(White,Blue),
|
[PANEL_EDIT] = ColorPair(White,Blue),
|
||||||
|
[SCREENS_OTH_BORDER] = A_BOLD | ColorPair(Yellow,Blue),
|
||||||
|
[SCREENS_OTH_TEXT] = ColorPair(Cyan,Blue),
|
||||||
|
[SCREENS_CUR_BORDER] = ColorPair(Cyan,Cyan),
|
||||||
|
[SCREENS_CUR_TEXT] = ColorPair(Black,Cyan),
|
||||||
},
|
},
|
||||||
[COLORSCHEME_BLACKNIGHT] = {
|
[COLORSCHEME_BLACKNIGHT] = {
|
||||||
[RESET_COLOR] = ColorPair(Cyan,Black),
|
[RESET_COLOR] = ColorPair(Cyan,Black),
|
||||||
|
@ -535,6 +559,10 @@ int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
|
||||||
[CPU_STEAL] = ColorPair(Cyan,Black),
|
[CPU_STEAL] = ColorPair(Cyan,Black),
|
||||||
[CPU_GUEST] = ColorPair(Cyan,Black),
|
[CPU_GUEST] = ColorPair(Cyan,Black),
|
||||||
[PANEL_EDIT] = ColorPair(White,Cyan),
|
[PANEL_EDIT] = ColorPair(White,Cyan),
|
||||||
|
[SCREENS_OTH_BORDER] = ColorPair(White,Black),
|
||||||
|
[SCREENS_OTH_TEXT] = ColorPair(Cyan,Black),
|
||||||
|
[SCREENS_CUR_BORDER] = A_BOLD | ColorPair(White,Black),
|
||||||
|
[SCREENS_CUR_TEXT] = A_BOLD | ColorPair(Green,Black),
|
||||||
},
|
},
|
||||||
[COLORSCHEME_BROKENGRAY] = { 0 } // dynamically generated.
|
[COLORSCHEME_BROKENGRAY] = { 0 } // dynamically generated.
|
||||||
};
|
};
|
||||||
|
|
4
CRT.h
4
CRT.h
|
@ -118,6 +118,10 @@ typedef enum ColorElements_ {
|
||||||
CPU_STEAL,
|
CPU_STEAL,
|
||||||
CPU_GUEST,
|
CPU_GUEST,
|
||||||
PANEL_EDIT,
|
PANEL_EDIT,
|
||||||
|
SCREENS_OTH_BORDER,
|
||||||
|
SCREENS_OTH_TEXT,
|
||||||
|
SCREENS_CUR_BORDER,
|
||||||
|
SCREENS_CUR_TEXT,
|
||||||
LAST_COLORELEMENT
|
LAST_COLORELEMENT
|
||||||
} ColorElements;
|
} ColorElements;
|
||||||
|
|
||||||
|
|
|
@ -145,7 +145,7 @@ CategoriesPanel* CategoriesPanel_new(ScreenManager* scr, Settings* settings, Hea
|
||||||
this->settings = settings;
|
this->settings = settings;
|
||||||
this->header = header;
|
this->header = header;
|
||||||
this->pl = pl;
|
this->pl = pl;
|
||||||
Panel_setHeader(super, "Setup");
|
Panel_setHeader(super, "Categories");
|
||||||
Panel_add(super, (Object*) ListItem_new("Meters", 0));
|
Panel_add(super, (Object*) ListItem_new("Meters", 0));
|
||||||
Panel_add(super, (Object*) ListItem_new("Display options", 0));
|
Panel_add(super, (Object*) ListItem_new("Display options", 0));
|
||||||
Panel_add(super, (Object*) ListItem_new("Colors", 0));
|
Panel_add(super, (Object*) ListItem_new("Colors", 0));
|
||||||
|
|
|
@ -96,5 +96,6 @@ DisplayOptionsPanel* DisplayOptionsPanel_new(Settings* settings, ScreenManager*
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Count CPUs from 0 instead of 1"), &(settings->countCPUsFromZero)));
|
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Count CPUs from 0 instead of 1"), &(settings->countCPUsFromZero)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Update process names on every refresh"), &(settings->updateProcessNames)));
|
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Update process names on every refresh"), &(settings->updateProcessNames)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Add guest time in CPU meter percentage"), &(settings->accountGuestInCPUMeter)));
|
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Add guest time in CPU meter percentage"), &(settings->accountGuestInCPUMeter)));
|
||||||
|
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Show tabs for screens"), &(settings->screenTabs)));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
3
Header.c
3
Header.c
|
@ -211,6 +211,9 @@ int Header_calculateHeight(Header* this) {
|
||||||
}
|
}
|
||||||
maxHeight = MAX(maxHeight, height);
|
maxHeight = MAX(maxHeight, height);
|
||||||
}
|
}
|
||||||
|
if (this->settings->screenTabs) {
|
||||||
|
maxHeight++;
|
||||||
|
}
|
||||||
this->height = maxHeight;
|
this->height = maxHeight;
|
||||||
this->pad = pad;
|
this->pad = pad;
|
||||||
return maxHeight;
|
return maxHeight;
|
||||||
|
|
|
@ -88,6 +88,10 @@ static HandlerResult MainPanel_eventHandler(Panel* super, int ch) {
|
||||||
}
|
}
|
||||||
reaction |= HTOP_RECALCULATE | HTOP_REDRAW_BAR | HTOP_SAVE_SETTINGS;
|
reaction |= HTOP_RECALCULATE | HTOP_REDRAW_BAR | HTOP_SAVE_SETTINGS;
|
||||||
result = HANDLED;
|
result = HANDLED;
|
||||||
|
} else if (EVENT_IS_SCREEN_TAB_CLICK(ch)) {
|
||||||
|
int x = EVENT_SCREEN_TAB_GET_X(ch);
|
||||||
|
reaction |= Action_setScreenTab(settings, x);
|
||||||
|
result = HANDLED;
|
||||||
} else if (ch != ERR && this->inc->active) {
|
} else if (ch != ERR && this->inc->active) {
|
||||||
bool filterChanged = IncSet_handleKey(this->inc, ch, super, (IncMode_GetPanelValue) MainPanel_getValue, NULL);
|
bool filterChanged = IncSet_handleKey(this->inc, ch, super, (IncMode_GetPanelValue) MainPanel_getValue, NULL);
|
||||||
if (filterChanged) {
|
if (filterChanged) {
|
||||||
|
|
6
Panel.c
6
Panel.c
|
@ -40,8 +40,12 @@ typedef enum HandlerResult_ {
|
||||||
#define EVENT_SET_SELECTED -1
|
#define EVENT_SET_SELECTED -1
|
||||||
|
|
||||||
#define EVENT_HEADER_CLICK(x_) (-10000 + x_)
|
#define EVENT_HEADER_CLICK(x_) (-10000 + x_)
|
||||||
#define EVENT_IS_HEADER_CLICK(ev_) (ev_ >= -10000 && ev_ <= -9000)
|
|
||||||
#define EVENT_HEADER_CLICK_GET_X(ev_) (ev_ + 10000)
|
#define EVENT_HEADER_CLICK_GET_X(ev_) (ev_ + 10000)
|
||||||
|
#define EVENT_IS_HEADER_CLICK(ev_) (ev_ >= -10000 && ev_ < -9000)
|
||||||
|
|
||||||
|
#define EVENT_SCREEN_TAB_CLICK(x_) (-20000 + x_)
|
||||||
|
#define EVENT_SCREEN_TAB_GET_X(ev_) (ev_ + 20000)
|
||||||
|
#define EVENT_IS_SCREEN_TAB_CLICK(ev_) (ev_ >= -20000 && ev_ < -10000)
|
||||||
|
|
||||||
typedef HandlerResult(*Panel_EventHandler)(Panel*, int);
|
typedef HandlerResult(*Panel_EventHandler)(Panel*, int);
|
||||||
|
|
||||||
|
|
6
Panel.h
6
Panel.h
|
@ -29,8 +29,12 @@ typedef enum HandlerResult_ {
|
||||||
#define EVENT_SET_SELECTED -1
|
#define EVENT_SET_SELECTED -1
|
||||||
|
|
||||||
#define EVENT_HEADER_CLICK(x_) (-10000 + x_)
|
#define EVENT_HEADER_CLICK(x_) (-10000 + x_)
|
||||||
#define EVENT_IS_HEADER_CLICK(ev_) (ev_ >= -10000 && ev_ <= -9000)
|
|
||||||
#define EVENT_HEADER_CLICK_GET_X(ev_) (ev_ + 10000)
|
#define EVENT_HEADER_CLICK_GET_X(ev_) (ev_ + 10000)
|
||||||
|
#define EVENT_IS_HEADER_CLICK(ev_) (ev_ >= -10000 && ev_ < -9000)
|
||||||
|
|
||||||
|
#define EVENT_SCREEN_TAB_CLICK(x_) (-20000 + x_)
|
||||||
|
#define EVENT_SCREEN_TAB_GET_X(ev_) (ev_ + 20000)
|
||||||
|
#define EVENT_IS_SCREEN_TAB_CLICK(ev_) (ev_ >= -20000 && ev_ < -10000)
|
||||||
|
|
||||||
typedef HandlerResult(*Panel_EventHandler)(Panel*, int);
|
typedef HandlerResult(*Panel_EventHandler)(Panel*, int);
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ in the source distribution for its full text.
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
@ -35,6 +36,7 @@ typedef struct ScreenManager_ {
|
||||||
int y2;
|
int y2;
|
||||||
Orientation orientation;
|
Orientation orientation;
|
||||||
Vector* panels;
|
Vector* panels;
|
||||||
|
const char* name;
|
||||||
int panelCount;
|
int panelCount;
|
||||||
const Header* header;
|
const Header* header;
|
||||||
const Settings* settings;
|
const Settings* settings;
|
||||||
|
@ -160,7 +162,50 @@ static void checkRecalculation(ScreenManager* this, double* oldTime, int* sortTi
|
||||||
*rescan = false;
|
*rescan = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool drawTab(int* y, int* x, int l, const char* name, bool cur) {
|
||||||
|
attrset(CRT_colors[cur ? SCREENS_CUR_BORDER : SCREENS_OTH_BORDER]);
|
||||||
|
mvaddch(*y, *x, '[');
|
||||||
|
(*x)++;
|
||||||
|
if (*x >= l) return false;
|
||||||
|
int nameLen = strlen(name);
|
||||||
|
int n = MIN(l - *x, nameLen);
|
||||||
|
attrset(CRT_colors[cur ? SCREENS_CUR_TEXT : SCREENS_OTH_TEXT]);
|
||||||
|
mvaddnstr(*y, *x, name, n);
|
||||||
|
*x += n;
|
||||||
|
if (*x >= l) return false;
|
||||||
|
attrset(CRT_colors[cur ? SCREENS_CUR_BORDER : SCREENS_OTH_BORDER]);
|
||||||
|
mvaddch(*y, *x, ']');
|
||||||
|
*x += 2;
|
||||||
|
if (*x >= l) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ScreenManager_drawScreenTabs(ScreenManager* this) {
|
||||||
|
ScreenSettings** screens = this->settings->screens;
|
||||||
|
int cur = this->settings->ssIndex;
|
||||||
|
int l = COLS;
|
||||||
|
Panel* panel = (Panel*) Vector_get(this->panels, 0);
|
||||||
|
int y = panel->y - 1;
|
||||||
|
int x = 2;
|
||||||
|
|
||||||
|
if (this->name) {
|
||||||
|
drawTab(&y, &x, l, this->name, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int s = 0; screens[s]; s++) {
|
||||||
|
bool ok = drawTab(&y, &x, l, screens[s]->name, s == cur);
|
||||||
|
if (!ok) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
attrset(CRT_colors[RESET_COLOR]);
|
||||||
|
}
|
||||||
|
|
||||||
static void ScreenManager_drawPanels(ScreenManager* this, int focus) {
|
static void ScreenManager_drawPanels(ScreenManager* this, int focus) {
|
||||||
|
if (this->settings->screenTabs) {
|
||||||
|
ScreenManager_drawScreenTabs(this);
|
||||||
|
}
|
||||||
int nPanels = this->panelCount;
|
int nPanels = this->panelCount;
|
||||||
for (int i = 0; i < nPanels; i++) {
|
for (int i = 0; i < nPanels; i++) {
|
||||||
Panel* panel = (Panel*) Vector_get(this->panels, i);
|
Panel* panel = (Panel*) Vector_get(this->panels, i);
|
||||||
|
@ -179,7 +224,7 @@ static Panel* setCurrentPanel(ScreenManager* this, int focus) {
|
||||||
return panel;
|
return panel;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
|
void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey, char* name) {
|
||||||
bool quit = false;
|
bool quit = false;
|
||||||
int focus = 0;
|
int focus = 0;
|
||||||
|
|
||||||
|
@ -195,6 +240,8 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
|
||||||
bool rescan = false;
|
bool rescan = false;
|
||||||
int sortTimeout = 0;
|
int sortTimeout = 0;
|
||||||
int resetSortTimeout = 5;
|
int resetSortTimeout = 5;
|
||||||
|
|
||||||
|
this->name = name;
|
||||||
|
|
||||||
while (!quit) {
|
while (!quit) {
|
||||||
if (this->header) {
|
if (this->header) {
|
||||||
|
@ -224,6 +271,9 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
|
||||||
if (mevent.y == panel->y) {
|
if (mevent.y == panel->y) {
|
||||||
ch = EVENT_HEADER_CLICK(mevent.x - panel->x);
|
ch = EVENT_HEADER_CLICK(mevent.x - panel->x);
|
||||||
break;
|
break;
|
||||||
|
} else if (this->settings->screenTabs && mevent.y == panel->y - 1) {
|
||||||
|
ch = EVENT_SCREEN_TAB_CLICK(mevent.x);
|
||||||
|
break;
|
||||||
} else if (mevent.y > panel->y && mevent.y <= panel->y+panel->h) {
|
} else if (mevent.y > panel->y && mevent.y <= panel->y+panel->h) {
|
||||||
ch = KEY_MOUSE;
|
ch = KEY_MOUSE;
|
||||||
if (panel == panelFocus || this->allowFocusChange) {
|
if (panel == panelFocus || this->allowFocusChange) {
|
||||||
|
|
|
@ -27,6 +27,7 @@ typedef struct ScreenManager_ {
|
||||||
int y2;
|
int y2;
|
||||||
Orientation orientation;
|
Orientation orientation;
|
||||||
Vector* panels;
|
Vector* panels;
|
||||||
|
const char* name;
|
||||||
int panelCount;
|
int panelCount;
|
||||||
const Header* header;
|
const Header* header;
|
||||||
const Settings* settings;
|
const Settings* settings;
|
||||||
|
@ -49,6 +50,6 @@ Panel* ScreenManager_remove(ScreenManager* this, int idx);
|
||||||
|
|
||||||
void ScreenManager_resize(ScreenManager* this, int x1, int y1, int x2, int y2);
|
void ScreenManager_resize(ScreenManager* this, int x1, int y1, int x2, int y2);
|
||||||
|
|
||||||
void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey);
|
void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey, char* name);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -149,6 +149,7 @@ static void rebuildSettingsArray(Panel* super) {
|
||||||
ScreenListItem* item = (ScreenListItem*) Panel_get(super, i);
|
ScreenListItem* item = (ScreenListItem*) Panel_get(super, i);
|
||||||
this->settings->screens[i] = item->ss;
|
this->settings->screens[i] = item->ss;
|
||||||
}
|
}
|
||||||
|
this->settings->nScreens = n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void addNewScreen(Panel* super) {
|
static void addNewScreen(Panel* super) {
|
||||||
|
|
|
@ -73,6 +73,7 @@ typedef struct Settings_ {
|
||||||
bool updateProcessNames;
|
bool updateProcessNames;
|
||||||
bool accountGuestInCPUMeter;
|
bool accountGuestInCPUMeter;
|
||||||
bool headerMargin;
|
bool headerMargin;
|
||||||
|
bool screenTabs;
|
||||||
|
|
||||||
bool changed;
|
bool changed;
|
||||||
} Settings;
|
} Settings;
|
||||||
|
@ -267,6 +268,7 @@ ScreenSettings* Settings_newScreen(Settings* this, const char* name, const char*
|
||||||
ss->direction = 1;
|
ss->direction = 1;
|
||||||
ss->treeView = 0;
|
ss->treeView = 0;
|
||||||
readFields(ss->fields, &(ss->flags), line);
|
readFields(ss->fields, &(ss->flags), line);
|
||||||
|
ss->sortKey = ss->fields[0];
|
||||||
this->screens[this->nScreens] = ss;
|
this->screens[this->nScreens] = ss;
|
||||||
this->nScreens++;
|
this->nScreens++;
|
||||||
this->screens = xRealloc(this->screens, sizeof(ScreenSettings*) * (this->nScreens + 1));
|
this->screens = xRealloc(this->screens, sizeof(ScreenSettings*) * (this->nScreens + 1));
|
||||||
|
@ -331,6 +333,8 @@ static bool Settings_read(Settings* this, const char* fileName) {
|
||||||
this->highlightThreads = atoi(option[1]);
|
this->highlightThreads = atoi(option[1]);
|
||||||
} else if (String_eq(option[0], "header_margin")) {
|
} else if (String_eq(option[0], "header_margin")) {
|
||||||
this->headerMargin = atoi(option[1]);
|
this->headerMargin = atoi(option[1]);
|
||||||
|
} else if (String_eq(option[0], "screen_tabs")) {
|
||||||
|
this->screenTabs = atoi(option[1]);
|
||||||
} else if (String_eq(option[0], "expand_system_time")) {
|
} else if (String_eq(option[0], "expand_system_time")) {
|
||||||
// Compatibility option.
|
// Compatibility option.
|
||||||
this->detailedCPUTime = atoi(option[1]);
|
this->detailedCPUTime = atoi(option[1]);
|
||||||
|
@ -443,6 +447,7 @@ bool Settings_write(Settings* this) {
|
||||||
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);
|
||||||
fprintf(fd, "header_margin=%d\n", (int) this->headerMargin);
|
fprintf(fd, "header_margin=%d\n", (int) this->headerMargin);
|
||||||
|
fprintf(fd, "screen_tabs=%d\n", (int) this->screenTabs);
|
||||||
fprintf(fd, "detailed_cpu_time=%d\n", (int) this->detailedCPUTime);
|
fprintf(fd, "detailed_cpu_time=%d\n", (int) this->detailedCPUTime);
|
||||||
fprintf(fd, "cpu_count_from_zero=%d\n", (int) this->countCPUsFromZero);
|
fprintf(fd, "cpu_count_from_zero=%d\n", (int) this->countCPUsFromZero);
|
||||||
fprintf(fd, "update_process_names=%d\n", (int) this->updateProcessNames);
|
fprintf(fd, "update_process_names=%d\n", (int) this->updateProcessNames);
|
||||||
|
@ -559,6 +564,7 @@ Settings* Settings_new(int cpuCount) {
|
||||||
this->highlightMegabytes = true;
|
this->highlightMegabytes = true;
|
||||||
this->highlightThreads = true;
|
this->highlightThreads = true;
|
||||||
this->headerMargin = true;
|
this->headerMargin = true;
|
||||||
|
this->screenTabs = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->ssIndex = 0;
|
this->ssIndex = 0;
|
||||||
|
|
|
@ -64,6 +64,7 @@ typedef struct Settings_ {
|
||||||
bool updateProcessNames;
|
bool updateProcessNames;
|
||||||
bool accountGuestInCPUMeter;
|
bool accountGuestInCPUMeter;
|
||||||
bool headerMargin;
|
bool headerMargin;
|
||||||
|
bool screenTabs;
|
||||||
|
|
||||||
bool changed;
|
bool changed;
|
||||||
} Settings;
|
} Settings;
|
||||||
|
|
|
@ -38,7 +38,7 @@ typedef enum DarwinProcessFields {
|
||||||
|
|
||||||
ScreenDefaults Platform_defaultScreens[] = {
|
ScreenDefaults Platform_defaultScreens[] = {
|
||||||
{
|
{
|
||||||
.name = "Default",
|
.name = "Main",
|
||||||
.columns = "PID USER PRIORITY NICE M_SIZE M_RESIDENT STATE PERCENT_CPU PERCENT_MEM TIME Command",
|
.columns = "PID USER PRIORITY NICE M_SIZE M_RESIDENT STATE PERCENT_CPU PERCENT_MEM TIME Command",
|
||||||
.sortKey = "PERCENT_CPU",
|
.sortKey = "PERCENT_CPU",
|
||||||
},
|
},
|
||||||
|
|
|
@ -42,7 +42,7 @@ extern ProcessFieldData Process_fields[];
|
||||||
|
|
||||||
ScreenDefaults Platform_defaultScreens[] = {
|
ScreenDefaults Platform_defaultScreens[] = {
|
||||||
{
|
{
|
||||||
.name = "Default",
|
.name = "Main",
|
||||||
.columns = "PID USER PRIORITY NICE M_SIZE M_RESIDENT STATE PERCENT_CPU PERCENT_MEM TIME Command",
|
.columns = "PID USER PRIORITY NICE M_SIZE M_RESIDENT STATE PERCENT_CPU PERCENT_MEM TIME Command",
|
||||||
.sortKey = "PERCENT_CPU",
|
.sortKey = "PERCENT_CPU",
|
||||||
},
|
},
|
||||||
|
|
|
@ -41,7 +41,7 @@ extern ProcessFieldData Process_fields[];
|
||||||
|
|
||||||
ScreenDefaults Platform_defaultScreens[] = {
|
ScreenDefaults Platform_defaultScreens[] = {
|
||||||
{
|
{
|
||||||
.name = "Default",
|
.name = "Main",
|
||||||
.columns = "PID USER PRIORITY NICE M_SIZE M_RESIDENT STATE PERCENT_CPU PERCENT_MEM TIME Command",
|
.columns = "PID USER PRIORITY NICE M_SIZE M_RESIDENT STATE PERCENT_CPU PERCENT_MEM TIME Command",
|
||||||
.sortKey = "PERCENT_CPU",
|
.sortKey = "PERCENT_CPU",
|
||||||
},
|
},
|
||||||
|
|
2
htop.c
2
htop.c
|
@ -237,7 +237,7 @@ int main(int argc, char** argv) {
|
||||||
millisleep(75);
|
millisleep(75);
|
||||||
ProcessList_scan(pl);
|
ProcessList_scan(pl);
|
||||||
|
|
||||||
ScreenManager_run(scr, NULL, NULL);
|
ScreenManager_run(scr, NULL, NULL, NULL);
|
||||||
|
|
||||||
attron(CRT_colors[RESET_COLOR]);
|
attron(CRT_colors[RESET_COLOR]);
|
||||||
mvhline(LINES-1, 0, ' ', COLS);
|
mvhline(LINES-1, 0, ' ', COLS);
|
||||||
|
|
|
@ -84,7 +84,7 @@ const SignalItem Platform_signals[] = {
|
||||||
|
|
||||||
ScreenDefaults Platform_defaultScreens[] = {
|
ScreenDefaults Platform_defaultScreens[] = {
|
||||||
{
|
{
|
||||||
.name = "Default",
|
.name = "Main",
|
||||||
.columns = "PID USER PRIORITY NICE M_SIZE M_RESIDENT M_SHARE STATE PERCENT_CPU PERCENT_MEM TIME Command",
|
.columns = "PID USER PRIORITY NICE M_SIZE M_RESIDENT M_SHARE STATE PERCENT_CPU PERCENT_MEM TIME Command",
|
||||||
.sortKey = "PERCENT_CPU",
|
.sortKey = "PERCENT_CPU",
|
||||||
},
|
},
|
||||||
|
|
|
@ -98,7 +98,7 @@ static int percentages(int cnt, int64_t *out, int64_t *new, int64_t *old, int64_
|
||||||
|
|
||||||
ScreenDefaults Platform_defaultScreens[] = {
|
ScreenDefaults Platform_defaultScreens[] = {
|
||||||
{
|
{
|
||||||
.name = "Default",
|
.name = "Main",
|
||||||
.columns = "PID USER PRIORITY NICE M_SIZE M_RESIDENT STATE PERCENT_CPU PERCENT_MEM TIME Command",
|
.columns = "PID USER PRIORITY NICE M_SIZE M_RESIDENT STATE PERCENT_CPU PERCENT_MEM TIME Command",
|
||||||
.sortKey = "PERCENT_CPU",
|
.sortKey = "PERCENT_CPU",
|
||||||
},
|
},
|
||||||
|
|
|
@ -31,7 +31,7 @@ const unsigned int Platform_numberOfSignals = sizeof(Platform_signals)/sizeof(Si
|
||||||
|
|
||||||
ScreenDefaults Platform_defaultScreens[] = {
|
ScreenDefaults Platform_defaultScreens[] = {
|
||||||
{
|
{
|
||||||
.name = "Default",
|
.name = "Main",
|
||||||
.columns = "PID LWPID USER PRIORITY NICE M_SIZE M_RESIDENT STATE PERCENT_CPU PERCENT_MEM TIME Command",
|
.columns = "PID LWPID USER PRIORITY NICE M_SIZE M_RESIDENT STATE PERCENT_CPU PERCENT_MEM TIME Command",
|
||||||
.sortKey = "PERCENT_CPU",
|
.sortKey = "PERCENT_CPU",
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue