X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=i3bar%2Fsrc%2Fmain.c;h=a818dd9710eda58c3647a029f612ff5e0bf6146b;hb=64e7646c7ee3cec9803597c5fde5d5a907881249;hp=4dc55603ad0f4ac672c02fb47818a7594328b47d;hpb=726f2a1e5a6e6567b3c880277986b9d1d7bca931;p=i3%2Fi3 diff --git a/i3bar/src/main.c b/i3bar/src/main.c index 4dc55603..a818dd97 100644 --- a/i3bar/src/main.c +++ b/i3bar/src/main.c @@ -2,9 +2,11 @@ * vim:ts=4:sw=4:expandtab * * i3bar - an xcb-based status- and ws-bar for i3 - * © 2010-2011 Axel Wagner and contributors (see also: LICENSE) + * © 2010 Axel Wagner and contributors (see also: LICENSE) * */ +#include "common.h" + #include #include #include @@ -15,13 +17,34 @@ #include #include -#include "common.h" +/* + * Having verboselog(), errorlog() and debuglog() is necessary when using libi3. + * + */ +void verboselog(char *fmt, ...) { + va_list args; + + va_start(args, fmt); + vfprintf(stdout, fmt, args); + va_end(args); +} + +void errorlog(char *fmt, ...) { + va_list args; + + va_start(args, fmt); + vfprintf(stderr, fmt, args); + va_end(args); +} + +void debuglog(char *fmt, ...) { +} /* * Glob path, i.e. expand ~ * */ -char *expand_path(char *path) { +static char *expand_path(char *path) { static glob_t globbuf; if (glob(path, GLOB_NOCHECK | GLOB_TILDE, NULL, &globbuf) < 0) { ELOG("glob() failed\n"); @@ -32,13 +55,14 @@ char *expand_path(char *path) { return result; } -void print_usage(char *elf_name) { - printf("Usage: %s [-b bar_id] [-s sock_path] [-h] [-v]\n", elf_name); +static void print_usage(char *elf_name) { + printf("Usage: %s -b bar_id [-s sock_path] [-h] [-v]\n", elf_name); printf("\n"); - printf("-b \tBar ID for which to get the configuration\n"); - printf("-s \tConnect to i3 via \n"); - printf("-h\t\tDisplay this help-message and exit\n"); - printf("-v\t\tDisplay version number and exit\n"); + printf("-b, --bar_id \tBar ID for which to get the configuration\n"); + printf("-s, --socket \tConnect to i3 via \n"); + printf("-h, --help Display this help message and exit\n"); + printf("-v, --version Display version number and exit\n"); + printf("-V, --verbose Enable verbose mode\n"); printf("\n"); printf(" PLEASE NOTE that i3bar will be automatically started by i3\n" " as soon as there is a 'bar' configuration block in your\n" @@ -48,11 +72,11 @@ void print_usage(char *elf_name) { /* * We watch various signals, that are there to make our application stop. - * If we get one of those, we ev_unloop() and invoke the cleanup-routines + * If we get one of those, we ev_unloop() and invoke the cleanup routines * in main() with that * */ -void sig_cb(struct ev_loop *loop, ev_signal *watcher, int revents) { +static void sig_cb(struct ev_loop *loop, ev_signal *watcher, int revents) { switch (watcher->signum) { case SIGTERM: DLOG("Got a SIGTERM, stopping\n"); @@ -70,33 +94,36 @@ int main(int argc, char **argv) { int opt; int option_index = 0; char *socket_path = getenv("I3SOCK"); + if (socket_path != NULL) { + socket_path = sstrdup(socket_path); + } char *i3_default_sock_path = "/tmp/i3-ipc.sock"; /* Initialize the standard config to use 0 as default */ memset(&config, '\0', sizeof(config_t)); static struct option long_opt[] = { - { "socket", required_argument, 0, 's' }, - { "bar_id", required_argument, 0, 0 }, - { "help", no_argument, 0, 'h' }, - { "version", no_argument, 0, 'v' }, - { NULL, 0, 0, 0} - }; - - while ((opt = getopt_long(argc, argv, "s:hv", long_opt, &option_index)) != -1) { + {"socket", required_argument, 0, 's'}, + {"bar_id", required_argument, 0, 'b'}, + {"help", no_argument, 0, 'h'}, + {"version", no_argument, 0, 'v'}, + {"verbose", no_argument, 0, 'V'}, + {NULL, 0, 0, 0}}; + + while ((opt = getopt_long(argc, argv, "b:s:hvV", long_opt, &option_index)) != -1) { switch (opt) { case 's': socket_path = expand_path(optarg); break; case 'v': - printf("i3bar version " I3_VERSION " © 2010-2011 Axel Wagner and contributors\n"); + printf("i3bar version " I3_VERSION " © 2010 Axel Wagner and contributors\n"); exit(EXIT_SUCCESS); break; - case 0: - if (!strcmp(long_opt[option_index].name, "bar_id")) { - FREE(config.bar_id); - config.bar_id = sstrdup(optarg); - } + case 'b': + config.bar_id = sstrdup(optarg); + break; + case 'V': + config.verbose = true; break; default: print_usage(argv[0]); @@ -118,20 +145,25 @@ int main(int argc, char **argv) { if (socket_path == NULL) { socket_path = atom_sock_path; + } else { + free(atom_sock_path); } if (socket_path == NULL) { - ELOG("No Socket Path Specified, default to %s\n", i3_default_sock_path); + ELOG("No socket path specified, default to %s\n", i3_default_sock_path); socket_path = expand_path(i3_default_sock_path); } + init_dpi(); + init_outputs(); if (init_connection(socket_path)) { /* Request the bar configuration. When it arrives, we fill the config array. */ i3_send_msg(I3_IPC_MESSAGE_TYPE_GET_BAR_CONFIG, config.bar_id); } + free(socket_path); - /* We listen to SIGTERM/QUIT/INT and try to exit cleanly, by stopping the main-loop. + /* We listen to SIGTERM/QUIT/INT and try to exit cleanly, by stopping the main loop. * We only need those watchers on the stack, so putting them on the stack saves us * some calls to free() */ ev_signal *sig_term = smalloc(sizeof(ev_signal)); @@ -147,17 +179,13 @@ int main(int argc, char **argv) { ev_signal_start(main_loop, sig_hup); /* From here on everything should run smooth for itself, just start listening for - * events. We stop simply stop the event-loop, when we are finished */ + * events. We stop simply stop the event loop, when we are finished */ ev_loop(main_loop, 0); kill_child(); - FREE(statusline_buffer); - clean_xcb(); ev_default_destroy(); - free_workspaces(); - return 0; }