From 0e5b9f14734daf40b977b0523494a7d898ccb602 Mon Sep 17 00:00:00 2001 From: Venelin Date: Fri, 9 Aug 2024 15:22:27 +0300 Subject: [PATCH] major status improvements --- .gitmodules | 3 ++ config.h | 6 +++ dwm | Bin 0 -> 96864 bytes dwm.c | 2 +- slstatus | 1 + util.c | 6 +++ vene.cpp | 135 +++++++++++++++++++++++++++++++++++++++++++++------- 7 files changed, 135 insertions(+), 18 deletions(-) create mode 100644 .gitmodules create mode 100755 dwm create mode 160000 slstatus diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..4fd2532 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "slstatus"] + path = slstatus + url = https://gitlab.com/venelin98/slstatus.git diff --git a/config.h b/config.h index 9dd2751..54d98f6 100644 --- a/config.h +++ b/config.h @@ -68,6 +68,8 @@ static const Layout layouts[] = { // static const char* dmenucmd[] = { "dmenu_run", "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; static const char* dmenucmd[] = { "dmenu_run", NULL }; static const char* termcmd[] = { "st", NULL }; +static const char* bright_up[] = { "brightnessctl", "s", "-q", "3%+", NULL }; +static const char* bright_down[] = { "brightnessctl", "s", "-q", "3%-", NULL }; static const char* screenshot [] = { "scrot", "-s", SCREEN_CAPS_DIR, NULL }; static void webbookmark(const Arg* arg){ @@ -83,6 +85,10 @@ static const Key keys[] = { { 0, XF86XK_AudioRaiseVolume, vene_inc_vol, {0 } }, { 0, XF86XK_AudioLowerVolume, vene_dec_vol, {0 } }, { 0, XF86XK_AudioMute, vene_toggle_vol, {0 } }, + #if HAS_SW_BACKLIGHT + { 0, XF86XK_MonBrightnessUp, spawn, {.v = bright_up } }, + { 0, XF86XK_MonBrightnessDown,spawn, {.v = bright_down } }, + #endif { MODKEY, XK_p, spawn, {.v = dmenucmd } }, { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } }, { MODKEY, XK_s, togglebar, {0} }, diff --git a/dwm b/dwm new file mode 100755 index 0000000000000000000000000000000000000000..4fa77cc5658bafa51cc51547534a060591df8df1 GIT binary patch literal 96864 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≪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 O5%E)G1c8kDRQ?Z1)*FNX literal 0 HcmV?d00001 diff --git a/dwm.c b/dwm.c index 3a6afc1..0e45c0d 100644 --- a/dwm.c +++ b/dwm.c @@ -262,7 +262,7 @@ static Cur *cursor[CurLast]; static Clr **scheme; static Display *dpy; static Drw *drw; -static Monitor *mons, *selmon; +Monitor *mons, *selmon; static Window root, wmcheckwin; /* configuration, allows nested code to access above variables */ diff --git a/slstatus b/slstatus new file mode 160000 index 0000000..f68f492 --- /dev/null +++ b/slstatus @@ -0,0 +1 @@ +Subproject commit f68f49273e70b3767b30c549dda04ddd4d25fc91 diff --git a/util.c b/util.c index 8e26a51..f2c45b2 100644 --- a/util.c +++ b/util.c @@ -35,3 +35,9 @@ ecalloc(size_t nmemb, size_t size) die("calloc:"); return p; } + +#include "slstatus/util.c" +// slstatus.c: +char buf[1024]; +#include "slstatus/components/wifi.c" +#include "slstatus/components/battery.c" diff --git a/vene.cpp b/vene.cpp index 9902c67..135ad98 100644 --- a/vene.cpp +++ b/vene.cpp @@ -6,8 +6,13 @@ #include #include #include +#include // #include "vene.h" #include "vene_env.h" +extern "C" +{ + #include "slstatus/slstatus.h" +} using namespace std; using namespace std::chrono; @@ -22,18 +27,62 @@ namespace time_point next_update; bool has_child; Proc child; - Proc browser = {.pid = 0}; } extern "C" { + // from dwm + struct Monitor; + typedef struct { + const char *symbol; + void (*arrange)(Monitor *); + } Layout; + struct Client { + char name[256]; + float mina, maxa; + int x, y, w, h; + int oldx, oldy, oldw, oldh; + int basew, baseh, incw, inch, maxw, maxh, minw, minh, hintsvalid; + int bw, oldbw; + unsigned int tags; + int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; + Client *next; + Client *snext; + Monitor *mon; + Window win; + }; + struct Monitor { + char ltsymbol[16]; + float mfact; + int nmaster; + int num; + int by; /* bar geometry */ + int mx, my, mw, mh; /* screen size */ + int wx, wy, ww, wh; /* window area */ + unsigned int seltags; + unsigned int sellt; + unsigned int tagset[2]; + int showbar; + int topbar; + Client *clients; + Client *sel; + Client *stack; + Monitor *next; + Window barwin; + const Layout *lt[2]; + }; + + typedef union { int i; unsigned int ui; float f; const void *v; } Arg; + + extern Monitor *selmon; + void updatestatus(); void view(const Arg* arg); // end @@ -46,9 +95,6 @@ extern "C" strcpy(SCREEN_CAPS_DIR, HOME); strcat(SCREEN_CAPS_DIR, "/screen_caps/"); - // Signal handlers - // signal(SIGRTMIN, goto_tag); - // strcpy(BOOKMARK_DIR, HOME); // strcat(BOOKMARK_DIR, "/notes/bookmarks/web"); @@ -65,12 +111,58 @@ extern "C" static string new_stat; new_stat.clear(); - // Net - string eth_state; - ifstream("/sys/class/net/eth0/operstate") >> eth_state; - if(eth_state == "up") - new_stat += "🌐 "; + try + { + // Net + for(const auto& dir_entry: fs::directory_iterator("/sys/class/net")) + { + string interface_state; + string interface = dir_entry.path().filename(); + switch(interface[0]) + { + case 'e': // if the name begins with 'e' its ethernet + ifstream(dir_entry.path() / "operstate") >> interface_state; + if(interface_state == "up") + new_stat += "🌐 "; + break; + case 'w': // 'w' means wifi + ifstream(dir_entry.path() / "operstate") >> interface_state; + if(interface_state == "up") + { + new_stat += "🛜"; + if(const char* ssid = wifi_essid(interface.c_str()); ssid) + new_stat += ssid; + new_stat += ' '; + if(const char* perc = wifi_perc(interface.c_str()); perc) + { + new_stat += perc; + new_stat += "% "; + } + } + break; + } + } + // Battery + string charge, state; + ifstream("/sys/class/power_supply/BAT0/capacity") >> charge; + ifstream("/sys/class/power_supply/BAT0/status") >> state; + + const char* remaining = ""; + if(state == "Discharging") + { + new_stat += "🔋"; + remaining = battery_remaining("BAT0"); + } + else + new_stat += "🔌"; + + new_stat += charge; + new_stat += "% "; + new_stat += remaining; + new_stat += ' '; + } + catch(...){ cerr << "EXCEPT\n"; } // Volume string amix_out = $(Cmd("amixer", "get", AUDIO_DEV)); @@ -109,6 +201,9 @@ extern "C" time_point now = system_clock::now(); if(has_child && check_exited(child)) { + // Clean up all zombies + while (waitpid(-1, nullptr, WNOHANG) > 0); + has_child = false; updatestatus(); next_update = now + 10s; @@ -122,16 +217,22 @@ extern "C" void vene_browser(const Arg* arg) { - if( browser.pid == 0 || check_exited(browser) ) // not running - { - browser = Cmd(BROWSER).detach(); + bool browser_tag_used = false; + for(Client* c = selmon->clients; c; c = c->next) + if(c->tags & 1<<8) + { + browser_tag_used = true; + break; + } - // Clean up all zombies - while (waitpid(-1, nullptr, WNOHANG) > 0); - } - else // running, view it + // if( browser_tag_used ) // browser tag is empty, start browser { view(arg); + + } + // else // view browser tag + { + // Cmd(BROWSER).detach(); } } @@ -187,7 +288,7 @@ extern "C" void vene_toggle_vol(const Arg*) { - Cmd toggle_vol("amixer", "-q", "set", AUDIO_DEV, "toggle"); + Cmd toggle_vol("amixer", "-q", "-Dpulse", "set", AUDIO_DEV, "toggle"); child = toggle_vol.detach(); has_child = true; }