pacmd: Discriminate between interactive and non-interactive mode

interactive sessions are initiated with a hello message in order to
receive a welcome message from the PA daemon and a command prompt

interactive sessions have a terminal connected to stdin

non-interactive sessions execute commands given on the command line
or received via stdin; non-interactive sessions have neither welcome
message nor command prompt

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
This commit is contained in:
Peter Meerwald 2013-07-29 22:13:41 +02:00 committed by David Henningsson
parent e729783331
commit 193bf997c1

View file

@ -83,7 +83,7 @@ static void help(const char *argv0) {
printf(_("\n" printf(_("\n"
" -h, --help Show this help\n" " -h, --help Show this help\n"
" --version Show version\n" " --version Show version\n"
"When no command is given pacmd starts in the interactive mode\n" )); "When no command is given pacmd starts in the interactive mode.\n" ));
} }
enum { enum {
@ -102,7 +102,6 @@ int main(int argc, char*argv[]) {
bool ibuf_eof, obuf_eof, ibuf_closed, obuf_closed; bool ibuf_eof, obuf_eof, ibuf_closed, obuf_closed;
struct pollfd pollfd[3]; struct pollfd pollfd[3];
struct pollfd *watch_socket, *watch_stdin, *watch_stdout; struct pollfd *watch_socket, *watch_stdin, *watch_stdout;
int stdin_type = 0, stdout_type = 0, fd_type = 0; int stdin_type = 0, stdout_type = 0, fd_type = 0;
char *bn = NULL; char *bn = NULL;
@ -209,6 +208,14 @@ int main(int argc, char*argv[]) {
ibuf_eof = true; ibuf_eof = true;
} }
if (!ibuf_eof && isatty(STDIN_FILENO)) {
/* send hello to enable interactive mode (welcome message, prompt) */
if (pa_write(fd, "hello\n", 6, &fd_type) < 0) {
pa_log(_("write(): %s"), strerror(errno));
goto quit;
}
}
for (;;) { for (;;) {
struct pollfd *p; struct pollfd *p;