#pragma once #include "error.h" #include #include #include #include enum MoveDir { Up, Right, Down, Left }; typedef union { char* str; int num; MoveDir dir; } KeyArg; struct KeyBind { unsigned int modifiers; KeySym keysym; void(* func) (const KeyArg arg); KeyArg args; }; //Keybind commands #define KEYCOM(X) \ void X (const KeyArg arg) KEYCOM(exit); KEYCOM(spawn); KEYCOM(toggle); KEYCOM(kill); KEYCOM(changeWS); KEYCOM(wToWS); KEYCOM(focChange); KEYCOM(wMove); KEYCOM(bashSpawn); KEYCOM(reload); KEYCOM(wsDump); KEYCOM(nextMonitor); class Config { public: Config(); ~Config(); void free(); Err loadFromFile(std::string path); Err reload(); // Startup std::string* startupBash; int startupBashc; // Main int gaps; int outerGaps; std::string logFile; // Workspaces int numWS; std::string* workspaceNames; int workspaceNamesc; int maxMonitors; int** screenPreferences; int screenPreferencesc; // Keybinds KeyBind* binds; int bindsc; private: template T getValue(std::string path, Err* err); void loadWorkspaceArrays(toml::table tbl, toml::table defaults, Err* err); void loadStartupBash(toml::table tbl, toml::table defaults, Err* err); toml::table tbl; toml::table defaults; bool loaded = false; std::string path; };