summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/ci.yml29
-rw-r--r--Action.c13
-rw-r--r--Action.h10
-rw-r--r--Affinity.c7
-rw-r--r--Affinity.h15
-rw-r--r--AffinityPanel.h4
-rw-r--r--AvailableColumnsPanel.h2
-rw-r--r--AvailableMetersPanel.c2
-rw-r--r--AvailableMetersPanel.h2
-rw-r--r--CRT.c4
-rw-r--r--CRT.h28
-rw-r--r--CategoriesPanel.h4
-rw-r--r--CheckItem.h8
-rw-r--r--ColorsPanel.h2
-rw-r--r--ColumnsPanel.h6
-rw-r--r--DisplayOptionsPanel.h2
-rw-r--r--EnvScreen.h8
-rw-r--r--FunctionBar.h14
-rw-r--r--Hashtable.h12
-rw-r--r--Header.h26
-rw-r--r--IncSet.c44
-rw-r--r--IncSet.h20
-rw-r--r--InfoScreen.c5
-rw-r--r--InfoScreen.h12
-rw-r--r--ListItem.h8
-rw-r--r--MainPanel.c6
-rw-r--r--MainPanel.h22
-rw-r--r--Meter.c3
-rw-r--r--Meter.h12
-rw-r--r--MetersPanel.h4
-rw-r--r--Object.c6
-rw-r--r--Object.h8
-rw-r--r--OpenFilesScreen.c1
-rw-r--r--OpenFilesScreen.h8
-rw-r--r--Panel.h46
-rw-r--r--Process.c36
-rw-r--r--Process.h33
-rw-r--r--ProcessList.h28
-rw-r--r--README3
-rw-r--r--RichString.h16
-rw-r--r--ScreenManager.h12
-rw-r--r--Settings.h8
-rw-r--r--SignalsPanel.h2
-rw-r--r--StringUtils.c5
-rw-r--r--StringUtils.h12
-rw-r--r--TraceScreen.h12
-rw-r--r--UsersTable.h6
-rw-r--r--Vector.h26
-rw-r--r--XAlloc.h10
-rw-r--r--darwin/Platform.c2
-rw-r--r--dragonflybsd/DragonFlyBSDProcess.c2
-rw-r--r--freebsd/FreeBSDProcess.c2
-rw-r--r--htop.desktop2
-rw-r--r--htop.h2
-rw-r--r--linux/Battery.h2
-rw-r--r--linux/IOPriorityPanel.h4
-rw-r--r--linux/LinuxCRT.h2
-rw-r--r--linux/LinuxProcess.c33
-rw-r--r--linux/LinuxProcess.h29
-rw-r--r--linux/LinuxProcessList.c83
-rw-r--r--linux/LinuxProcessList.h7
-rw-r--r--linux/Platform.h16
-rw-r--r--openbsd/OpenBSDProcess.c2
-rw-r--r--openbsd/Platform.c6
-rwxr-xr-xscripts/MakeHeader.py4
-rw-r--r--solaris/SolarisProcess.c2
-rw-r--r--unsupported/Platform.c2
67 files changed, 515 insertions, 299 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 00000000..74d0ece8
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,29 @@
+name: CI
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+jobs:
+ build-ubuntu-latest:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Build
+ run: |
+ sudo apt-get install libncursesw5-dev
+ ./autogen.sh
+ ./configure
+ make
+
+# build-macos-latest:
+# runs-on: macos-latest
+# steps:
+# - uses: actions/checkout@v2
+# - name: make
+# run: |
+# ./autogen.sh
+# ./configure
+# make
diff --git a/Action.c b/Action.c
index 9a7c3c56..5488fecf 100644
--- a/Action.c
+++ b/Action.c
@@ -248,10 +248,21 @@ static Htop_Reaction actionIncFilter(State* st) {
}
static Htop_Reaction actionIncSearch(State* st) {
+ IncSet_reset(((MainPanel*)st->panel)->inc, INC_SEARCH);
IncSet_activate(((MainPanel*)st->panel)->inc, INC_SEARCH, st->panel);
return HTOP_REFRESH | HTOP_KEEP_FOLLOWING;
}
+static Htop_Reaction actionIncNext(State* st) {
+ IncSet_next(((MainPanel*)st->panel)->inc, INC_SEARCH, st->panel, (IncMode_GetPanelValue) MainPanel_getValue);
+ return HTOP_REFRESH | HTOP_KEEP_FOLLOWING;
+}
+
+static Htop_Reaction actionIncPrev(State* st) {
+ IncSet_prev(((MainPanel*)st->panel)->inc, INC_SEARCH, st->panel, (IncMode_GetPanelValue) MainPanel_getValue);
+ return HTOP_REFRESH | HTOP_KEEP_FOLLOWING;
+}
+
static Htop_Reaction actionHigherPriority(State* st) {
bool changed = changePriority((MainPanel*)st->panel, -1);
return changed ? HTOP_REFRESH : HTOP_OK;
@@ -559,6 +570,8 @@ void Action_setBindings(Htop_Action* keys) {
keys['\\'] = actionIncFilter;
keys[KEY_F(3)] = actionIncSearch;
keys['/'] = actionIncSearch;
+ keys['n'] = actionIncNext;
+ keys['N'] = actionIncPrev;
keys[']'] = actionHigherPriority;
keys[KEY_F(7)] = actionHigherPriority;
diff --git a/Action.h b/Action.h
index 1dfdcb47..a2920b68 100644
--- a/Action.h
+++ b/Action.h
@@ -39,20 +39,20 @@ typedef struct State_ {
} State;
-Object* Action_pickFromVector(State* st, Panel* list, int x);
+extern Object* Action_pickFromVector(State* st, Panel* list, int x);
// ----------------------------------------
-bool Action_setUserOnly(const char* userName, uid_t* userId);
+extern bool Action_setUserOnly(const char* userName, uid_t* userId);
-Htop_Reaction Action_setSortKey(Settings* settings, ProcessField sortKey);
+extern Htop_Reaction Action_setSortKey(Settings* settings, ProcessField sortKey);
// ----------------------------------------
-Htop_Reaction Action_follow(State* st);
+extern Htop_Reaction Action_follow(State* st);
-void Action_setBindings(Htop_Action* keys);
+extern void Action_setBindings(Htop_Action* keys);
#endif
diff --git a/Affinity.c b/Affinity.c
index c928fec1..b6eafcee 100644
--- a/Affinity.c
+++ b/Affinity.c
@@ -1,6 +1,7 @@
/*
htop - Affinity.c
(C) 2004-2011 Hisham H. Muhammad
+(C) 2020 Red Hat, Inc. All Rights Reserved.
Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/
@@ -79,7 +80,8 @@ Affinity* Affinity_get(Process* proc, ProcessList* pl) {
return affinity;
}
-bool Affinity_set(Process* proc, Affinity* this) {
+bool Affinity_set(Process* proc, Arg arg) {
+ Affinity *this = arg.v;
hwloc_cpuset_t cpuset = hwloc_bitmap_alloc();
for (int i = 0; i < this->used; i++) {
hwloc_bitmap_set(cpuset, this->cpus[i]);
@@ -103,7 +105,8 @@ Affinity* Affinity_get(Process* proc, ProcessList* pl) {
return affinity;
}
-bool Affinity_set(Process* proc, Affinity* this) {
+bool Affinity_set(Process* proc, Arg arg) {
+ Affinity *this = arg.v;
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
for (int i = 0; i < this->used; i++) {
diff --git a/Affinity.h b/Affinity.h
index fd2c599e..3c716034 100644
--- a/Affinity.h
+++ b/Affinity.h
@@ -5,6 +5,7 @@
/*
htop - Affinity.h
(C) 2004-2011 Hisham H. Muhammad
+(C) 2020 Red Hat, Inc. All Rights Reserved.
Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/
@@ -29,23 +30,23 @@ typedef struct Affinity_ {
} Affinity;
-Affinity* Affinity_new(ProcessList* pl);
+extern Affinity* Affinity_new(ProcessList* pl);
-void Affinity_delete(Affinity* this);
+extern void Affinity_delete(Affinity* this);
-void Affinity_add(Affinity* this, int id);
+extern void Affinity_add(Affinity* this, int id);
#ifdef HAVE_LIBHWLOC
-Affinity* Affinity_get(Process* proc, ProcessList* pl);
+extern Affinity* Affinity_get(Process* proc, ProcessList* pl);
-bool Affinity_set(Process* proc, Affinity* this);
+extern bool Affinity_set(Process* proc, Arg arg);
#elif HAVE_LINUX_AFFINITY
-Affinity* Affinity_get(Process* proc, ProcessList* pl);
+extern Affinity* Affinity_get(Process* proc, ProcessList* pl);
-bool Affinity_set(Process* proc, Affinity* this);
+extern bool Affinity_set(Process* proc, Arg arg);
#endif
diff --git a/AffinityPanel.h b/AffinityPanel.h
index 2b6059b0..3a9c7807 100644
--- a/AffinityPanel.h
+++ b/AffinityPanel.h
@@ -16,8 +16,8 @@ in the source distribution for its full text.
extern PanelClass AffinityPanel_class;
-Panel* AffinityPanel_new(ProcessList* pl, Affinity* affinity);
+extern Panel* AffinityPanel_new(ProcessList* pl, Affinity* affinity);
-Affinity* AffinityPanel_getAffinity(Panel* this, ProcessList* pl);
+extern Affinity* AffinityPanel_getAffinity(Panel* this, ProcessList* pl);
#endif
diff --git a/AvailableColumnsPanel.h b/AvailableColumnsPanel.h
index 5a8371dd..2d6daf4b 100644
--- a/AvailableColumnsPanel.h
+++ b/AvailableColumnsPanel.h
@@ -19,6 +19,6 @@ typedef struct AvailableColumnsPanel_ {
extern PanelClass AvailableColumnsPanel_class;
-AvailableColumnsPanel* AvailableColumnsPanel_new(Panel* columns);
+extern AvailableColumnsPanel* AvailableColumnsPanel_new(Panel* columns);
#endif
diff --git a/AvailableMetersPanel.c b/AvailableMetersPanel.c
index ddb55367..40534bb7 100644
--- a/AvailableMetersPanel.c
+++ b/AvailableMetersPanel.c
@@ -127,7 +127,7 @@ AvailableMetersPanel* AvailableMetersPanel_new(Settings* settings, Header* heade
Panel_add(super, (Object*) ListItem_new("CPU average", 0));
for (int i = 1; i <= cpus; i++) {
char buffer[50];
- xSnprintf(buffer, 50, "%s %d", type->uiName, i);
+ xSnprintf(buffer, 50, "%s %d", type->uiName, Settings_cpuId(this->settings, i - 1));
Panel_add(super, (Object*) ListItem_new(buffer, i));
}
} else {
diff --git a/AvailableMetersPanel.h b/AvailableMetersPanel.h
index e9b949b0..00e0f596 100644
--- a/AvailableMetersPanel.h
+++ b/AvailableMetersPanel.h
@@ -27,6 +27,6 @@ typedef struct AvailableMetersPanel_ {
extern PanelClass AvailableMetersPanel_class;
-AvailableMetersPanel* AvailableMetersPanel_new(Settings* settings, Header* header, Panel* leftMeters, Panel* rightMeters, ScreenManager* scr, ProcessList* pl);
+extern AvailableMetersPanel* AvailableMetersPanel_new(Settings* settings, Header* header, Panel* leftMeters, Panel* rightMeters, ScreenManager* scr, ProcessList* pl);
#endif
diff --git a/CRT.c b/CRT.c
index ca9a10dd..088cd1a4 100644
--- a/CRT.c
+++ b/CRT.c
@@ -131,9 +131,9 @@ typedef enum ColorElements_ {
LAST_COLORELEMENT
} ColorElements;
-void CRT_fatalError(const char* note) __attribute__ ((noreturn));
+extern void CRT_fatalError(const char* note) __attribute__ ((noreturn));
-void CRT_handleSIGSEGV(int sgn);
+extern void CRT_handleSIGSEGV(int sgn);
#define KEY_ALT(x) (KEY_F(64 - 26) + (x - 'A'))
diff --git a/CRT.h b/CRT.h
index 933fe068..bc3fb8b7 100644
--- a/CRT.h
+++ b/CRT.h
@@ -119,9 +119,9 @@ typedef enum ColorElements_ {
LAST_COLORELEMENT
} ColorElements;
-void CRT_fatalError(const char* note) __attribute__ ((noreturn));
+extern void CRT_fatalError(const char* note) __attribute__ ((noreturn));
-void CRT_handleSIGSEGV(int sgn);
+extern void CRT_handleSIGSEGV(int sgn);
#define KEY_ALT(x) (KEY_F(64 - 26) + (x - 'A'))
@@ -140,7 +140,7 @@ extern const char **CRT_treeStr;
extern int CRT_delay;
-int* CRT_colors;
+extern int* CRT_colors;
extern int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT];
@@ -150,21 +150,21 @@ extern int CRT_scrollHAmount;
extern int CRT_scrollWheelVAmount;
-char* CRT_termType;
+extern char* CRT_termType;
// TODO move color scheme to Settings, perhaps?
extern int CRT_colorScheme;
-void *backtraceArray[128];
+extern void *backtraceArray[128];
#if HAVE_SETUID_ENABLED
#define DIE(msg) do { CRT_done(); fprintf(stderr, msg); exit(1); } while(0)
-void CRT_dropPrivileges();
+extern void CRT_dropPrivileges();
-void CRT_restorePrivileges();
+extern void CRT_restorePrivileges();
#else
@@ -179,18 +179,18 @@ void CRT_restorePrivileges();
// TODO: pass an instance of Settings instead.
-void CRT_init(int delay, int colorScheme);
+extern void CRT_init(int delay, int colorScheme);
-void CRT_done();
+extern void CRT_done();
-void CRT_fatalError(const char* note);
+extern void CRT_fatalError(const char* note);
-int CRT_readKey();
+extern int CRT_readKey();
-void CRT_disableDelay();
+extern void CRT_disableDelay();
-void CRT_enableDelay();
+extern void CRT_enableDelay();
-void CRT_setColors(int colorScheme);
+extern void CRT_setColors(int colorScheme);
#endif
diff --git a/CategoriesPanel.h b/CategoriesPanel.h
index ccef0fae..44c6842a 100644
--- a/CategoriesPanel.h
+++ b/CategoriesPanel.h
@@ -24,10 +24,10 @@ typedef struct CategoriesPanel_ {
} CategoriesPanel;
-void CategoriesPanel_makeMetersPage(CategoriesPanel* this);
+extern void CategoriesPanel_makeMetersPage(CategoriesPanel* this);
extern PanelClass CategoriesPanel_class;
-CategoriesPanel* CategoriesPanel_new(ScreenManager* scr, Settings* settings, Header* header, ProcessList* pl);
+extern CategoriesPanel* CategoriesPanel_new(ScreenManager* scr, Settings* settings, Header* header, ProcessList* pl);
#endif
diff --git a/CheckItem.h b/CheckItem.h
index 5847d4b2..dbd1a039 100644
--- a/CheckItem.h
+++ b/CheckItem.h
@@ -21,12 +21,12 @@ typedef struct CheckItem_ {
extern ObjectClass CheckItem_class;
-CheckItem* CheckItem_newByRef(char* text, bool* ref);
+extern CheckItem* CheckItem_newByRef(char* text, bool* ref);
-CheckItem* CheckItem_newByVal(char* text, bool value);
+extern CheckItem* CheckItem_newByVal(char* text, bool value);
-void CheckItem_set(CheckItem* this, bool value);
+extern void CheckItem_set(CheckItem* this, bool value);
-bool CheckItem_get(CheckItem* this);
+extern bool CheckItem_get(CheckItem* this);
#endif
diff --git a/ColorsPanel.h b/ColorsPanel.h
index ee3111e0..82b782b8 100644
--- a/ColorsPanel.h
+++ b/ColorsPanel.h
@@ -29,6 +29,6 @@ typedef struct ColorsPanel_ {
extern PanelClass ColorsPanel_class;
-ColorsPanel* ColorsPanel_new(Settings* settings, ScreenManager* scr);
+extern ColorsPanel* ColorsPanel_new(Settings* settings, ScreenManager* scr);
#endif
diff --git a/ColumnsPanel.h b/ColumnsPanel.h
index 0da674a8..46d20bbb 100644
--- a/ColumnsPanel.h
+++ b/ColumnsPanel.h
@@ -22,11 +22,11 @@ typedef struct ColumnsPanel_ {
extern PanelClass ColumnsPanel_class;
-ColumnsPanel* ColumnsPanel_new(Settings* settings);
+extern ColumnsPanel* ColumnsPanel_new(Settings* settings);
-int ColumnsPanel_fieldNameToIndex(const char* name);
+extern int ColumnsPanel_fieldNameToIndex(const char* name);
-void ColumnsPanel_update(Panel* super);
+extern void ColumnsPanel_update(Panel* super);
#endif
diff --git a/DisplayOptionsPanel.h b/DisplayOptionsPanel.h
index 2a7509ae..d9de4005 100644
--- a/DisplayOptionsPanel.h
+++ b/DisplayOptionsPanel.h
@@ -23,6 +23,6 @@ typedef struct DisplayOptionsPanel_ {
extern PanelClass DisplayOptionsPanel_class;
-DisplayOptionsPanel* DisplayOptionsPanel_new(Settings* settings, ScreenManager* scr);
+extern DisplayOptionsPanel* DisplayOptionsPanel_new(Settings* settings, ScreenManager* scr);
#endif
diff --git a/EnvScreen.h b/EnvScreen.h
index 7cdbb865..025cb8d3 100644
--- a/EnvScreen.h
+++ b/EnvScreen.h
@@ -11,12 +11,12 @@ typedef struct EnvScreen_ {
extern InfoScreenClass EnvScreen_class;
-EnvScreen* EnvScreen_new(Process* process);
+extern EnvScreen* EnvScreen_new(Process* process);
-void EnvScreen_delete(Object* this);
+extern void EnvScreen_delete(Object* this);
-void EnvScreen_draw(InfoScreen* this);
+extern void EnvScreen_draw(InfoScreen* this);
-void EnvScreen_scan(InfoScreen* this);
+extern void EnvScreen_scan(InfoScreen* this);
#endif
diff --git a/FunctionBar.h b/FunctionBar.h
index b60f6582..ee5b9347 100644
--- a/FunctionBar.h
+++ b/FunctionBar.h
@@ -22,18 +22,18 @@ typedef struct FunctionBar_ {
-FunctionBar* FunctionBar_newEnterEsc(const char* enter, const char* esc);
+extern FunctionBar* FunctionBar_newEnterEsc(const char* enter, const char* esc);
-FunctionBar* FunctionBar_new(const char* const* functions, const char* const* keys, const int* events);
+extern FunctionBar* FunctionBar_new(const char* const* functions, const char* const* keys, const int* events);
-void FunctionBar_delete(FunctionBar* this);
+extern void FunctionBar_delete(FunctionBar* this);
-void FunctionBar_setLabel(FunctionBar* this, int event, const char* text);
+extern void FunctionBar_setLabel(FunctionBar* this, int event, const char* text);
-void FunctionBar_draw(const FunctionBar* this, char* buffer);
+extern void FunctionBar_draw(const FunctionBar* this, char* buffer);
-void FunctionBar_drawAttr(const FunctionBar* this, char* buffer, int attr);
+extern void FunctionBar_drawAttr(const FunctionBar* this, char* buffer, int attr);
-int FunctionBar_synthesizeEvent(const FunctionBar* this, int pos);
+extern int FunctionBar_synthesizeEvent(const FunctionBar* this, int pos);
#endif
diff --git a/Hashtable.h b/Hashtable.h
index 25608961..32b02188 100644
--- a/Hashtable.h
+++ b/Hashtable.h
@@ -30,20 +30,20 @@ struct Hashtable_ {
#ifdef DEBUG
-int Hashtable_count(Hashtable* this);
+extern int Hashtable_count(Hashtable* this);
#endif
-Hashtable* Hashtable_new(int size, bool owner);
+extern Hashtable* Hashtable_new(int size, bool owner);
-void Hashtable_delete(Hashtable* this);
+extern void Hashtable_delete(Hashtable* this);
-void Hashtable_put(Hashtable* this, unsigned int key, void* value);
+extern void Hashtable_put(Hashtable* this, unsigned int key, void* value);
-void* Hashtable_remove(Hashtable* this, unsigned int key);
+extern void* Hashtable_remove(Hashtable* this, unsigned int key);
extern void* Hashtable_get(Hashtable* this, unsigned int key);
-void Hashtable_foreach(Hashtable* this, Hashtable_PairFunction f, void* userData);
+extern void Hashtable_foreach(Hashtable* this, Hashtable_PairFunction f, void* userData);
#endif
diff --git a/Header.h b/Header.h
index 700ad354..f5182454 100644
--- a/Header.h
+++ b/Header.h
@@ -31,30 +31,30 @@ typedef struct Header_ {
#define Header_forEachColumn(this_, i_) for (int (i_)=0; (i_) < (this_)->nrColumns; ++(i_))
#endif
-Header* Header_new(struct ProcessList_* pl, Settings* settings, int nrColumns);
+extern Header* Header_new(struct ProcessList_* pl, Settings* settings, int nrColumns);
-void Header_delete(Header* this);
+extern void Header_delete(Header* this);
-void Header_populateFromSettings(Header* this);
+extern void Header_populateFromSettings(Header* this);
-void Header_writeBackToSettings(const Header* this);
+extern void Header_writeBackToSettings(const Header* this);
-MeterModeId Header_addMeterByName(Header* this, char* name, int column);
+extern MeterModeId Header_addMeterByName(Header* this, char* name, int column);
-void Header_setMode(Header* this, int i, MeterModeId mode, int column);
+extern void Header_setMode(Header* this, int i, MeterModeId mode, int column);
-Meter* Header_addMeterByClass(Header* this, MeterClass* type, int param, int column);
+extern Meter* Header_addMeterByClass(Header* this, MeterClass* type, int param, int column);
-int Header_size(Header* this, int column);
+extern int Header_size(Header* this, int column);
-char* Header_readMeterName(Header* this, int i, int column);
+extern char* Header_readMeterName(Header* this, int i, int column);
-MeterModeId Header_readMeterMode(Header* this, int i, int column);
+extern Meter