diff --git a/Settings.c b/Settings.c index fdef9566d885cec816bf7dea49f774eef4b191f3..9723e15875fbd68021f47ebbb8f1f02695f4c4f9 100644 --- a/Settings.c +++ b/Settings.c @@ -34,6 +34,9 @@ typedef struct Settings_ { MeterColumnSettings columns[2]; + char** plugins; + int nPlugins; + ProcessField* fields; int flags; int colorScheme; @@ -75,6 +78,7 @@ void Settings_delete(Settings* this) { String_freeArray(this->columns[i].names); free(this->columns[i].modes); } + String_freeArray(this->plugins); free(this); } @@ -86,6 +90,12 @@ static void Settings_readMeters(Settings* this, char* line, int column) { this->columns[column].names = ids; } +static void Settings_readPlugins(Settings* this, char* line) { + char* trim = String_trim(line); + this->plugins = String_split(trim, ' ', &(this->nPlugins)); + free(trim); +} + static void Settings_readMeterModes(Settings* this, char* line, int column) { char* trim = String_trim(line); int nIds; @@ -242,6 +252,8 @@ static bool Settings_read(Settings* this, const char* fileName) { } else if (String_eq(option[0], "right_meter_modes")) { Settings_readMeterModes(this, option[1], 1); readMeters = true; + } else if (String_eq(option[0], "plugins")) { + Settings_readPlugins(this, option[1]); } String_freeArray(option); } @@ -263,15 +275,19 @@ static void writeFields(FILE* fd, ProcessField* fields, const char* name) { fprintf(fd, "\n"); } -static void writeMeters(Settings* this, FILE* fd, int column) { +static void writeList(FILE* fd, char** list, int len) { const char* sep = ""; - for (int i = 0; i < this->columns[column].len; i++) { - fprintf(fd, "%s%s", sep, this->columns[column].names[i]); + for (int i = 0; i < len; i++) { + fprintf(fd, "%s%s", sep, list[i]); sep = " "; } fprintf(fd, "\n"); } +static void writeMeters(Settings* this, FILE* fd, int column) { + writeList(fd, this->columns[column].names, this->columns[column].len); +} + static void writeMeterModes(Settings* this, FILE* fd, int column) { const char* sep = ""; for (int i = 0; i < this->columns[column].len; i++) { @@ -281,6 +297,10 @@ static void writeMeterModes(Settings* this, FILE* fd, int column) { fprintf(fd, "\n"); } +static void writePlugins(Settings* this, FILE* fd) { + writeList(fd, this->plugins, this->nPlugins); +} + bool Settings_write(Settings* this) { FILE* fd; @@ -318,6 +338,9 @@ bool Settings_write(Settings* this) { fprintf(fd, "left_meter_modes="); writeMeterModes(this, fd, 0); fprintf(fd, "right_meters="); writeMeters(this, fd, 1); fprintf(fd, "right_meter_modes="); writeMeterModes(this, fd, 1); + if (this->nPlugins > 0) { + fprintf(fd, "plugins="); writePlugins(this, fd); + } fclose(fd); return true; } diff --git a/Settings.h b/Settings.h index d9dc0683c20d15e74e784742ff357c05829d340f..2efe273d834761a27e5c7f2462fb03fb3d403810 100644 --- a/Settings.h +++ b/Settings.h @@ -25,6 +25,9 @@ typedef struct Settings_ { MeterColumnSettings columns[2]; + char** plugins; + int nPlugins; + ProcessField* fields; int flags; int colorScheme;