From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH v3 17/18] list-files: add -F/--classify
Date: Sun, 30 Mar 2014 20:56:08 +0700 [thread overview]
Message-ID: <1396187769-30863-18-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <1396187769-30863-1-git-send-email-pclouds@gmail.com>
This appends an indicator after the file name if it's executable, a
directory and so on, like in GNU ls. In fact append_indicator() is a
rewrite from get_type_indicator() in coreutils.git commit
7326d1f1a67edf21947ae98194f98c38b6e9e527.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
Documentation/git-list-files.txt | 6 ++++++
builtin/ls-files.c | 31 +++++++++++++++++++++++++++++++
2 files changed, 37 insertions(+)
diff --git a/Documentation/git-list-files.txt b/Documentation/git-list-files.txt
index 0ef616b..22084eb 100644
--- a/Documentation/git-list-files.txt
+++ b/Documentation/git-list-files.txt
@@ -51,6 +51,12 @@ OPTIONS
multiple file selections. See linkgit::git-ls-files[1] option
`-t` for more information.
+-F::
+--classify::
+ Append indicator (one of `*/=>@|`, which is executable,
+ directory, socket, Solaris door, symlink, or fifo
+ respectively) to entries.
+
-R::
--recursive::
Equivalent of `--max-depth=-1` (infinite recursion).
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index 9dc1c39..2d475f0 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -29,6 +29,7 @@ static int show_killed;
static int show_valid_bit;
static int show_tag;
static int show_dirs;
+static int show_indicator;
static int line_terminator = '\n';
static int debug_mode;
static int use_color;
@@ -77,6 +78,28 @@ static void write_name(struct strbuf *sb, const char *name)
quote_path_relative(name, real_prefix, sb);
}
+static void append_indicator(struct strbuf *sb, mode_t mode)
+{
+ char c = 0;
+ if (S_ISREG(mode)) {
+ if (mode & (S_IXUSR | S_IXGRP | S_IXOTH))
+ c = '*';
+ } else if (S_ISDIR(mode))
+ c = '/';
+ else if (S_ISLNK(mode))
+ c = '@';
+ else if (S_ISFIFO(mode))
+ c = '|';
+ else if (S_ISSOCK(mode))
+ c = '=';
+#ifdef S_ISDOOR
+ else if (S_ISDOOR(mode))
+ c = '>';
+#endif
+ if (c)
+ strbuf_addch(sb, c);
+}
+
static void strbuf_fputs(struct strbuf *sb, const char *full_name, FILE *fp)
{
if (column_active(colopts) || porcelain) {
@@ -99,6 +122,8 @@ static void write_dir_entry(struct strbuf *sb, const struct dir_entry *ent)
color_filename(sb, ent->name, quoted.buf, st.st_mode, 1);
else
strbuf_addbuf(sb, "ed);
+ if (show_indicator && st.st_mode)
+ append_indicator(sb, st.st_mode);
strbuf_addch(sb, line_terminator);
strbuf_release("ed);
}
@@ -189,6 +214,8 @@ static void write_ce_name(struct strbuf *sb, const struct cache_entry *ce)
color_filename(sb, ce->name, quoted.buf, ce->ce_mode, 1);
else
strbuf_addbuf(sb, "ed);
+ if (show_indicator)
+ append_indicator(sb, ce->ce_mode);
strbuf_addch(sb, line_terminator);
strbuf_release("ed);
}
@@ -366,6 +393,8 @@ static void show_directories(const struct cache_entry *ce)
}
if (show_tag)
strbuf_insert(&sb2, 0, tag_cached, strlen(tag_cached));
+ if (show_indicator)
+ append_indicator(&sb2, S_IFDIR);
last_directory = strbuf_detach(&sb, NULL);
strbuf_fputs(&sb2, last_directory, NULL);
strbuf_release(&sb2);
@@ -701,6 +730,8 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
DIR_SHOW_IGNORED),
OPT_BOOL('u', "unmerged", &show_unmerged,
N_("show unmerged files")),
+ OPT_BOOL('F', "classify", &show_indicator,
+ N_("append indicator (one of */=>@|) to entries")),
OPT__COLOR(&use_color, N_("show color")),
OPT_COLUMN(0, "column", &colopts, N_("show files in columns")),
OPT_SET_INT('1', NULL, &colopts,
--
1.9.1.345.ga1a145c
next prev parent reply other threads:[~2014-03-30 13:57 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-20 10:15 [PATCH/RFC 0/8] git-ls Nguyễn Thái Ngọc Duy
2014-03-20 10:15 ` [PATCH 1/8] Import $LS_COLORS parsing code from coreutils Nguyễn Thái Ngọc Duy
2014-03-20 19:09 ` David Tran
2014-03-21 11:54 ` Duy Nguyen
2014-03-21 20:01 ` David Tran
2014-03-20 10:15 ` [PATCH 2/8] ls_colors.c: a bit of document on print_color_indicator input Nguyễn Thái Ngọc Duy
2014-03-20 10:15 ` [PATCH 3/8] ls_colors.c: enable coloring on u+x files Nguyễn Thái Ngọc Duy
2014-03-20 11:46 ` Matthieu Moy
2014-03-20 12:14 ` Duy Nguyen
2014-03-20 17:41 ` Junio C Hamano
2014-03-21 11:52 ` Duy Nguyen
2014-03-20 10:15 ` [PATCH 4/8] ls_colors.c: new color descriptors Nguyễn Thái Ngọc Duy
2014-03-20 10:15 ` [PATCH 5/8] ls-files: add --color to highlight based on $LS_COLORS Nguyễn Thái Ngọc Duy
2014-03-20 10:15 ` [PATCH 6/8] ls-files: add --column Nguyễn Thái Ngọc Duy
2014-03-25 11:34 ` Matthieu Moy
2014-03-20 10:15 ` [PATCH 7/8] ls-files: support --max-depth Nguyễn Thái Ngọc Duy
2014-03-25 8:55 ` Matthieu Moy
2014-03-25 11:15 ` Duy Nguyen
2014-03-27 14:36 ` Duy Nguyen
2014-03-28 13:52 ` Matthieu Moy
2014-03-28 14:15 ` Duy Nguyen
2014-03-28 14:38 ` Duy Nguyen
2014-03-20 10:15 ` [PATCH 8/8] Add git-ls, a user friendly version of ls-files and more Nguyễn Thái Ngọc Duy
2014-03-20 11:56 ` Matthieu Moy
2014-03-26 13:48 ` [PATCH v2 00/17] git-ls Nguyễn Thái Ngọc Duy
2014-03-26 13:48 ` [PATCH v2 01/17] ls_colors.c: add $LS_COLORS parsing code Nguyễn Thái Ngọc Duy
2014-03-26 13:48 ` [PATCH v2 02/17] ls_colors.c: parse color.ls.* from config file Nguyễn Thái Ngọc Duy
2014-03-26 13:48 ` [PATCH v2 03/17] ls_colors.c: add function to color a file name Nguyễn Thái Ngọc Duy
2014-03-26 19:14 ` Eric Sunshine
2014-03-26 13:48 ` [PATCH v2 04/17] ls_colors.c: highlight submodules like directories Nguyễn Thái Ngọc Duy
2014-03-26 13:48 ` [PATCH v2 05/17] ls-files: buffer full item in strbuf before printing Nguyễn Thái Ngọc Duy
2014-03-26 19:22 ` Eric Sunshine
2014-03-26 23:18 ` Duy Nguyen
2014-03-27 5:22 ` Eric Sunshine
2014-03-26 13:48 ` [PATCH v2 06/17] ls-files: add --color to highlight file names Nguyễn Thái Ngọc Duy
2014-03-26 19:13 ` Eric Sunshine
2014-03-26 23:15 ` Duy Nguyen
2014-03-28 0:49 ` Eric Sunshine
2014-03-26 13:48 ` [PATCH v2 07/17] ls-files: add --column Nguyễn Thái Ngọc Duy
2014-03-26 19:46 ` Eric Sunshine
2014-03-26 13:48 ` [PATCH v2 08/17] ls-files: support --max-depth Nguyễn Thái Ngọc Duy
2014-03-26 19:50 ` Eric Sunshine
2014-03-26 13:48 ` [PATCH v2 09/17] ls-files: split main ls-files logic into ls_files() function Nguyễn Thái Ngọc Duy
2014-03-26 13:48 ` [PATCH v2 10/17] Add git-ls, a user friendly version of ls-files and more Nguyễn Thái Ngọc Duy
2014-03-26 20:16 ` Eric Sunshine
2014-03-26 13:48 ` [PATCH v2 11/17] ls: -u does not imply showing stages Nguyễn Thái Ngọc Duy
2014-03-26 13:48 ` [PATCH v2 12/17] ls: add -R/--recursive short for --max-depth=-1 Nguyễn Thái Ngọc Duy
2014-03-26 13:48 ` [PATCH v2 13/17] ls: add -1 short for --no-column in the spirit of GNU ls Nguyễn Thái Ngọc Duy
2014-03-28 3:52 ` Eric Sunshine
2014-03-26 13:48 ` [PATCH v2 14/17] ls: add -t back Nguyễn Thái Ngọc Duy
2014-03-26 13:48 ` [PATCH v2 15/17] ls: sort output and remove duplicates Nguyễn Thái Ngọc Duy
2014-03-26 13:48 ` [PATCH v2 16/17] ls: do not show duplicate cached entries Nguyễn Thái Ngọc Duy
2014-03-28 4:04 ` Eric Sunshine
2014-03-28 13:18 ` [PATCH] ls-files: do not trust stat info if lstat() fails Nguyễn Thái Ngọc Duy
2014-04-02 18:15 ` Junio C Hamano
2014-04-03 12:40 ` Duy Nguyen
2014-04-03 16:30 ` Junio C Hamano
2014-04-05 8:03 ` Duy Nguyen
2014-04-07 17:13 ` Junio C Hamano
2014-03-26 13:48 ` [PATCH v2 17/17] ls: show directories as well as files Nguyễn Thái Ngọc Duy
2014-03-30 13:55 ` [PATCH v3 00/18] git-ls Nguyễn Thái Ngọc Duy
2014-03-30 13:55 ` [PATCH v3 01/18] ls_colors.c: add $LS_COLORS parsing code Nguyễn Thái Ngọc Duy
2014-03-30 13:55 ` [PATCH v3 02/18] ls_colors.c: parse color.ls.* from config file Nguyễn Thái Ngọc Duy
2014-03-30 13:55 ` [PATCH v3 03/18] ls_colors.c: add a function to color a file name Nguyễn Thái Ngọc Duy
2014-03-30 13:55 ` [PATCH v3 04/18] ls_colors.c: highlight submodules like directories Nguyễn Thái Ngọc Duy
2014-03-30 13:55 ` [PATCH v3 05/18] ls-files: buffer full item in strbuf before printing Nguyễn Thái Ngọc Duy
2014-03-30 13:55 ` [PATCH v3 06/18] ls-files: add --color to highlight file names Nguyễn Thái Ngọc Duy
2014-03-30 13:55 ` [PATCH v3 07/18] ls-files: add --column Nguyễn Thái Ngọc Duy
2014-03-30 13:55 ` [PATCH v3 08/18] ls-files: support --max-depth Nguyễn Thái Ngọc Duy
2014-03-30 13:56 ` [PATCH v3 09/18] Add git-list-files, a user friendly version of ls-files and more Nguyễn Thái Ngọc Duy
2014-03-30 13:56 ` [PATCH v3 10/18] list-files: -u does not imply showing stages Nguyễn Thái Ngọc Duy
2014-03-30 13:56 ` [PATCH v3 11/18] list-files: add -R/--recursive short for --max-depth=-1 Nguyễn Thái Ngọc Duy
2014-03-30 13:56 ` [PATCH v3 12/18] list-files: add -1 short for --no-column Nguyễn Thái Ngọc Duy
2014-03-30 13:56 ` [PATCH v3 13/18] list-files: add -t back Nguyễn Thái Ngọc Duy
2014-03-30 13:56 ` [PATCH v3 14/18] list-files: sort output and remove duplicates Nguyễn Thái Ngọc Duy
2014-03-30 13:56 ` [PATCH v3 15/18] list-files: do not show duplicate cached entries Nguyễn Thái Ngọc Duy
2014-03-30 13:56 ` [PATCH v3 16/18] list-files: show directories as well as files Nguyễn Thái Ngọc Duy
2014-03-30 13:56 ` Nguyễn Thái Ngọc Duy [this message]
2014-03-30 13:56 ` [PATCH v3 18/18] list-files -F: show submodules with the new indicator '&' Nguyễn Thái Ngọc Duy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1396187769-30863-18-git-send-email-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).