If stdio is not tty, conf_askvalue() puts additional new line to prevent prompts from being concatenated into a single line. This care is missing in conf_choice(), so a 'choice' prompt and the next prompt are shown in the same line. Move the code into xfgets() to cater to all cases. To improve this more, let's echo stdin to stdout. This clarifies what keys were input from stdio and the stdout looks like as if it were from tty. I removed the isatty(2) check since stderr is unrelated here.
Unified · Split
| @@ -76,6 +76,9 @@ static void xfgets(char *str, int size, FILE *in) · 75 unmodified lines | |||
| 76 | { | 76 | { |
| 77 | if (!fgets(str, size, in)) | 77 | if (!fgets(str, size, in)) |
| 78 | fprintf(stderr, "\nError in reading or end of file.\n"); | 78 | fprintf(stderr, "\nError in reading or end of file.\n"); |
| 79 | |||
| 80 | if (!tty_stdio) | ||
| 81 | printf("%s", str); | ||
| 79 | } | 82 | } |
| 80 | 83 | ||
| 81 | static int conf_askvalue(struct symbol *sym, const char *def) | 84 | static int conf_askvalue(struct symbol *sym, const char *def) |
| @@ -106,8 +109,6 @@ static int conf_askvalue(struct symbol *sym, const char *def) · 24 unmodified lines | |||
| 106 | case oldaskconfig: | 109 | case oldaskconfig: |
| 107 | fflush(stdout); | 110 | fflush(stdout); |
| 108 | xfgets(line, sizeof(line), stdin); | 111 | xfgets(line, sizeof(line), stdin); |
| 109 | if (!tty_stdio) | ||
| 110 | printf("\n"); | ||
| 111 | return 1; | 112 | return 1; |
| 112 | default: | 113 | default: |
| 113 | break; | 114 | break; |
| @@ -490,7 +491,7 @@ int main(int ac, char **av) · 376 unmodified lines | |||
| 490 | bindtextdomain(PACKAGE, LOCALEDIR); | 491 | bindtextdomain(PACKAGE, LOCALEDIR); |
| 491 | textdomain(PACKAGE); | 492 | textdomain(PACKAGE); |
| 492 | 493 | ||
| 493 | tty_stdio = isatty(0) && isatty(1) && isatty(2); | 494 | tty_stdio = isatty(0) && isatty(1); |
| 494 | 495 | ||
| 495 | while ((opt = getopt_long(ac, av, "s", long_opts, NULL)) != -1) { | 496 | while ((opt = getopt_long(ac, av, "s", long_opts, NULL)) != -1) { |
| 496 | if (opt == 's') { | 497 | if (opt == 's') { |