aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cfg.c10
-rw-r--r--cmd-source-file.c28
-rw-r--r--tmux.15
-rw-r--r--tmux.h2
4 files changed, 28 insertions, 17 deletions
diff --git a/cfg.c b/cfg.c
index 91c16fa4..63413124 100644
--- a/cfg.c
+++ b/cfg.c
@@ -28,11 +28,11 @@
#include "tmux.h"
-char *cfg_file;
-int cfg_finished;
-static char **cfg_causes;
-static u_int cfg_ncauses;
-struct client *cfg_client;
+char *cfg_file;
+int cfg_finished;
+static char **cfg_causes;
+static u_int cfg_ncauses;
+struct client *cfg_client;
static enum cmd_retval
cfg_done(__unused struct cmdq_item *item, __unused void *data)
diff --git a/cmd-source-file.c b/cmd-source-file.c
index d2178692..fc5de58b 100644
--- a/cmd-source-file.c
+++ b/cmd-source-file.c
@@ -18,7 +18,10 @@
#include <sys/types.h>
+#include <errno.h>
+#include <glob.h>
#include <stdlib.h>
+#include <string.h>
#include "tmux.h"
@@ -48,23 +51,28 @@ cmd_source_file_exec(struct cmd *self, struct cmdq_item *item)
struct client *c = item->client;
int quiet;
struct cmdq_item *new_item;
+ enum cmd_retval retval;
+ glob_t g;
+ int i;
- quiet = args_has(args, 'q');
- switch (load_cfg(args->argv[0], c, item, quiet)) {
- case -1:
- if (cfg_finished)
- cfg_print_causes(item);
+ if (glob(args->argv[0], 0, NULL, &g) != 0) {
+ cmdq_error(item, "%s: %s", args->argv[0], strerror(errno));
return (CMD_RETURN_ERROR);
- case 0:
- if (cfg_finished)
- cfg_print_causes(item);
- return (CMD_RETURN_NORMAL);
+ }
+ quiet = args_has(args, 'q');
+
+ retval = CMD_RETURN_NORMAL;
+ for (i = 0; i < g.gl_pathc; i++) {
+ if (load_cfg(g.gl_pathv[i], c, item, quiet) != 0)
+ retval = CMD_RETURN_ERROR;
}
if (cfg_finished) {
new_item = cmdq_get_callback(cmd_source_file_done, NULL);
cmdq_insert_after(item, new_item);
}
- return (CMD_RETURN_NORMAL);
+
+ globfree(&g);
+ return (retval);
}
static enum cmd_retval
diff --git a/tmux.1 b/tmux.1
index 234627fc..a5be4617 100644
--- a/tmux.1
+++ b/tmux.1
@@ -921,7 +921,10 @@ show debugging information about jobs and terminals.
.Xc
.D1 (alias: Ic source )
Execute commands from
-.Ar path .
+.Ar path
+(which may be a
+.Xr glob 3
+pattern).
If
.Fl q
is given, no error will be returned if
diff --git a/tmux.h b/tmux.h
index 25473ba0..89794ecd 100644
--- a/tmux.h
+++ b/tmux.h
@@ -76,7 +76,7 @@ struct tmuxproc;
#define READ_CHANGE_HITS 3
-/* Attribute to make gcc check printf-like arguments. */
+/* Attribute to make GCC check printf-like arguments. */
#define printflike(a, b) __attribute__ ((format (printf, a, b)))
/* Number of items in array. */