1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
#ifndef HEADER_Settings
#define HEADER_Settings
/*
htop - Settings.h
(C) 2004-2011 Hisham H. Muhammad
Released under the GNU GPLv2+, see the COPYING file
in the source distribution for its full text.
*/
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include "Hashtable.h"
#include "HeaderLayout.h"
#include "MeterMode.h"
#include "Row.h"
#include "RowField.h"
#define DEFAULT_DELAY 15
#define CONFIG_READER_MIN_VERSION 3
struct DynamicScreen_; // IWYU pragma: keep
struct Machine_; // IWYU pragma: keep
struct Table_; // IWYU pragma: keep
typedef struct {
const char* name;
const char* columns;
const char* sortKey;
const char* treeSortKey;
} ScreenDefaults;
typedef struct {
size_t len;
char** names;
MeterModeId* modes;
} MeterColumnSetting;
typedef struct ScreenSettings_ {
char* heading; /* user-editable screen name (pretty) */
char* dynamic; /* from DynamicScreen config (fixed) */
struct Table_* table;
RowField* fields;
uint32_t flags;
int direction;
int treeDirection;
RowField sortKey;
RowField treeSortKey;
bool treeView;
bool treeViewAlwaysByPID;
bool allBranchesCollapsed;
} ScreenSettings;
typedef struct Settings_ {
char* filename;
char* initialFilename;
bool writeConfig; /* whether to write the current settings on exit */
int config_version;
HeaderLayout hLayout;
MeterColumnSetting* hColumns;
Hashtable* dynamicColumns; /* runtime-discovered columns */
Hashtable* dynamicMeters; /* runtime-discovered meters */
Hashtable* dynamicScreens; /* runtime-discovered screens */
ScreenSettings** screens;
unsigned int nScreens;
unsigned int ssIndex;
ScreenSettings* ss;
int colorScheme;
int delay;
bool countCPUsFromOne;
bool detailedCPUTime;
bool showCPUUsage;
bool showCPUFrequency;
#ifdef BUILD_WITH_CPU_TEMP
bool showCPUTemperature;
bool degreeFahrenheit;
#endif
bool showProgramPath;
bool shadowOtherUsers;
bool showThreadNames;
bool hideKernelThreads;
bool hideRunningInContainer;
bool hideUserlandThreads;
bool highlightBaseName;
bool highlightDeletedExe;
bool shadowDistPathPrefix;
bool highlightMegabytes;
bool highlightThreads;
bool highlightChanges;
int highlightDelaySecs;
bool findCommInCmdline;
bool stripExeFromCmdline;
bool showMergedCommand;
bool updateProcessNames;
bool accountGuestInCPUMeter;
bool headerMargin;
bool screenTabs;
bool showCachedMemory;
#ifdef HAVE_GETMOUSE
bool enableMouse;
#endif
int hideFunctionBar; // 0 - off, 1 - on ESC until next input, 2 - permanently
#ifdef HAVE_LIBHWLOC
bool topologyAffinity;
#endif
bool changed;
uint64_t lastUpdate;
} Settings;
#define Settings_cpuId(settings, cpu) ((settings)->countCPUsFromOne ? (cpu)+1 : (cpu))
static inline RowField ScreenSettings_getActiveSortKey(const ScreenSettings* this) {
return (this->treeView)
? (this->treeViewAlwaysByPID ? 1 : this->treeSortKey)
: this->sortKey;
}
static inline int ScreenSettings_getActiveDirection(const ScreenSettings* this) {
return this->treeView ? this->treeDirection : this->direction;
}
void Settings_delete(Settings* this);
int Settings_write(const Settings* this, bool onCrash);
Settings* Settings_new(const struct Machine_* host, Hashtable* dynamicMeters, Hashtable* dynamicColumns, Hashtable* dynamicScreens);
ScreenSettings* Settings_newScreen(Settings* this, const ScreenDefaults* defaults);
ScreenSettings* Settings_newDynamicScreen(Settings* this, const char* tab, const struct DynamicScreen_* screen, struct Table_* table);
void ScreenSettings_delete(ScreenSettings* this);
void ScreenSettings_invertSortOrder(ScreenSettings* this);
void ScreenSettings_setSortKey(ScreenSettings* this, RowField sortKey);
void Settings_enableReadonly(void);
bool Settings_isReadonly(void);
void Settings_setHeaderLayout(Settings* this, HeaderLayout hLayout);
#endif
|