diff --git a/src/shared/shell.c b/src/shared/shell.c
index b4e6436..f6b77c1 100644
--- a/src/shared/shell.c
+++ b/src/shared/shell.c
if (!data.input)
return;
+ if (data.mode) {
+ va_start(args, fmt);
+ vprintf(fmt, args);
+ va_end(args);
+ return;
+ }
+
save_input = !RL_ISSTATE(RL_STATE_DONE);
if (save_input) {
switch (si.ssi_signo) {
case SIGINT:
- if (data.input) {
+ if (data.input && !data.mode) {
rl_replace_line("", 0);
rl_crlf();
rl_on_new_line();
/* fall through */
case SIGTERM:
if (!terminated) {
- rl_replace_line("", 0);
- rl_crlf();
+ if (!data.mode) {
+ rl_replace_line("", 0);
+ rl_crlf();
+ }
mainloop_quit();
}
static void rl_init(void)
{
+ if (data.mode)
+ return;
+
setlinebuf(stdout);
rl_attempted_completion_function = shell_completion;
static void rl_cleanup(void)
{
+ if (data.mode)
+ return;
+
rl_message("");
rl_callback_handler_remove();
}
io = io_new(fd);
- io_set_read_handler(io, input_read, NULL, NULL);
+ if (!data.mode)
+ io_set_read_handler(io, input_read, NULL, NULL);
+
io_set_disconnect_handler(io, io_hup, NULL, NULL);
data.input = io;