On 09/19/2014 10:05 AM, Pádraig Brady wrote: > tag 18506 notabug > close 18506 > stop > > On 09/19/2014 03:09 AM, Edward Huff wrote: >> $ stty dsusp undef >> stty: invalid argument ‘dsusp’ >> Try 'stty --help' for more information. >> $ stty --help | grep dsusp >> * dsusp CHAR CHAR will send a terminal stop signal once input flushed >> $ stty --version >> stty (GNU coreutils) 8.21 > > The dsusp entry is tagged with "*" to indicate it's not a POSIX setting, > and just above the --help says: "The underlying system defines which settings > are available." > So it's just the case that this setting is not available on your system, > which is the case for Linux for example. Ideally the listed options would > be dynamic and not list this as an option for you, but this would complicate > the man page generation.
However man pages are generated at build time now, so we might consider eliding non applicable items? The caveat to that is that man pages generated and then copied on the web somewhere would be less general. I'm leaning towards that actually as currently we don't distinguish "invalid argument" from "not supported" errors. Proposed patch attached. thanks, Pádraig.
>From be1e555db9cfd7e82a0a26e1a612a65ebe93d789 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A1draig=20Brady?= <p...@draigbrady.com> Date: Fri, 19 Sep 2014 16:15:04 +0100 Subject: [PATCH] stty: only list supported options in --help and man pages * src/stty.c (usage): Exclude unsupported options from --help, which only impacts the "dsusp" option on GNU/Linux. Fixes http://bugs.gnu.org/18506 --- src/stty.c | 177 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 173 insertions(+), 4 deletions(-) diff --git a/src/stty.c b/src/stty.c index 9e4c530..e306672 100644 --- a/src/stty.c +++ b/src/stty.c @@ -539,45 +539,84 @@ settings. The underlying system defines which settings are available.\n\ "), stdout); fputs (_("\ \n\ -Special characters:\n\ +Special characters:\n"), stdout); +#ifdef VDSUSP + fputs (_("\ * dsusp CHAR CHAR will send a terminal stop signal once input flushed\n\ +"), stdout); +#endif + fputs (_("\ eof CHAR CHAR will send an end of file (terminate the input)\n\ eol CHAR CHAR will end the line\n\ "), stdout); +#ifdef VEOL2 fputs (_("\ * eol2 CHAR alternate CHAR for ending the line\n\ +"), stdout); +#endif + fputs (_("\ erase CHAR CHAR will erase the last character typed\n\ intr CHAR CHAR will send an interrupt signal\n\ kill CHAR CHAR will erase the current line\n\ "), stdout); +#ifdef VLNEXT fputs (_("\ * lnext CHAR CHAR will enter the next character quoted\n\ +"), stdout); +#endif + fputs (_("\ quit CHAR CHAR will send a quit signal\n\ +"), stdout); +# ifdef CREPRINT /* HPUX 10.20 needs this */ + fputs (_("\ * rprnt CHAR CHAR will redraw the current line\n\ - start CHAR CHAR will restart the output after stopping it\n\ "), stdout); +#endif fputs (_("\ + start CHAR CHAR will restart the output after stopping it\n\ stop CHAR CHAR will stop the output\n\ susp CHAR CHAR will send a terminal stop signal\n\ +"), stdout); +#ifdef VSWTCH + fputs (_("\ * swtch CHAR CHAR will switch to a different shell layer\n\ +"), stdout); +#endif +#ifdef VWERASE + fputs (_("\ * werase CHAR CHAR will erase the last word typed\n\ "), stdout); +#endif fputs (_("\ \n\ Special settings:\n\ N set the input and output speeds to N bauds\n\ +"), stdout); +#ifdef TIOCGWINSZ + fputs (_("\ * cols N tell the kernel that the terminal has N columns\n\ * columns N same as cols N\n\ "), stdout); +#endif fputs (_("\ ispeed N set the input speed to N\n\ +"), stdout); +#ifdef HAVE_C_LINE + fputs (_("\ * line N use line discipline N\n\ +"), stdout); +#endif + fputs (_("\ min N with -icanon, set N characters minimum for a completed read\n\ ospeed N set the output speed to N\n\ "), stdout); +#ifdef TIOCGWINSZ fputs (_("\ * rows N tell the kernel that the terminal has N rows\n\ * size print the number of rows and columns according to the kernel\n\ +"), stdout); +#endif + fputs (_("\ speed print the terminal speed\n\ time N with -icanon, set read timeout of N tenths of a second\n\ "), stdout); @@ -586,8 +625,18 @@ Special settings:\n\ Control settings:\n\ [-]clocal disable modem control signals\n\ [-]cread allow input to be received\n\ +"), stdout); +#ifdef CRTSCTS + fputs (_("\ * [-]crtscts enable RTS/CTS handshaking\n\ +"), stdout); +#endif +#ifdef CDTRDSR + fputs (_("\ * [-]cdtrdsr enable DTR/DSR handshaking\n\ +"), stdout); +#endif + fputs (_("\ csN set character size to N bits, N in [5..8]\n\ "), stdout); fputs (_("\ @@ -596,8 +645,12 @@ Control settings:\n\ [-]hupcl same as [-]hup\n\ [-]parenb generate parity bit in output and expect parity bit in input\n\ [-]parodd set odd parity (or even parity with '-')\n\ +"), stdout); +#ifdef CMSPAR + fputs (_("\ * [-]cmspar use \"stick\" (mark/space) parity\n\ "), stdout); +#endif fputs (_("\ \n\ Input settings:\n\ @@ -605,20 +658,34 @@ Input settings:\n\ [-]icrnl translate carriage return to newline\n\ [-]ignbrk ignore break characters\n\ [-]igncr ignore carriage return\n\ + [-]ignpar ignore characters with parity errors\n\ "), stdout); +#ifdef IMAXBEL fputs (_("\ - [-]ignpar ignore characters with parity errors\n\ * [-]imaxbel beep and do not flush a full input buffer on a character\n\ +"), stdout); +#endif + fputs (_("\ [-]inlcr translate newline to carriage return\n\ [-]inpck enable input parity checking\n\ [-]istrip clear high (8th) bit of input characters\n\ "), stdout); +#ifdef IUTF8 fputs (_("\ * [-]iutf8 assume input characters are UTF-8 encoded\n\ "), stdout); +#endif +#ifdef IUCLC fputs (_("\ * [-]iuclc translate uppercase characters to lowercase\n\ +"), stdout); +#endif +#ifdef IXANY + fputs (_("\ * [-]ixany let any character restart output, not only start character\n\ +"), stdout); +#endif + fputs (_("\ [-]ixoff enable sending of start/stop characters\n\ [-]ixon enable XON/XOFF flow control\n\ [-]parmrk mark parity errors (with a 255-0-character sequence)\n\ @@ -627,59 +694,151 @@ Input settings:\n\ fputs (_("\ \n\ Output settings:\n\ +"), stdout); +#ifdef BSDLY + fputs (_("\ * bsN backspace delay style, N in [0..1]\n\ +"), stdout); +#endif +#ifdef CRDLY + fputs (_("\ * crN carriage return delay style, N in [0..3]\n\ +"), stdout); +#endif +#ifdef FFDLY + fputs (_("\ * ffN form feed delay style, N in [0..1]\n\ +"), stdout); +#endif +#ifdef NLDLY + fputs (_("\ * nlN newline delay style, N in [0..1]\n\ "), stdout); +#endif +#ifdef OCRNL fputs (_("\ * [-]ocrnl translate carriage return to newline\n\ +"), stdout); +#endif +#ifdef OFDEL + fputs (_("\ * [-]ofdel use delete characters for fill instead of NUL characters\n\ +"), stdout); +#endif +#ifdef OFILL + fputs (_("\ * [-]ofill use fill (padding) characters instead of timing for delays\n\ +"), stdout); +#endif +#ifdef OLCUC + fputs (_("\ * [-]olcuc translate lowercase characters to uppercase\n\ +"), stdout); +#endif +#ifdef ONLCR + fputs (_("\ * [-]onlcr translate newline to carriage return-newline\n\ +"), stdout); +#endif +#ifdef ONLRET + fputs (_("\ * [-]onlret newline performs a carriage return\n\ "), stdout); +#endif +#ifdef ONOCR fputs (_("\ * [-]onocr do not print carriage returns in the first column\n\ +"), stdout); +#endif + fputs (_("\ [-]opost postprocess output\n\ +"), stdout); +#if defined TABDLY || defined OXTABS + fputs (_("\ * tabN horizontal tab delay style, N in [0..3]\n\ * tabs same as tab0\n\ * -tabs same as tab3\n\ +"), stdout); +#endif +#ifdef VTDLY + fputs (_("\ * vtN vertical tab delay style, N in [0..1]\n\ "), stdout); +#endif fputs (_("\ \n\ Local settings:\n\ [-]crterase echo erase characters as backspace-space-backspace\n\ +"), stdout); +#ifdef ECHOKE + fputs (_("\ * crtkill kill all line by obeying the echoprt and echoe settings\n\ * -crtkill kill all line by obeying the echoctl and echok settings\n\ "), stdout); +#endif +#ifdef ECHOCTL fputs (_("\ * [-]ctlecho echo control characters in hat notation ('^c')\n\ +"), stdout); +#endif + fputs (_("\ [-]echo echo input characters\n\ +"), stdout); +#ifdef ECHOCTL + fputs (_("\ * [-]echoctl same as [-]ctlecho\n\ +"), stdout); +#endif + fputs (_("\ [-]echoe same as [-]crterase\n\ [-]echok echo a newline after a kill character\n\ "), stdout); +#ifdef ECHOKE fputs (_("\ * [-]echoke same as [-]crtkill\n\ +"), stdout); +#endif + fputs (_("\ [-]echonl echo newline even if not echoing other characters\n\ +"), stdout); +#ifdef ECHOPRT + fputs (_("\ * [-]echoprt echo erased characters backward, between '\\' and '/'\n\ +"), stdout); +#endif + fputs (_("\ [-]icanon enable erase, kill, werase, and rprnt special characters\n\ [-]iexten enable non-POSIX special characters\n\ "), stdout); fputs (_("\ [-]isig enable interrupt, quit, and suspend special characters\n\ [-]noflsh disable flushing after interrupt and quit special characters\n\ +"), stdout); +#ifdef ECHOPRT + fputs (_("\ * [-]prterase same as [-]echoprt\n\ +"), stdout); +#endif +#ifdef TOSTOP + fputs (_("\ * [-]tostop stop background jobs that try to write to the terminal\n\ +"), stdout); +#endif +#ifdef XCASE + fputs (_("\ * [-]xcase with icanon, escape with '\\' for uppercase characters\n\ "), stdout); +#endif fputs (_("\ \n\ Combination settings:\n\ +"), stdout); +#if defined XCASE && defined IUCLC && defined OLCUC + fputs (_("\ * [-]LCASE same as [-]lcase\n\ +"), stdout); +#endif + fputs (_("\ cbreak same as -icanon\n\ -cbreak same as icanon\n\ "), stdout); @@ -692,13 +851,23 @@ Combination settings:\n\ fputs (_("\ dec same as echoe echoctl echoke -ixany intr ^c erase 0177\n\ kill ^u\n\ +"), stdout); +#ifdef IXANY + fputs (_("\ * [-]decctlq same as [-]ixany\n\ +"), stdout); +#endif + fputs (_("\ ek erase and kill characters to their default values\n\ evenp same as parenb -parodd cs7\n\ + -evenp same as -parenb cs8\n\ "), stdout); +#if defined XCASE && defined IUCLC && defined OLCUC fputs (_("\ - -evenp same as -parenb cs8\n\ * [-]lcase same as xcase iuclc olcuc\n\ +"), stdout); +#endif + fputs (_("\ litout same as -parenb -istrip -opost cs8\n\ -litout same as parenb istrip opost cs7\n\ nl same as -icrnl -onlcr\n\ -- 1.7.7.6