summary refs log tree commit diff
diff options
context:
space:
mode:
authorokan <okan>2018-02-04 22:56:26 +0000
committerokan <okan>2018-02-04 22:56:26 +0000
commit14c17b5f9b8b21860e42cad4fa24d4b87b84a8f1 (patch)
tree10954bf502995242b119d1c06c31375fa764c267
parent8623c7add79876a138bc40c9ecdd1b3e5609fd70 (diff)
downloadcwm-14c17b5f9b8b21860e42cad4fa24d4b87b84a8f1.tar.gz
cwm-14c17b5f9b8b21860e42cad4fa24d4b87b84a8f1.tar.xz
cwm-14c17b5f9b8b21860e42cad4fa24d4b87b84a8f1.zip
Slightly expand and expose verbose debugging.
-rw-r--r--calmwm.c7
-rw-r--r--calmwm.h17
-rw-r--r--cwm.16
-rw-r--r--util.c8
-rw-r--r--xevents.c28
5 files changed, 38 insertions, 28 deletions
diff --git a/calmwm.c b/calmwm.c
index 3e61ae7..9deb9a3 100644
--- a/calmwm.c
+++ b/calmwm.c
@@ -67,7 +67,7 @@ main(int argc, char **argv)
 
 	fallback = u_argv(argv);
 	Conf.wm_argv = u_argv(argv);
-	while ((ch = getopt(argc, argv, "c:d:")) != -1) {
+	while ((ch = getopt(argc, argv, "c:d:v")) != -1) {
 		switch (ch) {
 		case 'c':
 			conf_file = optarg;
@@ -75,6 +75,9 @@ main(int argc, char **argv)
 		case 'd':
 			display_name = optarg;
 			break;
+		case 'v':
+			Conf.debug++;
+			break;
 		default:
 			usage();
 		}
@@ -241,7 +244,7 @@ usage(void)
 {
 	extern char	*__progname;
 
-	(void)fprintf(stderr, "usage: %s [-c file] [-d display]\n",
+	(void)fprintf(stderr, "usage: %s [-v] [-c file] [-d display]\n",
 	    __progname);
 	exit(1);
 }
diff --git a/calmwm.h b/calmwm.h
index 9035964..f87640a 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -31,12 +31,10 @@
 #include <X11/extensions/Xrandr.h>
 #include <X11/keysym.h>
 
-/* #define DEBUG */
-#ifdef DEBUG
-#define DPRINTF(...)	log_debug(__func__, __VA_ARGS__)
-#else
-#define DPRINTF(...)	do {} while (0)
-#endif /* DEBUG */
+#define LOG_DEBUG0(...)	log_debug(0, __func__, __VA_ARGS__)
+#define LOG_DEBUG1(...)	log_debug(1, __func__, __VA_ARGS__)
+#define LOG_DEBUG2(...)	log_debug(2, __func__, __VA_ARGS__)
+#define LOG_DEBUG3(...)	log_debug(3, __func__, __VA_ARGS__)
 
 #undef MIN
 #undef MAX
@@ -313,6 +311,7 @@ struct conf {
 	char			*homedir;
 	char			*known_hosts;
 	char			*wm_argv;
+	u_int32_t		 debug;
 };
 
 /* MWM hints */
@@ -591,9 +590,9 @@ void 			 xu_ewmh_restore_net_wm_state(struct client_ctx *);
 char			*u_argv(char * const *);
 void			 u_exec(char *);
 void			 u_spawn(char *);
-void			 log_debug(const char *, const char *, ...)
-			    __attribute__((__format__ (printf, 2, 3)))
-			    __attribute__((__nonnull__ (2)));
+void			 log_debug(int, const char *, const char *, ...)
+			    __attribute__((__format__ (printf, 3, 4)))
+			    __attribute__((__nonnull__ (3)));
 
 void			*xcalloc(size_t, size_t);
 void			*xmalloc(size_t);
diff --git a/cwm.1 b/cwm.1
index 2148d44..bf6c573 100644
--- a/cwm.1
+++ b/cwm.1
@@ -23,6 +23,7 @@
 .Sh SYNOPSIS
 .\" For a program:  program [-abc] file ...
 .Nm cwm
+.Op Fl v
 .Op Fl c Ar file
 .Op Fl d Ar display
 .Sh DESCRIPTION
@@ -47,6 +48,11 @@ however,
 will continue to process the rest of the configuration file.
 .It Fl d Ar display
 Specify the display to use.
+.It Fl v
+Verbose mode.
+Multiple
+.Fl v
+options increase the verbosity.
 .El
 .Pp
 .Nm
diff --git a/util.c b/util.c
index e6e8443..575d6b2 100644
--- a/util.c
+++ b/util.c
@@ -123,14 +123,16 @@ log_msg(const char *msg, va_list ap)
 }
 
 void
-log_debug(const char *func, const char *msg, ...)
+log_debug(int level, const char *func, const char *msg, ...)
 {
 	char	*fmt;
 	va_list	 ap;
 
+	if (Conf.debug < level)
+		return;
+
 	va_start(ap, msg);
-	if (asprintf(&fmt, "%s: %s", func, msg) == -1)
-		exit(1);
+	xasprintf(&fmt, "debug%d: %s: %s", level, func, msg);
 	log_msg(fmt, ap);
 	va_end(ap);
 }
diff --git a/xevents.c b/xevents.c
index 8ea30ba..21eb68b 100644
--- a/xevents.c
+++ b/xevents.c
@@ -77,7 +77,7 @@ xev_handle_maprequest(XEvent *ee)
 	XMapRequestEvent	*e = &ee->xmaprequest;
 	struct client_ctx	*cc = NULL, *old_cc;
 
-	DPRINTF("window: 0x%lx", e->window);
+	LOG_DEBUG3("window: 0x%lx", e->window);
 
 	if ((old_cc = client_current()) != NULL)
 		client_ptrsave(old_cc);
@@ -95,7 +95,7 @@ xev_handle_unmapnotify(XEvent *ee)
 	XUnmapEvent		*e = &ee->xunmap;
 	struct client_ctx	*cc;
 
-	DPRINTF("window: 0x%lx", e->window);
+	LOG_DEBUG3("window: 0x%lx", e->window);
 
 	if ((cc = client_find(e->window)) != NULL) {
 		if (e->send_event) {
@@ -113,7 +113,7 @@ xev_handle_destroynotify(XEvent *ee)
 	XDestroyWindowEvent	*e = &ee->xdestroywindow;
 	struct client_ctx	*cc;
 
-	DPRINTF("window: 0x%lx", e->window);
+	LOG_DEBUG3("window: 0x%lx", e->window);
 
 	if ((cc = client_find(e->window)) != NULL)
 		client_delete(cc);
@@ -127,7 +127,7 @@ xev_handle_configurerequest(XEvent *ee)
 	struct screen_ctx	*sc;
 	XWindowChanges		 wc;
 
-	DPRINTF("window: 0x%lx", e->window);
+	LOG_DEBUG3("window: 0x%lx", e->window);
 
 	if ((cc = client_find(e->window)) != NULL) {
 		sc = cc->sc;
@@ -182,7 +182,7 @@ xev_handle_propertynotify(XEvent *ee)
 	struct screen_ctx	*sc;
 	struct client_ctx	*cc;
 
-	DPRINTF("window: 0x%lx", e->window);
+	LOG_DEBUG3("window: 0x%lx", e->window);
 
 	if ((cc = client_find(e->window)) != NULL) {
 		switch (e->atom) {
@@ -219,7 +219,7 @@ xev_handle_enternotify(XEvent *ee)
 	XCrossingEvent		*e = &ee->xcrossing;
 	struct client_ctx	*cc;
 
-	DPRINTF("window: 0x%lx", e->window);
+	LOG_DEBUG3("window: 0x%lx", e->window);
 
 	Last_Event_Time = e->time;
 
@@ -235,7 +235,7 @@ xev_handle_buttonpress(XEvent *ee)
 	struct screen_ctx	*sc;
 	struct bind_ctx		*mb;
 
-	DPRINTF("window: 0x%lx", e->window);
+	LOG_DEBUG3("window: 0x%lx", e->window);
 
 	e->state &= ~IGNOREMODMASK;
 
@@ -273,7 +273,7 @@ xev_handle_buttonrelease(XEvent *ee)
 	XButtonEvent		*e = &ee->xbutton;
 	struct client_ctx	*cc;
 
-	DPRINTF("window: 0x%lx", ee->xbutton.window);
+	LOG_DEBUG3("window: 0x%lx", ee->xbutton.window);
 
 	if ((cc = client_find(e->window)) != NULL) {
 		if (cc->flags & (CLIENT_ACTIVE | CLIENT_HIGHLIGHT)) {
@@ -293,7 +293,7 @@ xev_handle_keypress(XEvent *ee)
 	KeySym			 keysym, skeysym;
 	unsigned int		 modshift;
 
-	DPRINTF("window: 0x%lx", e->window);
+	LOG_DEBUG3("window: 0x%lx", e->window);
 
 	keysym = XkbKeycodeToKeysym(X_Dpy, e->keycode, 0, 0);
 	skeysym = XkbKeycodeToKeysym(X_Dpy, e->keycode, 0, 1);
@@ -346,7 +346,7 @@ xev_handle_keyrelease(XEvent *ee)
 	KeySym			 keysym;
 	unsigned int		 i;
 
-	DPRINTF("window: 0x%lx", e->window);
+	LOG_DEBUG3("window: 0x%lx", e->window);
 
 	if ((sc = screen_find(e->root)) == NULL)
 		return;
@@ -377,7 +377,7 @@ xev_handle_clientmessage(XEvent *ee)
 	struct client_ctx	*cc, *old_cc;
 	struct screen_ctx       *sc;
 
-	DPRINTF("window: 0x%lx", e->window);
+	LOG_DEBUG3("window: 0x%lx", e->window);
 
 	if (e->message_type == cwmh[WM_CHANGE_STATE]) {
 		if ((cc = client_find(e->window)) != NULL) {
@@ -426,7 +426,7 @@ xev_handle_randr(XEvent *ee)
 	struct screen_ctx		*sc;
 	int				 i;
 
-	DPRINTF("new size: %d/%d", rev->width, rev->height);
+	LOG_DEBUG3("new size: %d/%d", rev->width, rev->height);
 
 	i = XRRRootToScreen(X_Dpy, rev->root);
 	TAILQ_FOREACH(sc, &Screenq, entry) {
@@ -448,7 +448,7 @@ xev_handle_mappingnotify(XEvent *ee)
 	XMappingEvent		*e = &ee->xmapping;
 	struct screen_ctx	*sc;
 
-	DPRINTF("window: 0x%lx", e->window);
+	LOG_DEBUG3("window: 0x%lx", e->window);
 
 	XRefreshKeyboardMapping(e);
 	if (e->request == MappingKeyboard) {
@@ -463,7 +463,7 @@ xev_handle_expose(XEvent *ee)
 	XExposeEvent		*e = &ee->xexpose;
 	struct client_ctx	*cc;
 
-	DPRINTF("window: 0x%lx", e->window);
+	LOG_DEBUG3("window: 0x%lx", e->window);
 
 	if ((cc = client_find(e->window)) != NULL && e->count == 0)
 		client_draw_border(cc);