diff options
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 @@ -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; @@ -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 @@ -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++) { @@ -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 @@ -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')) @@ -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 @@ -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 |