[Second version of the patch, makes this feature optional with --fancy-chars]
Diego Pettenò complained that "ls -l" doesn't use the UTF-8 arrow character to show where symlinks point to. This tiny patch fixes that. With this applied the character is used when the CODESET is UTF-8 otherwise we fall back to the traditional "->" arrow. This is only enabled if --fancy-chars is passed as argument. Ah, "ls -l" is so much prettier now! For verification: http://pastie.org/573270 --- src/ls.c | 33 +++++++++++++++++++++++++++++++++ 1 files changed, 33 insertions(+), 0 deletions(-) diff --git a/src/ls.c b/src/ls.c index 07e9cf1..0d5be7c 100644 --- a/src/ls.c +++ b/src/ls.c @@ -496,6 +496,11 @@ static enum indicator_style const indicator_style_types[] = }; ARGMATCH_VERIFY (indicator_style_args, indicator_style_types); +/* Use fancy Unicode characters in output. At this point this simply + replaces the -> arrow for symlinks by a real Unicode arrow. */ + +static bool fancy_chars; + /* True means use colors to mark types. Also define the different colors as well as the stuff for the LS_COLORS environment variable. The LS_COLORS variable is now in a termcap-like format. */ @@ -758,6 +763,7 @@ enum AUTHOR_OPTION = CHAR_MAX + 1, BLOCK_SIZE_OPTION, COLOR_OPTION, + FANCY_CHARS_OPTION, DEREFERENCE_COMMAND_LINE_SYMLINK_TO_DIR_OPTION, FILE_TYPE_INDICATOR_OPTION, FORMAT_OPTION, @@ -813,6 +819,7 @@ static struct option const long_options[] = {"time", required_argument, NULL, TIME_OPTION}, {"time-style", required_argument, NULL, TIME_STYLE_OPTION}, {"color", optional_argument, NULL, COLOR_OPTION}, + {"fancy-chars", no_argument, NULL, FANCY_CHARS_OPTION}, {"block-size", required_argument, NULL, BLOCK_SIZE_OPTION}, {"context", no_argument, 0, 'Z'}, {"author", no_argument, NULL, AUTHOR_OPTION}, @@ -1522,6 +1529,7 @@ decode_switches (int argc, char **argv) ignore_patterns = NULL; hide_patterns = NULL; print_scontext = false; + fancy_chars = false; /* FIXME: put this in a function. */ { @@ -1866,6 +1874,10 @@ decode_switches (int argc, char **argv) break; } + case FANCY_CHARS_OPTION: + fancy_chars = true; + break; + case INDICATOR_STYLE_OPTION: indicator_style = XARGMATCH ("--indicator-style", optarg, indicator_style_args, @@ -3749,7 +3761,26 @@ print_long_format (const struct fileinfo *f) { if (f->linkname) { +#ifdef HAVE_NL_LANGINFO + static const char *arrow = NULL; + + if (!arrow) + { + arrow = " -> "; + + if (fancy_chars) + { + const char *cs; + cs = nl_langinfo(CODESET); + + if (cs && strcmp(cs, "UTF-8") == 0) + arrow = " \xe2\x86\x92 "; + } + } + DIRED_FPUTS_LITERAL (arrow, stdout); +#else DIRED_FPUTS_LITERAL (" -> ", stdout); +#endif print_name_with_quoting (f->linkname, f->linkmode, f->linkok - 1, f->stat_ok, f->filetype, NULL, f->stat.st_nlink, (p - buf) + w + 4); @@ -4533,6 +4564,8 @@ Mandatory arguments to long options are mandatory for short options too.\n\ -C list entries by columns\n\ --color[=WHEN] control whether color is used to distinguish file\n\ types. WHEN may be `never', `always', or `auto'\n\ + --fancy-chars control whether fancy Unicode characters may be\n\ + used in the output.\n\ -d, --directory list directory entries instead of contents,\n\ and do not dereference symbolic links\n\ -D, --dired generate output designed for Emacs' dired mode\n\ -- 1.6.4 Lennart -- Lennart Poettering Red Hat, Inc. lennart [at] poettering [dot] net ICQ# 11060553 http://0pointer.net/lennart/ GnuPG 0x1A015CC4