*
* i3 - an improved dynamic tiling window manager
*
- * © 2009 Michael Stapelberg and contributors
+ * © 2009-2010 Michael Stapelberg and contributors
*
* See file LICENSE for license information.
*
#include <err.h>
#include <stdint.h>
#include <getopt.h>
+#include <glob.h>
#include <xcb/xcb.h>
#include <xcb/xcb_aux.h>
static int prompt_len;
static int limit;
+/*
+ * This function resolves ~ in pathnames (and more, see glob(3)).
+ *
+ */
+static char *glob_path(const char *path) {
+ static glob_t globbuf;
+ if (glob(path, GLOB_NOCHECK | GLOB_TILDE, NULL, &globbuf) < 0)
+ errx(EXIT_FAILURE, "glob() failed");
+ char *result = strdup(globbuf.gl_pathc > 0 ? globbuf.gl_pathv[0] : path);
+ if (result == NULL)
+ err(EXIT_FAILURE, "malloc() failed");
+ globfree(&globbuf);
+ return result;
+}
+
/*
* Concats the glyphs (either UCS-2 or UTF-8) to a single string, suitable for
* rendering it (UCS-2) or sending it to i3 (UTF-8).
}
int main(int argc, char *argv[]) {
- char *socket_path = "/tmp/i3-ipc.sock";
+ char *socket_path = glob_path("~/.i3/ipc.sock");
char *pattern = "-misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1";
int o, option_index = 0;
while ((o = getopt_long(argc, argv, options_string, long_options, &option_index)) != -1) {
switch (o) {
case 's':
- socket_path = strdup(optarg);
+ socket_path = glob_path(optarg);
break;
case 'v':
printf("i3-input " I3_VERSION);
#include <err.h>
#include <stdint.h>
#include <getopt.h>
+#include <glob.h>
#include <i3/ipc.h>
+/*
+ * This function resolves ~ in pathnames (and more, see glob(3)).
+ *
+ */
+static char *glob_path(const char *path) {
+ static glob_t globbuf;
+ if (glob(path, GLOB_NOCHECK | GLOB_TILDE, NULL, &globbuf) < 0)
+ errx(EXIT_FAILURE, "glob() failed");
+ char *result = strdup(globbuf.gl_pathc > 0 ? globbuf.gl_pathv[0] : path);
+ if (result == NULL)
+ err(EXIT_FAILURE, "malloc() failed");
+ globfree(&globbuf);
+ return result;
+}
+
/*
* Formats a message (payload) of the given size and type and sends it to i3 via
* the given socket file descriptor.
}
int main(int argc, char *argv[]) {
- char *socket_path = "/tmp/i3-ipc.sock";
+ char *socket_path = glob_path("~/.i3/ipc.sock");
int o, option_index = 0;
int message_type = I3_IPC_MESSAGE_TYPE_COMMAND;
char *payload = "";
while ((o = getopt_long(argc, argv, options_string, long_options, &option_index)) != -1) {
if (o == 's') {
- socket_path = strdup(optarg);
+ socket_path = glob_path(optarg);
} else if (o == 't') {
if (strcasecmp(optarg, "command") == 0)
message_type = I3_IPC_MESSAGE_TYPE_COMMAND;