summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ls.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/ls.c b/src/ls.c
index d61266a89..1d311c8c5 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -449,8 +449,15 @@ struct ignore_pattern
static struct ignore_pattern *ignore_patterns;
-/* Nonzero means output nongraphic chars in file names as `?'. -q */
-
+/* Nonzero means output nongraphic chars in file names as `?'.
+ (-q, --hide-control-chars)
+ qmark_funny_chars and the quoting style (-Q, --quoting-style=WORD) are
+ independent. The algorithm is: first, obey the quoting style to get a
+ string representing the file name; then, if qmark_funny_chars is set,
+ replace all nonprintable chars in that string with `?'. It's necessary
+ to replace nonprintable chars even in quoted strings, because we don't
+ want to mess up the terminal if control chars get sent to it, and some
+ quoting methods pass through control chars as-is. */
static int qmark_funny_chars;
/* Quoting options for file and dir name output. */
@@ -820,6 +827,7 @@ decode_switches (int argc, char **argv)
if (isatty (1))
{
format = many_per_line;
+ /* See description of qmark_funny_chars, above. */
qmark_funny_chars = 1;
}
else