* [libmnl PATCH] debug: don't colorize output on non tty
@ 2013-09-30 21:38 Eric Leblond
2013-10-02 15:25 ` Pablo Neira Ayuso
0 siblings, 1 reply; 4+ messages in thread
From: Eric Leblond @ 2013-09-30 21:38 UTC (permalink / raw)
To: netfilter-devel, pablo; +Cc: eric
When output is not a tty (pipe or redirect to a file), the color
display is causing the output to be unreadable:
02 00 00 00 | | extra header |
|ESC[1;31m00008ESC[0m|ESC[1;32m--ESC[0m|ESC[1;34m00001ESC[0m| |len |flags| type|
This patch tests if the output is a terminal and only add color in
this case. It also displays space instead of char 0 if a letter is
not existing.
Signed-off-by: Eric Leblond <eric@regit.org>
---
src/nlmsg.c | 69 ++++++++++++++++++++++++++++++++++++++-----------------------
1 file changed, 43 insertions(+), 26 deletions(-)
diff --git a/src/nlmsg.c b/src/nlmsg.c
index fdb7af8..07f19ba 100644
--- a/src/nlmsg.c
+++ b/src/nlmsg.c
@@ -281,28 +281,45 @@ mnl_nlmsg_fprintf_payload(FILE *fd, const struct nlmsghdr *nlh,
fprintf(fd, "| extra header |\n");
/* this seems like an attribute header. */
} else if (rem == 0 && (attr->nla_type & NLA_TYPE_MASK) != 0) {
- fprintf(fd, "|%c[%d;%dm"
- "%.5u"
- "%c[%dm"
- "|"
- "%c[%d;%dm"
- "%c%c"
- "%c[%dm"
- "|"
- "%c[%d;%dm"
- "%.5u"
- "%c[%dm|\t",
- 27, 1, 31,
- attr->nla_len,
- 27, 0,
- 27, 1, 32,
- attr->nla_type & NLA_F_NESTED ? 'N' : '-',
- attr->nla_type &
- NLA_F_NET_BYTEORDER ? 'B' : '-',
- 27, 0,
- 27, 1, 34,
- attr->nla_type & NLA_TYPE_MASK,
- 27, 0);
+ if (isatty(fileno(fd))) {
+ fprintf(fd, "|%c[%d;%dm"
+ "%.5u"
+ "%c[%dm"
+ "|"
+ "%c[%d;%dm"
+ "%c%c"
+ "%c[%dm"
+ "|"
+ "%c[%d;%dm"
+ "%.5u"
+ "%c[%dm|\t",
+ 27, 1, 31,
+ attr->nla_len,
+ 27, 0,
+ 27, 1, 32,
+ attr->nla_type &
+ NLA_F_NESTED ? 'N' : '-',
+ attr->nla_type &
+ NLA_F_NET_BYTEORDER ? 'B' : '-',
+ 27, 0,
+ 27, 1, 34,
+ attr->nla_type & NLA_TYPE_MASK,
+ 27, 0);
+ } else {
+ fprintf(fd, "|"
+ "%.5u"
+ "|"
+ "%c%c"
+ "|"
+ "%.5u"
+ "|\t",
+ attr->nla_len,
+ attr->nla_type &
+ NLA_F_NESTED ? 'N' : '-',
+ attr->nla_type &
+ NLA_F_NET_BYTEORDER ? 'B' : '-',
+ attr->nla_type & NLA_TYPE_MASK);
+ }
fprintf(fd, "|len |flags| type|\n");
if (!(attr->nla_type & NLA_F_NESTED)) {
@@ -317,10 +334,10 @@ mnl_nlmsg_fprintf_payload(FILE *fd, const struct nlmsghdr *nlh,
0xff & b[i+2], 0xff & b[i+3]);
fprintf(fd, "| data |");
fprintf(fd, "\t %c %c %c %c\n",
- isalnum(b[i]) ? b[i] : 0,
- isalnum(b[i+1]) ? b[i+1] : 0,
- isalnum(b[i+2]) ? b[i+2] : 0,
- isalnum(b[i+3]) ? b[i+3] : 0);
+ isalnum(b[i]) ? b[i] : 32,
+ isalnum(b[i+1]) ? b[i+1] : 32,
+ isalnum(b[i+2]) ? b[i+2] : 32,
+ isalnum(b[i+3]) ? b[i+3] : 32);
}
}
fprintf(fd, "----------------\t------------------\n");
--
1.8.4.rc3
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [libmnl PATCH] debug: don't colorize output on non tty
2013-09-30 21:38 [libmnl PATCH] debug: don't colorize output on non tty Eric Leblond
@ 2013-10-02 15:25 ` Pablo Neira Ayuso
2013-10-02 15:47 ` Eric Leblond
0 siblings, 1 reply; 4+ messages in thread
From: Pablo Neira Ayuso @ 2013-10-02 15:25 UTC (permalink / raw)
To: Eric Leblond; +Cc: netfilter-devel
Hi Eric,
On Mon, Sep 30, 2013 at 11:38:26PM +0200, Eric Leblond wrote:
> When output is not a tty (pipe or redirect to a file), the color
> display is causing the output to be unreadable:
> 02 00 00 00 | | extra header |
> |ESC[1;31m00008ESC[0m|ESC[1;32m--ESC[0m|ESC[1;34m00001ESC[0m| |len |flags| type|
> This patch tests if the output is a terminal and only add color in
> this case. It also displays space instead of char 0 if a letter is
> not existing.
In both cases, you can use less -r to interpret the colors, is that
enough to address what you're noticing?
The chunk to replace char 0 by 32 looks fine to me.
Let me know.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [libmnl PATCH] debug: don't colorize output on non tty
2013-10-02 15:25 ` Pablo Neira Ayuso
@ 2013-10-02 15:47 ` Eric Leblond
2013-10-11 8:53 ` Pablo Neira Ayuso
0 siblings, 1 reply; 4+ messages in thread
From: Eric Leblond @ 2013-10-02 15:47 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
Hi Pablo,
Le mercredi 02 octobre 2013 à 17:25 +0200, Pablo Neira Ayuso a écrit :
> Hi Eric,
>
> On Mon, Sep 30, 2013 at 11:38:26PM +0200, Eric Leblond wrote:
> > When output is not a tty (pipe or redirect to a file), the color
> > display is causing the output to be unreadable:
> > 02 00 00 00 | | extra header |
> > |ESC[1;31m00008ESC[0m|ESC[1;32m--ESC[0m|ESC[1;34m00001ESC[0m| |len |flags| type|
> > This patch tests if the output is a terminal and only add color in
> > this case. It also displays space instead of char 0 if a letter is
> > not existing.
>
> In both cases, you can use less -r to interpret the colors, is that
> enough to address what you're noticing?
No, I don't think this is enough. First, you've got to know -r option of
less ;) Second, this is really painful if you want to redirect the
output to a file to edit it with a standard editor (that was my case).
At last, git and a lot of software are doing that so some user are used
to that behavior.
> The chunk to replace char 0 by 32 looks fine to me.
OK.
BR,
--
Eric Leblond <eric@regit.org>
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [libmnl PATCH] debug: don't colorize output on non tty
2013-10-02 15:47 ` Eric Leblond
@ 2013-10-11 8:53 ` Pablo Neira Ayuso
0 siblings, 0 replies; 4+ messages in thread
From: Pablo Neira Ayuso @ 2013-10-11 8:53 UTC (permalink / raw)
To: Eric Leblond; +Cc: netfilter-devel
Hi Eric,
On Wed, Oct 02, 2013 at 05:47:20PM +0200, Eric Leblond wrote:
> Hi Pablo,
>
> Le mercredi 02 octobre 2013 à 17:25 +0200, Pablo Neira Ayuso a écrit :
> > Hi Eric,
> >
> > On Mon, Sep 30, 2013 at 11:38:26PM +0200, Eric Leblond wrote:
> > > When output is not a tty (pipe or redirect to a file), the color
> > > display is causing the output to be unreadable:
> > > 02 00 00 00 | | extra header |
> > > |ESC[1;31m00008ESC[0m|ESC[1;32m--ESC[0m|ESC[1;34m00001ESC[0m| |len |flags| type|
> > > This patch tests if the output is a terminal and only add color in
> > > this case. It also displays space instead of char 0 if a letter is
> > > not existing.
> >
> > In both cases, you can use less -r to interpret the colors, is that
> > enough to address what you're noticing?
>
> No, I don't think this is enough. First, you've got to know -r option of
> less ;) Second, this is really painful if you want to redirect the
> output to a file to edit it with a standard editor (that was my case).
> At last, git and a lot of software are doing that so some user are used
> to that behavior.
I can see that git allows you to enable/disable colors on demand. I
think we can have a new interface that includes a flags field for
this, so we can achieve the same way of working.
I'd like to keep some way to request colors, I usually redirect the
output to files and use less -r to watch them. Some days, when you
spent more than 8 hours in front of the computer, some colors help,
really :-).
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-10-11 8:53 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-30 21:38 [libmnl PATCH] debug: don't colorize output on non tty Eric Leblond
2013-10-02 15:25 ` Pablo Neira Ayuso
2013-10-02 15:47 ` Eric Leblond
2013-10-11 8:53 ` Pablo Neira Ayuso
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).