ohmu
·
2026-07-25
1/* See LICENSE file for copyright and license details. */
2
3#include <stdio.h>
4#include <stdlib.h>
5#include <err.h>
6#include <xcb/xcb.h>
7#include <xcb/xcb_aux.h>
8
9#include "arg.h"
10#include "util.h"
11
12enum {
13 MAP = 1 << 0,
14 UNMAP = 1 << 1,
15 TOGGLE = 1 << 2
16};
17
18static xcb_connection_t *conn;
19
20static void usage(char *);
21
22static void
23usage(char *name)
24{
25 fprintf(stderr, "usage: %s [-h] [-mut <wid> [wid..]]\n", name);
26 exit(1);
27}
28
29int
30main(int argc, char **argv)
31{
32 int mapflag = 0;
33 xcb_window_t w = 0;
34 char *argv0;
35
36 ARGBEGIN {
37 case 'm': mapflag = MAP; break;
38 case 'u': mapflag = UNMAP; break;
39 case 't': mapflag = TOGGLE; break;
40 default : usage(argv0);
41 } ARGEND;
42
43 if (argc < 1 || mapflag == 0)
44 usage(argv0);
45
46 init_xcb(&conn);
47
48 while (*argv) {
49 w = strtoul(*argv++, NULL, 16);
50
51 switch (mapflag) {
52 case MAP:
53 xcb_map_window(conn, w);
54 break;
55 case UNMAP:
56 xcb_unmap_window(conn, w);
57 break;
58 case TOGGLE:
59 if (mapped(conn, w))
60 xcb_unmap_window(conn, w);
61 else
62 xcb_map_window(conn, w);
63 break;
64 }
65 }
66 xcb_aux_sync(conn);
67
68 kill_xcb(&conn);
69
70 return 0;
71}