mirror of
https://github.com/vale981/bspwm
synced 2025-03-06 02:01:42 -05:00
commit
1c404cc3f6
11 changed files with 99 additions and 85 deletions
4
Makefile
4
Makefile
|
@ -8,8 +8,8 @@ LDFLAGS = $(LIBS)
|
|||
PREFIX ?= /usr/local
|
||||
BINPREFIX = $(PREFIX)/bin
|
||||
|
||||
WM_SRC = bspwm.c events.c messages.c ewmh.c settings.c misc.c tree.c types.c rules.c window.c
|
||||
CL_SRC = bspc.c
|
||||
WM_SRC = bspwm.c events.c messages.c ewmh.c settings.c helpers.c tree.c types.c rules.c window.c
|
||||
CL_SRC = bspc.c helpers.c
|
||||
|
||||
WM_OBJ = $(WM_SRC:.c=.o)
|
||||
CL_OBJ = $(CL_SRC:.c=.o)
|
||||
|
|
63
bspc.c
63
bspc.c
|
@ -1,52 +1,59 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/un.h>
|
||||
#include <unistd.h>
|
||||
#include "helpers.h"
|
||||
#include "common.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int sock_fd, nbr, i;
|
||||
int sock_fd;
|
||||
struct sockaddr_un sock_address;
|
||||
char socket_path[BUFSIZ];
|
||||
size_t msglen = 0;
|
||||
char msg[BUFSIZ];
|
||||
char rsp[BUFSIZ];
|
||||
|
||||
if (argc < 2)
|
||||
return -1;
|
||||
die("no arguments given\n");
|
||||
|
||||
char *sp = getenv(SOCKET_ENV_VAR);
|
||||
|
||||
strncpy(socket_path, (sp == NULL ? DEFAULT_SOCKET_PATH : sp), sizeof(socket_path));
|
||||
|
||||
msg[0] = '\0';
|
||||
|
||||
int max = sizeof(msg);
|
||||
for (i = 1; max > 0 && i < argc; i++) {
|
||||
strncat(msg, argv[i], max);
|
||||
max -= strlen(argv[i]);
|
||||
if (i < (argc - 1)) {
|
||||
strncat(msg, TOKEN_SEP, max);
|
||||
max -= strlen(TOKEN_SEP);
|
||||
}
|
||||
}
|
||||
char *sock_path = getenv(SOCKET_ENV_VAR);
|
||||
if (sock_path == NULL || strlen(sock_path) == 0)
|
||||
warn("environmental variable '%s' is not set or empty - using default value: %s\n", SOCKET_ENV_VAR, DEFAULT_SOCKET_PATH);
|
||||
else if (sizeof(sock_address.sun_path) <= strlen(sock_path))
|
||||
die("value too long for environmental variable '%s'\n", SOCKET_ENV_VAR);
|
||||
|
||||
sock_address.sun_family = AF_UNIX;
|
||||
strncpy(sock_address.sun_path, socket_path, sizeof(sock_address.sun_path));
|
||||
strncpy(sock_address.sun_path, (sock_path == NULL ? DEFAULT_SOCKET_PATH: sock_path), sizeof(sock_address.sun_path));
|
||||
sock_address.sun_path[sizeof(sock_address.sun_path) - 1] = 0;
|
||||
|
||||
for (int offset = 0, len = BUFSIZ, n = 0; --argc && ++argv && len > 0; offset += n, len -= n)
|
||||
n = snprintf(msg + offset, len, "%s ", *argv);
|
||||
|
||||
msglen = strlen(msg);
|
||||
if (msg[msglen - 1] == ' ')
|
||||
msg[--msglen] = '\0';
|
||||
|
||||
sock_fd = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||
connect(sock_fd, (struct sockaddr *) &sock_address, sizeof(sock_address));
|
||||
if (sock_fd == -1)
|
||||
die("failed to create socket\n");
|
||||
|
||||
send(sock_fd, msg, strlen(msg), 0);
|
||||
if (connect(sock_fd, (struct sockaddr *) &sock_address, sizeof(sock_address)) == -1)
|
||||
die("failed to connect to socket\n");
|
||||
|
||||
if ((nbr = recv(sock_fd, rsp, sizeof(rsp), 0)) > 0) {
|
||||
rsp[nbr] = '\0';
|
||||
if (strcmp(rsp, EMPTY_RESPONSE) != 0)
|
||||
printf("%s", rsp);
|
||||
if (send(sock_fd, msg, msglen, 0) == -1)
|
||||
die("failed to send data\n");
|
||||
|
||||
int n = recv(sock_fd, rsp, sizeof(rsp), 0);
|
||||
if (n == -1)
|
||||
die("failed to get response\n");
|
||||
else if (n > 0) {
|
||||
rsp[n] = '\0';
|
||||
printf("%s\n", rsp);
|
||||
}
|
||||
|
||||
close(sock_fd);
|
||||
return 0;
|
||||
if (sock_fd)
|
||||
close(sock_fd);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
|
16
bspwm.c
16
bspwm.c
|
@ -18,7 +18,7 @@
|
|||
#include "rules.h"
|
||||
#include "events.h"
|
||||
#include "common.h"
|
||||
#include "misc.h"
|
||||
#include "helpers.h"
|
||||
#include "bspwm.h"
|
||||
#include "tree.h"
|
||||
#include "ewmh.h"
|
||||
|
@ -53,7 +53,7 @@ void setup(void)
|
|||
screen_height = screen->height_in_pixels;
|
||||
root_depth = screen->root_depth;
|
||||
|
||||
xcb_atom_t net_atoms[] = {ewmh->_NET_SUPPORTED,
|
||||
xcb_atom_t net_atoms[] = {ewmh->_NET_SUPPORTED,
|
||||
ewmh->_NET_DESKTOP_NAMES,
|
||||
ewmh->_NET_NUMBER_OF_DESKTOPS,
|
||||
ewmh->_NET_CURRENT_DESKTOP,
|
||||
|
@ -85,9 +85,10 @@ int main(void)
|
|||
{
|
||||
fd_set descriptors;
|
||||
char socket_path[BUFSIZ];
|
||||
int sock_fd, ret_fd, dpy_fd, sel, nbr;
|
||||
int sock_fd, ret_fd, dpy_fd, sel, n;
|
||||
struct sockaddr_un sock_address;
|
||||
char msg[BUFSIZ], rsp[BUFSIZ];
|
||||
char msg[BUFSIZ] = {0};
|
||||
char rsp[BUFSIZ] = {0};
|
||||
|
||||
xcb_generic_event_t *event;
|
||||
|
||||
|
@ -113,7 +114,7 @@ int main(void)
|
|||
|
||||
sock_fd = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||
|
||||
if (sock_fd == -1)
|
||||
if (sock_fd == -1)
|
||||
die("error: could not create socket\n");
|
||||
|
||||
bind(sock_fd, (struct sockaddr *) &sock_address, sizeof(sock_address));
|
||||
|
@ -138,9 +139,8 @@ int main(void)
|
|||
|
||||
if (FD_ISSET(sock_fd, &descriptors)) {
|
||||
ret_fd = accept(sock_fd, NULL, 0);
|
||||
if (ret_fd > 0 && (nbr = recv(ret_fd, msg, sizeof(msg), 0)) > 0) {
|
||||
msg[nbr] = '\0';
|
||||
strncpy(rsp, EMPTY_RESPONSE, sizeof(rsp));
|
||||
if (ret_fd > 0 && (n = recv(ret_fd, msg, sizeof(msg), 0)) > 0) {
|
||||
msg[n] = '\0';
|
||||
process_message(msg, rsp);
|
||||
send(ret_fd, rsp, strlen(rsp), 0);
|
||||
close(ret_fd);
|
||||
|
|
1
common.h
1
common.h
|
@ -3,7 +3,6 @@
|
|||
|
||||
#define DEFAULT_SOCKET_PATH "/tmp/bspwm-socket"
|
||||
#define SOCKET_ENV_VAR "BSPWM_SOCKET"
|
||||
#define EMPTY_RESPONSE ""
|
||||
#define TOKEN_SEP " "
|
||||
|
||||
#endif
|
||||
|
|
2
events.c
2
events.c
|
@ -7,7 +7,7 @@
|
|||
#include "types.h"
|
||||
#include "bspwm.h"
|
||||
#include "settings.h"
|
||||
#include "misc.h"
|
||||
#include "helpers.h"
|
||||
#include "window.h"
|
||||
#include "events.h"
|
||||
#include "tree.h"
|
||||
|
|
|
@ -1,16 +1,26 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <xcb/xcb.h>
|
||||
#include <xcb/xcb_event.h>
|
||||
#include "bspwm.h"
|
||||
#include "misc.h"
|
||||
#include "helpers.h"
|
||||
|
||||
void die(const char *errstr, ...) {
|
||||
void logmsg(FILE *stream, char *fmt, va_list ap) {
|
||||
vfprintf(stream, fmt, ap);
|
||||
}
|
||||
|
||||
void warn(char *fmt, ...) {
|
||||
va_list ap;
|
||||
va_start(ap, errstr);
|
||||
vfprintf(stderr, errstr, ap);
|
||||
va_start(ap, fmt);
|
||||
logmsg(stderr, fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
__attribute__((noreturn))
|
||||
void die(char *fmt, ...) {
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
logmsg(stderr, fmt, ap);
|
||||
va_end(ap);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
10
helpers.h
10
helpers.h
|
@ -1,6 +1,10 @@
|
|||
#ifndef _HELPERS_H
|
||||
#define _HELPERS_H
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#define LENGTH(x) (sizeof(x) / sizeof(*x))
|
||||
#define MAX(A, B) ((A) > (B) ? (A) : (B))
|
||||
#define MIN(A, B) ((A) < (B) ? (A) : (B))
|
||||
|
@ -18,4 +22,10 @@
|
|||
# define PRINTF(x) ;
|
||||
#endif
|
||||
|
||||
void logmsg(FILE *, char *, va_list);
|
||||
void warn(char *, ...);
|
||||
__attribute__((noreturn))
|
||||
void die(char *, ...);
|
||||
uint32_t get_color(char *);
|
||||
|
||||
#endif
|
||||
|
|
50
messages.c
50
messages.c
|
@ -7,7 +7,7 @@
|
|||
#include "types.h"
|
||||
#include "bspwm.h"
|
||||
#include "ewmh.h"
|
||||
#include "misc.h"
|
||||
#include "helpers.h"
|
||||
#include "window.h"
|
||||
#include "tree.h"
|
||||
|
||||
|
@ -18,11 +18,11 @@ void process_message(char *msg, char *rsp)
|
|||
if (cmd == NULL)
|
||||
return;
|
||||
|
||||
if (strcmp(cmd, "get") == 0) {
|
||||
if (strncmp(cmd, "get", 4) == 0) {
|
||||
char *name = strtok(NULL, TOKEN_SEP);
|
||||
get_setting(name, rsp);
|
||||
return;
|
||||
} else if (strcmp(cmd, "set") == 0) {
|
||||
} else if (strncmp(cmd, "set", 4) == 0) {
|
||||
char *name = strtok(NULL, TOKEN_SEP);
|
||||
char *value = strtok(NULL, TOKEN_SEP);
|
||||
set_setting(name, value, rsp);
|
||||
|
@ -204,7 +204,7 @@ void process_message(char *msg, char *rsp)
|
|||
quit();
|
||||
return;
|
||||
} else {
|
||||
snprintf(rsp, BUFSIZ, "unknown command: %s\n", cmd);
|
||||
snprintf(rsp, BUFSIZ, "unknown command: %s", cmd);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -273,7 +273,7 @@ void set_setting(char *name, char *value, char *rsp)
|
|||
ewmh_update_wm_name();
|
||||
return;
|
||||
} else {
|
||||
snprintf(rsp, BUFSIZ, "unknown setting: %s\n", name);
|
||||
snprintf(rsp, BUFSIZ, "unknown setting: %s", name);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -286,45 +286,45 @@ void get_setting(char *name, char* rsp)
|
|||
return;
|
||||
|
||||
if (strcmp(name, "inner_border_width") == 0)
|
||||
sprintf(rsp, "%u\n", inner_border_width);
|
||||
sprintf(rsp, "%u", inner_border_width);
|
||||
else if (strcmp(name, "main_border_width") == 0)
|
||||
sprintf(rsp, "%u\n", main_border_width);
|
||||
sprintf(rsp, "%u", main_border_width);
|
||||
else if (strcmp(name, "outer_border_width") == 0)
|
||||
sprintf(rsp, "%u\n", outer_border_width);
|
||||
sprintf(rsp, "%u", outer_border_width);
|
||||
else if (strcmp(name, "border_width") == 0)
|
||||
sprintf(rsp, "%u\n", border_width);
|
||||
sprintf(rsp, "%u", border_width);
|
||||
else if (strcmp(name, "window_gap") == 0)
|
||||
sprintf(rsp, "%i\n", window_gap);
|
||||
sprintf(rsp, "%i", window_gap);
|
||||
else if (strcmp(name, "left_padding") == 0)
|
||||
sprintf(rsp, "%i\n", left_padding);
|
||||
sprintf(rsp, "%i", left_padding);
|
||||
else if (strcmp(name, "right_padding") == 0)
|
||||
sprintf(rsp, "%i\n", right_padding);
|
||||
sprintf(rsp, "%i", right_padding);
|
||||
else if (strcmp(name, "top_padding") == 0)
|
||||
sprintf(rsp, "%i\n", top_padding);
|
||||
sprintf(rsp, "%i", top_padding);
|
||||
else if (strcmp(name, "bottom_padding") == 0)
|
||||
sprintf(rsp, "%i\n", bottom_padding);
|
||||
sprintf(rsp, "%i", bottom_padding);
|
||||
else if (strcmp(name, "active_border_color") == 0)
|
||||
sprintf(rsp, "%s (%06X)\n", active_border_color, active_border_color_pxl);
|
||||
sprintf(rsp, "%s (%06X)", active_border_color, active_border_color_pxl);
|
||||
else if (strcmp(name, "normal_border_color") == 0)
|
||||
sprintf(rsp, "%s (%06X)\n", normal_border_color, normal_border_color_pxl);
|
||||
sprintf(rsp, "%s (%06X)", normal_border_color, normal_border_color_pxl);
|
||||
else if (strcmp(name, "inner_border_color") == 0)
|
||||
sprintf(rsp, "%s (%06X)\n", inner_border_color, inner_border_color_pxl);
|
||||
sprintf(rsp, "%s (%06X)", inner_border_color, inner_border_color_pxl);
|
||||
else if (strcmp(name, "outer_border_color") == 0)
|
||||
sprintf(rsp, "%s (%06X)\n", outer_border_color, outer_border_color_pxl);
|
||||
sprintf(rsp, "%s (%06X)", outer_border_color, outer_border_color_pxl);
|
||||
else if (strcmp(name, "presel_border_color") == 0)
|
||||
sprintf(rsp, "%s (%06X)\n", presel_border_color, presel_border_color_pxl);
|
||||
sprintf(rsp, "%s (%06X)", presel_border_color, presel_border_color_pxl);
|
||||
else if (strcmp(name, "active_locked_border_color") == 0)
|
||||
sprintf(rsp, "%s (%06X)\n", active_locked_border_color, active_locked_border_color_pxl);
|
||||
sprintf(rsp, "%s (%06X)", active_locked_border_color, active_locked_border_color_pxl);
|
||||
else if (strcmp(name, "normal_locked_border_color") == 0)
|
||||
sprintf(rsp, "%s (%06X)\n", normal_locked_border_color, normal_locked_border_color_pxl);
|
||||
sprintf(rsp, "%s (%06X)", normal_locked_border_color, normal_locked_border_color_pxl);
|
||||
else if (strcmp(name, "urgent_border_color") == 0)
|
||||
sprintf(rsp, "%s (%06X)\n", urgent_border_color, urgent_border_color_pxl);
|
||||
sprintf(rsp, "%s (%06X)", urgent_border_color, urgent_border_color_pxl);
|
||||
else if (strcmp(name, "borderless_monocle") == 0)
|
||||
sprintf(rsp, "%s\n", BOOLSTR(borderless_monocle));
|
||||
sprintf(rsp, "%s", BOOLSTR(borderless_monocle));
|
||||
else if (strcmp(name, "wm_name") == 0)
|
||||
sprintf(rsp, "%s\n", wm_name);
|
||||
sprintf(rsp, "%s", wm_name);
|
||||
else
|
||||
snprintf(rsp, BUFSIZ, "unknown setting: %s\n", name);
|
||||
snprintf(rsp, BUFSIZ, "unknown setting: %s", name);
|
||||
}
|
||||
|
||||
|
||||
|
|
12
misc.h
12
misc.h
|
@ -1,12 +0,0 @@
|
|||
#ifndef _UTILS_H
|
||||
#define _UTILS_H
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <xcb/xcb.h>
|
||||
#include <xcb/xcb_event.h>
|
||||
#include "types.h"
|
||||
|
||||
void die(const char *, ...);
|
||||
uint32_t get_color(char *);
|
||||
|
||||
#endif
|
|
@ -5,7 +5,7 @@
|
|||
#include <xcb/xcb.h>
|
||||
#include <xcb/xcb_event.h>
|
||||
#include "bspwm.h"
|
||||
#include "misc.h"
|
||||
#include "helpers.h"
|
||||
#include "common.h"
|
||||
#include "settings.h"
|
||||
|
||||
|
|
2
tree.c
2
tree.c
|
@ -5,7 +5,7 @@
|
|||
#include <xcb/xcb.h>
|
||||
#include <xcb/xcb_event.h>
|
||||
#include "settings.h"
|
||||
#include "misc.h"
|
||||
#include "helpers.h"
|
||||
#include "window.h"
|
||||
#include "types.h"
|
||||
#include "bspwm.h"
|
||||
|
|
Loading…
Add table
Reference in a new issue