vene signal changes in dwm and status bar upgrades
This commit is contained in:
@@ -1547,8 +1547,9 @@ setup(void)
|
||||
|
||||
/* do not transform children into zombies when they terminate */
|
||||
sigemptyset(&sa.sa_mask);
|
||||
sa.sa_flags = SA_NOCLDSTOP | SA_NOCLDWAIT | SA_RESTART;
|
||||
sa.sa_handler = SIG_IGN;
|
||||
sa.sa_flags = SA_NOCLDSTOP | SA_RESTART;
|
||||
/* IGN -> DFL for cppipe so that waitpid works */
|
||||
sa.sa_handler = SIG_DFL;
|
||||
sigaction(SIGCHLD, &sa, NULL);
|
||||
|
||||
/* clean up any zombies (inherited from .xinitrc etc) immediately */
|
||||
@@ -1653,8 +1654,11 @@ spawn(const Arg *arg)
|
||||
if (fork() == 0) {
|
||||
if (dpy)
|
||||
close(ConnectionNumber(dpy));
|
||||
|
||||
/* Child starts a new session */
|
||||
setsid();
|
||||
|
||||
/* Don't inherit dwm's sigaction from setup */
|
||||
sigemptyset(&sa.sa_mask);
|
||||
sa.sa_flags = 0;
|
||||
sa.sa_handler = SIG_DFL;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include <time.h>
|
||||
#include <cstring>
|
||||
#include <cstdlib>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <chrono>
|
||||
#include <cppipe/commands.hpp>
|
||||
@@ -17,10 +18,8 @@ char SCREEN_CAPS_DIR[64];
|
||||
namespace
|
||||
{
|
||||
time_point<system_clock> next_update;
|
||||
void schedule_update()
|
||||
{
|
||||
next_update = system_clock::now() + 100ms;
|
||||
}
|
||||
bool has_child;
|
||||
Proc child;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
@@ -62,25 +61,28 @@ 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 += "🌐 ";
|
||||
|
||||
|
||||
// Volume
|
||||
string amix_out = $(Cmd("amixer", "get", AUDIO_DEV));
|
||||
size_t bracket = amix_out.find('[');
|
||||
size_t vol_bracket = amix_out.find('[');
|
||||
|
||||
if(bracket != string::npos)
|
||||
if(vol_bracket != string::npos)
|
||||
{
|
||||
bool is_muted = amix_out.find("[on]") == string::npos;
|
||||
new_stat += is_muted ? "🔇" : "🔉";
|
||||
|
||||
new_stat += amix_out[bracket+1];
|
||||
if(char second = amix_out[bracket+2]; second != '%')
|
||||
new_stat += second;
|
||||
if(char third = amix_out[bracket+3]; third != '%')
|
||||
new_stat += third;
|
||||
size_t first_digit = vol_bracket + 1;
|
||||
size_t close_bracket = amix_out.find(']', first_digit);
|
||||
new_stat.append(amix_out, first_digit, close_bracket - first_digit);
|
||||
|
||||
new_stat += '%';
|
||||
|
||||
}
|
||||
new_stat += ' ';
|
||||
}
|
||||
|
||||
// Time
|
||||
time_t rawtime;
|
||||
@@ -101,10 +103,19 @@ extern "C"
|
||||
{
|
||||
|
||||
time_point<system_clock> now = system_clock::now();
|
||||
if(now > next_update)
|
||||
if(has_child && check_exited(child))
|
||||
{
|
||||
next_update = now + 5s;
|
||||
// Clean up all zombies
|
||||
while (waitpid(-1, nullptr, WNOHANG) > 0);
|
||||
|
||||
has_child = false;
|
||||
updatestatus();
|
||||
next_update = now + 5s;
|
||||
}
|
||||
else if(now > next_update)
|
||||
{
|
||||
updatestatus();
|
||||
next_update = now + 5s;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -137,25 +148,22 @@ extern "C"
|
||||
|
||||
void vene_inc_vol(const Arg*)
|
||||
{
|
||||
Cmd inc_vol("amixer", "set", AUDIO_DEV, "3%+");
|
||||
inc_vol.detach();
|
||||
|
||||
schedule_update();
|
||||
Cmd inc_vol("amixer", "-q", "set", AUDIO_DEV, "3%+");
|
||||
child = inc_vol.detach();
|
||||
has_child = true;
|
||||
}
|
||||
|
||||
void vene_dec_vol(const Arg*)
|
||||
{
|
||||
Cmd dec_vol("amixer", "set", AUDIO_DEV, "3%-");
|
||||
dec_vol.detach();
|
||||
|
||||
schedule_update();
|
||||
Cmd dec_vol("amixer", "-q", "set", AUDIO_DEV, "3%-");
|
||||
child = dec_vol.detach();
|
||||
has_child = true;
|
||||
}
|
||||
|
||||
void vene_toggle_vol(const Arg*)
|
||||
{
|
||||
Cmd toggle_vol("amixer", "set", AUDIO_DEV, "toggle");
|
||||
toggle_vol.detach();
|
||||
|
||||
schedule_update();
|
||||
Cmd toggle_vol("amixer", "-q", "set", AUDIO_DEV, "toggle");
|
||||
child = toggle_vol.detach();
|
||||
has_child = true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user