--- ./fvwm/builtins.c.orig	Thu Jun 20 18:31:09 2002
+++ ./fvwm/builtins.c	Thu Jun 20 18:36:20 2002
@@ -792,6 +792,28 @@
   return;
 }
 
+void CMD_ExecWait(F_CMD_ARGS)
+{
+  pid_t pid;
+  char *cmd;
+
+  switch (pid = fork())
+  {
+  case -1:
+    fvwm_msg(ERR,"ExecWait","fork failed (%s)",strerror(errno));
+    break;
+  case 0:
+    cmd = safestrdup(action);
+    execl(exec_shell_name, exec_shell_name, "-c", cmd, NULL);
+    fvwm_msg(ERR,"ExecWait","execl failed (%s)",strerror(errno));
+    exit(100);
+  default:
+    waitpid(pid, NULL, 0);
+    break;
+  }
+  return;
+}
+
 static void refresh_window(Window w)
 {
   XSetWindowAttributes attributes;
--- ./fvwm/commands.h.orig	Thu Jun 20 18:32:49 2002
+++ ./fvwm/commands.h	Thu Jun 20 18:33:18 2002
@@ -74,6 +74,7 @@
 void CMD_EscapeFunc(F_CMD_ARGS);
 void CMD_Exec(F_CMD_ARGS);
 void CMD_ExecUseShell(F_CMD_ARGS);
+void CMD_ExecWait(F_CMD_ARGS);
 void CMD_FakeClick(F_CMD_ARGS);
 void CMD_FlipFocus(F_CMD_ARGS);
 void CMD_Focus(F_CMD_ARGS);
--- ./fvwm/functions.c.orig	Thu Jun 20 18:32:55 2002
+++ ./fvwm/functions.c	Thu Jun 20 18:35:00 2002
@@ -148,6 +148,7 @@
   CMD_ENTRY("escapefunc", CMD_EscapeFunc, F_ESCAPE_FUNC, 0),
   CMD_ENTRY("exec", CMD_Exec, F_EXEC, 0),
   CMD_ENTRY("execuseshell", CMD_ExecUseShell, F_EXEC_SETUP, 0),
+  CMD_ENTRY("execwait", CMD_ExecWait, F_EXEC_WAIT, 0),
   CMD_ENTRY("fakeclick", CMD_FakeClick, F_FAKE_CLICK, 0),
   CMD_ENTRY("flipfocus", CMD_FlipFocus, F_FLIP_FOCUS, FUNC_NEEDS_WINDOW),
   CMD_ENTRY("focus", CMD_Focus, F_FOCUS, FUNC_NEEDS_WINDOW),
--- ./fvwm/functions.h.orig	Thu Jun 20 18:34:29 2002
+++ ./fvwm/functions.h	Thu Jun 20 18:35:26 2002
@@ -122,6 +122,7 @@
   F_ESCAPE_FUNC,
   F_EXEC,
   F_EXEC_SETUP,
+  F_EXEC_WAIT,
   F_FAKE_CLICK,
   F_FUNCTION,
   F_GLOBAL_OPTS,
--- ./fvwm/fvwm2.1.orig	Thu Jun 20 18:40:11 2002
+++ ./fvwm/fvwm2.1	Thu Jun 20 18:44:14 2002
@@ -6828,6 +6828,17 @@
 Read /tmp/file
 .EE
 do not work reliably.
+Use the
+.B ExecWait
+command instead.
+
+.TP
+.BI "ExecWait " command
+Executes
+.IR command
+and waits for it to complete.
+Do not use this for programs that are going to run for any significant
+length of time because fvwm is unresponsive while waiting.
 
 .TP
 .BI "ExecUseShell [" shell "]"

