diff options
Diffstat (limited to 'plugins/exec/exec.c')
-rw-r--r-- | plugins/exec/exec.c | 48 |
1 files changed, 34 insertions, 14 deletions
diff --git a/plugins/exec/exec.c b/plugins/exec/exec.c index 790278a2..d83a4d74 100644 --- a/plugins/exec/exec.c +++ b/plugins/exec/exec.c @@ -28,7 +28,7 @@ static hexchat_plugin *ph; /* plugin handle */ static char name[] = "Exec"; static char desc[] = "Execute commands inside HexChat"; -static char version[] = "1.1"; +static char version[] = "1.2"; static int run_command (char *word[], char *word_eol[], void *userdata) @@ -41,6 +41,10 @@ run_command (char *word[], char *word_eol[], void *userdata) time_t start; double timeElapsed; + char *token; + char *context = NULL; + int announce = 0; + HANDLE readPipe; HANDLE writePipe; STARTUPINFO sInfo; @@ -59,9 +63,8 @@ run_command (char *word[], char *word_eol[], void *userdata) if (!stricmp("-O", word[2])) { - /*strcat (commandLine, word_eol[3]);*/ - hexchat_printf (ph, "Printing Exec output to others is not supported yet.\n"); - return HEXCHAT_EAT_HEXCHAT; + strcat (commandLine, word_eol[3]); + announce = 1; } else { @@ -90,7 +93,19 @@ run_command (char *word[], char *word_eol[], void *userdata) { /* avoid garbage */ buffer[dwRead] = '\0'; - hexchat_printf (ph, "%s", buffer); + + if (announce) + { + /* Say each line seperately, TODO: improve... */ + token = strtok_s (buffer, "\n", &context); + while (token != NULL) + { + hexchat_commandf (ph, "SAY %s", token); + token = strtok_s (NULL, "\n", &context); + } + } + else + hexchat_printf (ph, "%s", buffer); } } else @@ -100,20 +115,25 @@ run_command (char *word[], char *word_eol[], void *userdata) } timeElapsed = difftime (time (0), start); } - } - /* display a newline to separate things */ - hexchat_printf (ph, "\n"); + /* display a newline to separate things */ + if (!announce) + hexchat_printf (ph, "\n"); + + if (timeElapsed >= 10) + { + hexchat_printf (ph, "Command took too much time to run, execution aborted.\n"); + } - if (timeElapsed >= 10) + CloseHandle (readPipe); + CloseHandle (pInfo.hProcess); + CloseHandle (pInfo.hThread); + } + else { - hexchat_printf (ph, "Command took too much time to run, execution aborted.\n"); + hexchat_command (ph, "help exec"); } - CloseHandle (readPipe); - CloseHandle (pInfo.hProcess); - CloseHandle (pInfo.hThread); - return HEXCHAT_EAT_HEXCHAT; } |