Commits

Evan Gates  committed 9c22727

get rid of -c command flag, simplifies stuff alot, user can change the command before compiling

  • Participants
  • Parent commits a619c95

Comments (0)

Files changed (2)

 
 .SH SYNOPSIS
 .SY pcw
-.OP \-c command
 .OP -v
 .I dir
 .YS
 .I outfile
 the file to write user input to
 .TP
-.BI \-c " command"
-the command to run for each new channel, each '%' argument must occur as it's own word, defaults to
-.br
-"urxvt -title %p -e srw -b -p %c cw %o %i"
-.P
-.RS
-.IR %p " \- path to the directory"
-.br
-.IR %c " \- channel, basename of the path (actually set to 'channel> ' to be used as prompt for srw)"
-.br
-.IR %o " \- path to the outfile"
-.br
-.IR %i " \- path to the infile"
-.RE
-.TP
 .B \-v
 print version information and exit
 
 int evq, init;
 int wins[MAX_WATCH] = {0};
 char paths[MAX_WATCH][PATH_MAX] = {{0}};
-char cmd[CMD_MAX] = "urxvt -title %p -e srw -b -p %c cw %o %i";
-
-void usage(void)
-{
-	printf("Usage: pcw [-c command] [-v] dir\n");
-	exit(1);
-}
 
 void win(int wd)
 {
-	char out[PATH_MAX], in[PATH_MAX], path[PATH_MAX], cmd_str[CMD_MAX], channel[32];
-	char *t, *cmd_argv[MAX_ARGS] = {NULL};
-	int i;
+	char out[PATH_MAX], in[PATH_MAX], path[PATH_MAX], channel[32];
+	char *cmd[] = { "urxvt", "-title", paths[wd], "-e", "srw", "-p", channel, "cw", out, in, NULL};
 
 	if (wins[wd])
 		return;
 
-	strcpy(cmd_str, cmd); // stupid strtok messing with my strings
-	for (i = 0, t = strtok(cmd_str, " "); i < MAX_ARGS - 1 && t; i++, t = strtok(NULL, " "))
-		cmd_argv[i] = t;
-
-	for (i = 0; cmd_argv[i]; i++) {
-		if (cmd_argv[i][0] == '%' && cmd_argv[i][1] && cmd_argv[i][2] == '\0') {
-			switch (cmd_argv[i][1]) {
-				case 'c' : cmd_argv[i] = channel;   break;
-				case 'i' : cmd_argv[i] = in;        break;
-				case 'o' : cmd_argv[i] = out;       break;
-				case 'p' : cmd_argv[i] = paths[wd]; break;
-			}
-		}
-	}
-
 	strcpy(path, paths[wd]); // stupid basename messing with my strings
 	sprintf(channel, "%s> ", basename(path));
 	sprintf(out, "%s/out", paths[wd]);
 	sprintf(in,  "%s/in",  paths[wd]);
 
 	if ((wins[wd] = fork()) == 0) {
-		execvp(cmd_argv[0], cmd_argv);
-		err(1, "failed on execvp %s", cmd);
+		execvp(cmd[0], cmd);
+		err(1, "failed on execvp %s", cmd[0]);
 	}
 }
 
 int main(int argc, char **argv)
 {
 	char buf[4096];
-	int i, len;
+	int len;
 	struct inotify_event *cur;
 	struct stat st;
 
-	for (i = 1; i < argc; i++) {
-		if (argv[i][0] != '-')
-			break;
-		if (argv[i][2] != '\0')
-			usage();
-		switch (argv[i][1]) {
-			case 'c' : if (i + 1 >= argc) usage(); strncpy(cmd, argv[++i], sizeof(cmd)); break;
-			case 'v' : printf("pcw-"VERSION" © Evan Gates\n"); exit(1);
-			default  : usage();
-		}
+	if (argc != 2 || !strcmp(argv[1], "-v")) {
+		fprintf(stderr, "Usage: pcw [-v] dir\n");
+		fprintf(stderr, "pcw-"VERSION" © Evan Gates\n");
+		exit(1);
 	}
 
-	if (i >= argc)
-		usage();
-
-	if (stat(argv[i], &st) < 0 || !S_ISDIR(st.st_mode))
-		errx(1, "%s does not exist or is not a directory", argv[i]);
+	if (stat(argv[1], &st) < 0 || !S_ISDIR(st.st_mode))
+		errx(1, "%s does not exist or is not a directory", argv[1]);
 
 	if (signal(SIGCHLD, sigchld) == SIG_ERR)
 		err(1, "failed installing SIGCHLD handler");
 		err(1, "failed on inotify_init()");
 
 	init = 1;
-	ftw(argv[i], add_dir, MAX_OPENFD);
+	ftw(argv[1], add_dir, MAX_OPENFD);
 	init = 0;
 
 	for (;;) {
 			 cur = (struct inotify_event *)((char *)cur + sizeof(struct inotify_event) + cur->len)) {
 
 			if (cur->mask & (IN_CREATE | IN_ISDIR))
-				ftw(argv[i], add_dir, MAX_OPENFD);
+				ftw(argv[1], add_dir, MAX_OPENFD);
 			if (cur->mask & (IN_CREATE | IN_MODIFY) && !strcmp(cur->name, "out"))
 				win(cur->wd);
 		}