summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Action.c70
-rw-r--r--Action.h2
-rw-r--r--CRT.c36
-rw-r--r--CRT.h6
-rw-r--r--CategoriesPanel.c12
-rw-r--r--ColumnsPanel.c30
-rw-r--r--ColumnsPanel.h7
-rw-r--r--CommandLine.c12
-rw-r--r--DisplayOptionsPanel.c7
-rw-r--r--FunctionBar.c11
-rw-r--r--FunctionBar.h4
-rw-r--r--Header.c3
-rw-r--r--IncSet.c37
-rw-r--r--IncSet.h3
-rw-r--r--InfoScreen.c12
-rw-r--r--ListItem.c14
-rw-r--r--ListItem.h8
-rw-r--r--MainPanel.c22
-rw-r--r--Makefile.am2
-rw-r--r--Panel.c21
-rw-r--r--Panel.h10
-rw-r--r--Process.c10
-rw-r--r--ProcessList.c18
-rw-r--r--ScreenManager.c90
-rw-r--r--ScreenManager.h5
-rw-r--r--ScreensPanel.c308
-rw-r--r--ScreensPanel.h49
-rw-r--r--Settings.c293
-rw-r--r--Settings.h47
-rw-r--r--darwin/DarwinProcess.c2
-rw-r--r--darwin/Platform.c10
-rw-r--r--darwin/Platform.h4
-rw-r--r--dragonflybsd/DragonFlyBSDProcessList.c2
-rw-r--r--dragonflybsd/Platform.c9
-rw-r--r--dragonflybsd/Platform.h4
-rw-r--r--freebsd/FreeBSDProcessList.c2
-rw-r--r--freebsd/Platform.c9
-rw-r--r--freebsd/Platform.h4
-rw-r--r--linux/LinuxProcessList.c31
-rw-r--r--linux/Platform.c15
-rw-r--r--linux/Platform.h4
-rw-r--r--netbsd/NetBSDProcessList.c2
-rw-r--r--netbsd/Platform.c10
-rw-r--r--netbsd/Platform.h4
-rw-r--r--openbsd/OpenBSDProcessList.c2
-rw-r--r--openbsd/Platform.c10
-rw-r--r--openbsd/Platform.h4
-rw-r--r--pcp/PCPProcessList.c26
-rw-r--r--pcp/Platform.c15
-rw-r--r--pcp/Platform.h4
-rw-r--r--solaris/Platform.c12
-rw-r--r--solaris/Platform.h6
-rw-r--r--solaris/SolarisProcessList.c2
-rw-r--r--unsupported/Platform.c12
-rw-r--r--unsupported/Platform.h6
-rw-r--r--unsupported/UnsupportedProcessList.c2
56 files changed, 1113 insertions, 249 deletions
diff --git a/Action.c b/Action.c
index 92145330..4e564540 100644
--- a/Action.c
+++ b/Action.c
@@ -58,7 +58,7 @@ Object* Action_pickFromVector(State* st, Panel* list, int x, bool followProcess)
header->pl->following = pid;
unfollow = true;
}
- ScreenManager_run(scr, &panelFocus, &ch);
+ ScreenManager_run(scr, &panelFocus, &ch, NULL);
if (unfollow) {
header->pl->following = -1;
}
@@ -85,7 +85,7 @@ Object* Action_pickFromVector(State* st, Panel* list, int x, bool followProcess)
static void Action_runSetup(State* st) {
ScreenManager* scr = ScreenManager_new(st->header, st->settings, st, true);
CategoriesPanel_new(scr, st->settings, st->header, st->pl);
- ScreenManager_run(scr, NULL, NULL);
+ ScreenManager_run(scr, NULL, NULL, "Setup");
ScreenManager_delete(scr);
if (st->settings->changed) {
Header_writeBackToSettings(st->header);
@@ -154,7 +154,7 @@ static bool collapseIntoParent(Panel* panel) {
}
Htop_Reaction Action_setSortKey(Settings* settings, ProcessField sortKey) {
- Settings_setSortKey(settings, sortKey);
+ ScreenSettings_setSortKey(settings->ss, sortKey);
return HTOP_REFRESH | HTOP_SAVE_SETTINGS | HTOP_UPDATE_PANELHDR | HTOP_KEEP_FOLLOWING;
}
@@ -164,8 +164,9 @@ static Htop_Reaction actionSetSortColumn(State* st) {
Htop_Reaction reaction = HTOP_OK;
Panel* sortPanel = Panel_new(0, 0, 0, 0, Class(ListItem), true, FunctionBar_newEnterEsc("Sort ", "Cancel "));
Panel_setHeader(sortPanel, "Sort by");
- const ProcessField* fields = st->settings->fields;
- Hashtable* dynamicColumns = st->settings->dynamicColumns;
+ const Settings* settings = st->settings;
+ const ProcessField* fields = settings->ss->fields;
+ Hashtable* dynamicColumns = settings->dynamicColumns;
for (int i = 0; fields[i]; i++) {
char* name = NULL;
if (fields[i] >= LAST_PROCESSFIELD) {
@@ -177,7 +178,7 @@ static Htop_Reaction actionSetSortColumn(State* st) {
name = String_trim(Process_fields[fields[i]].name);
}
Panel_add(sortPanel, (Object*) ListItem_new(name, fields[i]));
- if (fields[i] == Settings_getActiveSortKey(st->settings))
+ if (fields[i] == ScreenSettings_getActiveSortKey(settings->ss))
Panel_setSelected(sortPanel, i);
free(name);
@@ -231,16 +232,18 @@ static Htop_Reaction actionToggleMergedCommand(State* st) {
}
static Htop_Reaction actionToggleTreeView(State* st) {
- st->settings->treeView = !st->settings->treeView;
+ ScreenSettings* ss = st->settings->ss;
+ ss->treeView = !ss->treeView;
- if (!st->settings->allBranchesCollapsed)
+ if (!ss->allBranchesCollapsed)
ProcessList_expandTree(st->pl);
return HTOP_REFRESH | HTOP_SAVE_SETTINGS | HTOP_KEEP_FOLLOWING | HTOP_REDRAW_BAR | HTOP_UPDATE_PANELHDR;
}
static Htop_Reaction actionExpandOrCollapseAllBranches(State* st) {
- st->settings->allBranchesCollapsed = !st->settings->allBranchesCollapsed;
- if (st->settings->allBranchesCollapsed)
+ ScreenSettings* ss = st->settings->ss;
+ ss->allBranchesCollapsed = !ss->allBranchesCollapsed;
+ if (ss->allBranchesCollapsed)
ProcessList_collapseAllBranches(st->pl);
else
ProcessList_expandTree(st->pl);
@@ -277,7 +280,7 @@ static Htop_Reaction actionLowerPriority(State* st) {
}
static Htop_Reaction actionInvertSortOrder(State* st) {
- Settings_invertSortOrder(st->settings);
+ ScreenSettings_invertSortOrder(st->settings->ss);
if (st->pauseProcessUpdate)
ProcessList_sort(st->pl);
return HTOP_REFRESH | HTOP_SAVE_SETTINGS | HTOP_KEEP_FOLLOWING;
@@ -289,7 +292,7 @@ static Htop_Reaction actionExpandOrCollapse(State* st) {
}
static Htop_Reaction actionCollapseIntoParent(State* st) {
- if (!st->settings->treeView) {
+ if (!st->settings->ss->treeView) {
return HTOP_OK;
}
bool changed = collapseIntoParent((Panel*)st->mainPanel);
@@ -297,7 +300,46 @@ static Htop_Reaction actionCollapseIntoParent(State* st) {
}
static Htop_Reaction actionExpandCollapseOrSortColumn(State* st) {
- return st->settings->treeView ? actionExpandOrCollapse(st) : actionSetSortColumn(st);
+ return st->settings->ss->treeView ? actionExpandOrCollapse(st) : actionSetSortColumn(st);
+}
+
+static Htop_Reaction actionNextScreen(State* st) {
+ Settings* settings = st->settings;
+ settings->ssIndex++;
+ if (settings->ssIndex == settings->nScreens) {
+ settings->ssIndex = 0;
+ }
+ settings->ss = settings->screens[settings->ssIndex];
+ return HTOP_REFRESH;
+}
+
+static Htop_Reaction actionPrevScreen(State* st) {
+ Settings* settings = st->settings;
+ if (settings->ssIndex == 0) {
+ settings->ssIndex = settings->nScreens - 1;
+ } else {
+ settings->ssIndex--;
+ }
+ settings->ss = settings->screens[settings->ssIndex];
+ 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 actionQuit(ATTR_UNUSED State* st) {
@@ -714,4 +756,6 @@ void Action_setBindings(Htop_Action* keys) {
keys[KEY_F(10)] = actionQuit;
keys[KEY_F(18)] = actionExpandCollapseOrSortColumn;
keys[KEY_RECLICK] = actionExpandOrCollapse;
+ keys[KEY_SHIFT_TAB] = actionPrevScreen;
+ keys['\t'] = actionNextScreen;
}
diff --git a/Action.h b/Action.h
index e1d14e4f..06af1886 100644
--- a/Action.h
+++ b/Action.h
@@ -57,6 +57,8 @@ bool Action_setUserOnly(const char* userName, uid_t* userId);
Htop_Reaction Action_setSortKey(Settings* settings, ProcessField sortKey);
+Htop_Reaction Action_setScreenTab(Settings* settings, int x);
+
Htop_Reaction Action_follow(State* st);
void Action_setBindings(Htop_Action* keys);
diff --git a/CRT.c b/CRT.c
index 24c8c65c..30236a3b 100644
--- a/CRT.c
+++ b/CRT.c
@@ -193,6 +193,11 @@ static int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
[CPU_SOFTIRQ] = ColorPair(Magenta, Black),
[CPU_STEAL] = ColorPair(Cyan, Black),
[CPU_GUEST] = ColorPair(Cyan, Black),
+ [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),
[PRESSURE_STALL_THREEHUNDRED] = ColorPair(Cyan, Black),
[PRESSURE_STALL_SIXTY] = A_BOLD | ColorPair(Cyan, Black),
[PRESSURE_STALL_TEN] = A_BOLD | ColorPair(White, Black),
@@ -295,6 +300,11 @@ static int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
[CPU_SOFTIRQ] = A_BOLD,
[CPU_STEAL] = A_DIM,
[CPU_GUEST] = A_DIM,
+ [PANEL_EDIT] = A_BOLD,
+ [SCREENS_OTH_BORDER] = A_DIM,
+ [SCREENS_OTH_TEXT] = A_DIM,
+ [SCREENS_CUR_BORDER] = A_REVERSE,
+ [SCREENS_CUR_TEXT] = A_REVERSE,
[PRESSURE_STALL_THREEHUNDRED] = A_DIM,
[PRESSURE_STALL_SIXTY] = A_NORMAL,
[PRESSURE_STALL_TEN] = A_BOLD,
@@ -397,6 +407,11 @@ static int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
[CPU_SOFTIRQ] = ColorPair(Blue, White),
[CPU_STEAL] = ColorPair(Cyan, White),
[CPU_GUEST] = ColorPair(Cyan, White),
+ [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),
[PRESSURE_STALL_THREEHUNDRED] = ColorPair(Black, White),
[PRESSURE_STALL_SIXTY] = ColorPair(Black, White),
[PRESSURE_STALL_TEN] = ColorPair(Black, White),
@@ -499,6 +514,11 @@ static int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
[CPU_SOFTIRQ] = ColorPair(Blue, Black),
[CPU_STEAL] = ColorPair(Black, Black),
[CPU_GUEST] = ColorPair(Black, Black),
+ [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),
[PRESSURE_STALL_THREEHUNDRED] = ColorPair(Black, Black),
[PRESSURE_STALL_SIXTY] = ColorPair(Black, Black),
[PRESSURE_STALL_TEN] = ColorPair(Black, Black),
@@ -601,6 +621,11 @@ static int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
[CPU_SOFTIRQ] = ColorPair(Black, Blue),
[CPU_STEAL] = ColorPair(White, Blue),
[CPU_GUEST] = 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),
[PRESSURE_STALL_THREEHUNDRED] = A_BOLD | ColorPair(Black, Blue),
[PRESSURE_STALL_SIXTY] = A_NORMAL | ColorPair(White, Blue),
[PRESSURE_STALL_TEN] = A_BOLD | ColorPair(White, Blue),
@@ -701,6 +726,11 @@ static int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
[CPU_SOFTIRQ] = ColorPair(Blue, Black),
[CPU_STEAL] = ColorPair(Cyan, Black),
[CPU_GUEST] = ColorPair(Cyan, Black),
+ [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),
[PRESSURE_STALL_THREEHUNDRED] = ColorPair(Green, Black),
[PRESSURE_STALL_SIXTY] = ColorPair(Green, Black),
[PRESSURE_STALL_TEN] = A_BOLD | ColorPair(Green, Black),
@@ -725,8 +755,6 @@ static int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
[COLORSCHEME_BROKENGRAY] = { 0 } // dynamically generated.
};
-int CRT_cursorX = 0;
-
int CRT_scrollHAmount = 5;
int CRT_scrollWheelVAmount = 10;
@@ -915,6 +943,7 @@ IGNORE_WCASTQUAL_BEGIN
define_key("\033[14~", KEY_F(4));
define_key("\033[14;2~", KEY_F(15));
define_key("\033[17;2~", KEY_F(18));
+ define_key("\033[Z", KEY_SHIFT_TAB);
char sequence[3] = "\033a";
for (char c = 'a'; c <= 'z'; c++) {
sequence[1] = c;
@@ -925,6 +954,9 @@ IGNORE_WCASTQUAL_END
#undef define_key
#endif
}
+ if (termType && (String_startsWith(termType, "rxvt"))) {
+ define_key("\033[Z", KEY_SHIFT_TAB);
+ }
CRT_installSignalHandlers();
diff --git a/CRT.h b/CRT.h
index c437e659..0b6302fc 100644
--- a/CRT.h
+++ b/CRT.h
@@ -120,6 +120,11 @@ typedef enum ColorElements_ {
CPU_SOFTIRQ,
CPU_STEAL,
CPU_GUEST,
+ PANEL_EDIT,
+ SCREENS_OTH_BORDER,
+ SCREENS_OTH_TEXT,
+ SCREENS_CUR_BORDER,
+ SCREENS_CUR_TEXT,
PRESSURE_STALL_TEN,
PRESSURE_STALL_SIXTY,
PRESSURE_STALL_THREEHUNDRED,
@@ -150,6 +155,7 @@ void CRT_handleSIGSEGV(int signal) ATTR_NORETURN;
#define KEY_WHEELUP KEY_F(30)
#define KEY_WHEELDOWN KEY_F(31)
#define KEY_RECLICK KEY_F(32)
+#define KEY_SHIFT_TAB KEY_F(33)
#define KEY_ALT(x) (KEY_F(64 - 26) + ((x) - 'A'))
extern const char* CRT_degreeSign;
diff --git a/CategoriesPanel.c b/CategoriesPanel.c
index 30867ee9..6e905ce9 100644
--- a/CategoriesPanel.c
+++ b/CategoriesPanel.c
@@ -14,7 +14,6 @@ in the source distribution for its full text.
#include "AvailableColumnsPanel.h"
#include "AvailableMetersPanel.h"
#include "ColorsPanel.h"
-#include "ColumnsPanel.h"
#include "DisplayOptionsPanel.h"
#include "FunctionBar.h"
#include "Header.h"
@@ -25,6 +24,7 @@ in the source distribution for its full text.
#include "MetersPanel.h"
#include "Object.h"
#include "ProvideCurses.h"
+#include "ScreensPanel.h"
#include "Vector.h"
#include "XUtils.h"
@@ -69,9 +69,11 @@ static void CategoriesPanel_makeColorsPage(CategoriesPanel* this) {
ScreenManager_add(this->scr, colors, -1);
}
-static void CategoriesPanel_makeColumnsPage(CategoriesPanel* this) {
- Panel* columns = (Panel*) ColumnsPanel_new(this->settings);
+static void CategoriesPanel_makeScreensPage(CategoriesPanel* this) {
+ Panel* screens = (Panel*) ScreensPanel_new(this->settings);
+ Panel* columns = (Panel*) ((ScreensPanel*)screens)->columns;
Panel* availableColumns = (Panel*) AvailableColumnsPanel_new(columns, this->settings->dynamicColumns);
+ ScreenManager_add(this->scr, screens, 20);
ScreenManager_add(this->scr, columns, 20);
ScreenManager_add(this->scr, availableColumns, -1);
}
@@ -91,7 +93,7 @@ static const CategoriesPanelPage categoriesPanelPages[] = {
{ .name = "Display options", .ctor = CategoriesPanel_makeDisplayOptionsPage },
{ .name = "Header layout", .ctor = CategoriesPanel_makeHeaderOptionsPage },
{ .name = "Meters", .ctor = CategoriesPanel_makeMetersPage },
- { .name = "Columns", .ctor = CategoriesPanel_makeColumnsPage },
+ { .name = "Screens", .ctor = CategoriesPanel_makeScreensPage },
{ .name = "Colors", .ctor = CategoriesPanel_makeColorsPage },
};
@@ -157,7 +159,7 @@ CategoriesPanel* CategoriesPanel_new(ScreenManager* scr, Settings* settings, Hea
this->settings = settings;
this->header = header;
this->pl = pl;
- Panel_setHeader(super, "Setup");
+ Panel_setHeader(super, "Categories");
for (size_t i = 0; i < ARRAYSIZE(categoriesPanelPages); i++)
Panel_add(super, (Object*) ListItem_new(categoriesPanelPages[i].name, 0));
diff --git a/ColumnsPanel.c b/ColumnsPanel.c
index a1450bb0..24826936 100644
--- a/ColumnsPanel.c
+++ b/ColumnsPanel.c
@@ -138,20 +138,26 @@ static void ColumnsPanel_add(Panel* super, unsigned int key, Hashtable* columns)
Panel_add(super, (Object*) ListItem_new(name, key));
}
-ColumnsPanel* ColumnsPanel_new(Settings* settings) {
+void ColumnsPanel_fill(ColumnsPanel* this, ScreenSettings* ss, Hashtable* columns) {
+ Panel* super = (Panel*) this;
+ Panel_prune(super);
+ for (const ProcessField* fields = ss->fields; *fields; fields++)
+ ColumnsPanel_add(super, *fields, columns);
+ this->ss = ss;
+}
+
+ColumnsPanel* ColumnsPanel_new(ScreenSettings* ss, Hashtable* columns, bool* changed) {
ColumnsPanel* this = AllocThis(ColumnsPanel);
Panel* super = (Panel*) this;
FunctionBar* fuBar = FunctionBar_new(ColumnsFunctions, NULL, NULL);
Panel_init(super, 1, 1, 1, 1, Class(ListItem), true, fuBar);
- this->settings = settings;
+ this->ss = ss;
+ this->changed = changed;
this->moving = false;
Panel_setHeader(super, "Active Columns");
- Hashtable* dynamicColumns = settings->dynamicColumns;
- const ProcessField* fields = settings->fields;
- for (; *fields; fields++)
- ColumnsPanel_add(super, *fields, dynamicColumns);
+ ColumnsPanel_fill(this, ss, columns);
return this;
}
@@ -159,14 +165,14 @@ ColumnsPanel* ColumnsPanel_new(Settings* settings) {
void ColumnsPanel_update(Panel* super) {
ColumnsPanel* this = (ColumnsPanel*) super;
int size = Panel_size(super);
- this->settings->changed = true;
- this->settings->fields = xRealloc(this->settings->fields, sizeof(ProcessField) * (size + 1));
- this->settings->flags = 0;
+ *(this->changed) = true;
+ this->ss->fields = xRealloc(this->ss->fields, sizeof(ProcessField) * (size + 1));
+ this->ss->flags = 0;
for (int i = 0; i < size; i++) {
int key = ((ListItem*) Panel_get(super, i))->key;
- this->settings->fields[i] = key;
+ this->ss->fields[i] = key;
if (key < LAST_PROCESSFIELD)
- this->settings->flags |= Process_fields[key].flags;
+ this->ss->flags |= Process_fields[key].flags;
}
- this->settings->fields[size] = 0;
+ this->ss->fields[size] = 0;
}
diff --git a/ColumnsPanel.h b/ColumnsPanel.h
index d9360f46..63f6f92b 100644
--- a/ColumnsPanel.h
+++ b/ColumnsPanel.h
@@ -15,14 +15,17 @@ in the source distribution for its full text.
typedef struct ColumnsPanel_ {
Panel super;
+ ScreenSettings* ss;
+ bool* changed;
- Settings* settings;
bool moving;
} ColumnsPanel;
extern const PanelClass ColumnsPanel_class;
-ColumnsPanel* ColumnsPanel_new(Settings* settings);
+ColumnsPanel* ColumnsPanel_new(ScreenSettings* ss, Hashtable* columns, bool* changed);
+
+void ColumnsPanel_fill(ColumnsPanel* this, ScreenSettings* ss, Hashtable* columns);
void ColumnsPanel_update(Panel* super);
diff --git a/CommandLine.c b/CommandLine.c
index 3a45d820..4416864b 100644
--- a/CommandLine.c
+++ b/CommandLine.c
@@ -328,7 +328,7 @@ int CommandLine_run(const char* name, int argc, char** argv) {
settings->enableMouse = false;
#endif
if (flags.treeView)
- settings->treeView = true;
+ settings->ss->treeView = true;
if (flags.highlightChanges)
settings->highlightChanges = true;
if (flags.highlightDelaySecs != -1)
@@ -337,9 +337,9 @@ int CommandLine_run(const char* name, int argc, char** argv) {
// -t -s <key> means "tree sorted by key"
// -s <key> means "list sorted by key" (previous existing behavior)
if (!flags.treeView) {
- settings->treeView = false;
+ settings->ss->treeView = false;
}
- Settings_setSortKey(settings, flags.sortKey);
+ ScreenSettings_setSortKey(settings->ss, flags.sortKey);
}
CRT_init(settings, flags.allowUnicode);
@@ -347,7 +347,7 @@ int CommandLine_run(const char* name, int argc, char** argv) {
MainPanel* panel = MainPanel_new();
ProcessList_setPanel(pl, (Panel*) panel);
- MainPanel_updateTreeFunctions(panel, settings->treeView);
+ MainPanel_updateTreeFunctions(panel, settings->ss->treeView);
State state = {
.settings = settings,
@@ -370,10 +370,10 @@ int CommandLine_run(const char* name, int argc, char** argv) {
CommandLine_delay(pl, 75);
ProcessList_scan(pl, false);
- if (settings->allBranchesCollapsed)
+ if (settings->ss->allBranchesCollapsed)
ProcessList_collapseAllBranches(pl);
- ScreenManager_run(scr, NULL, NULL);
+ ScreenManager_run(scr, NULL, NULL, NULL);
Platform_done();
diff --git a/DisplayOptionsPanel.c b/DisplayOptionsPanel.c
index 82121204..25e6d759 100644
--- a/DisplayOptionsPanel.c
+++ b/DisplayOptionsPanel.c
@@ -97,9 +97,10 @@ DisplayOptionsPanel* DisplayOptionsPanel_new(Settings* settings, ScreenManager*
this->scr = scr;
Panel_setHeader(super, "Display options");
- Panel_add(super, (Object*) CheckItem_newByRef("Tree view", &(settings->treeView)));
- Panel_add(super, (Object*) CheckItem_newByRef("- Tree view is always sorted by PID (htop 2 behavior)", &(settings->treeViewAlwaysByPID)));
- Panel_add(super, (Object*) CheckItem_newByRef("- Tree view is collapsed by default", &(settings->allBranchesCollapsed)));
+ Panel_add(super, (Object*) CheckItem_newByRef("Tree view", &(settings->ss->treeView)));
+ Panel_add(super, (Object*) CheckItem_newByRef("- Tree view is always sorted by PID (htop 2 behavior)", &(settings->ss->treeViewAlwaysByPID)));
+ Panel_add(super, (Object*) CheckItem_newByRef("- Tree view is collapsed by default", &(settings->ss->allBranchesCollapsed)));
+ Panel_add(super, (Object*) CheckItem_newByRef("Show tabs for screens", &(settings->screenTabs)));
Panel_add(super, (Object*) CheckItem_newByRef("Shadow other users' processes", &(settings->shadowOtherUsers)));
Panel_add(super, (Object*) CheckItem_newByRef("Hide kernel threads", &(settings->hideKernelThreads)));
Panel_add(super, (Object*) CheckItem_newByRef("Hide userland process threads", &(settings->hideUserlandThreads)));
diff --git a/FunctionBar.c b/FunctionBar.c
index fc3304ae..08500373 100644
--- a/FunctionBar.c
+++ b/FunctionBar.c
@@ -88,11 +88,12 @@ void FunctionBar_setLabel(FunctionBar* this, int event, const char* text) {
}
}
-void FunctionBar_draw(const FunctionBar* this) {
- FunctionBar_drawExtra(this, NULL, -1, false);
+int FunctionBar_draw(const FunctionBar* this) {
+ return FunctionBar_drawExtra(this, NULL, -1, false);
}
-void FunctionBar_drawExtra(const FunctionBar* this, const char* buffer, int attr, bool setCursor) {
+int FunctionBar_drawExtra(const FunctionBar* this, const char* buffer, int attr, bool setCursor) {
+ int cursorX = 0;
attrset(CRT_colors[FUNCTION_BAR]);
mvhline(LINES - 1, 0, ' ', COLS);
int x = 0;
@@ -113,18 +114,20 @@ void FunctionBar_drawExtra(const FunctionBar* this, const char* buffer, int attr
}
mvaddstr(LINES - 1, x, buffer);
x += strlen(buffer);
+ cursorX = x;
}
attrset(CRT_colors[RESET_COLOR]);
if (setCursor) {
- CRT_cursorX = x;
curs_set(1);
} else {
curs_set(0);
}
currentLen = x;
+
+ return cursorX;
}
void FunctionBar_append(const char* buffer, int attr) {
diff --git a/FunctionBar.h b/FunctionBar.h
index ebe405f3..f01a5ef5 100644
--- a/FunctionBar.h
+++ b/FunctionBar.h
@@ -29,9 +29,9 @@ void FunctionBar_delete(FunctionBar* this);
void FunctionBar_setLabel(FunctionBar* this, int event, const char* text);
-void FunctionBar_draw(const FunctionBar* this);
+int FunctionBar_draw(const FunctionBar* this);
-void FunctionBar_drawExtra(const FunctionBar* this, const char* buffer, int attr, bool setCursor);
+int FunctionBar_drawExtra(const FunctionBar* this, const char* buffer, int attr, bool setCursor);