initial commit

This commit is contained in:
Radovan Garabík 2015-01-25 18:36:02 +01:00
parent fede53ae8b
commit 56be92284d
72 changed files with 3006 additions and 342 deletions

1
CHANGES Symbolic link
View File

@ -0,0 +1 @@
debian/changelog

1
COPYING Symbolic link
View File

@ -0,0 +1 @@
debian/copyright

11
CREDITS Normal file
View File

@ -0,0 +1,11 @@
Credits where credits are due:
These people helped me with ideas, support and other things:
Piotr Klaban <makler@man.torun.pl>
Jason Tackaberry <tack@linux.com>
Eivind Tagseth <eivindt@multinet.no>
Edward Betts <edward@debian.org>
Joey Hess <joey@kitenet.net>
Miguel Gualdron <mig@anet.com>
Daniel Kollar <dkollar@fmph.uniba.sk>
Christian Zuckschwerdt <zany@triq.net>

32
INSTALL Normal file
View File

@ -0,0 +1,32 @@
===================================================================
Generic Colouriser
Radovan Garabík <garabik @ kassiopeia.juls.savba.sk>
http://kassiopeia.juls.savba.sk/~garabik/software/grc.html
===================================================================
Requirenments:
anything with python interpreter, with more or less work needed
if it is not unix.
If you have debian system with all necessary packages installed, type
dpkg-buildpackage (or dpkg-buildpackage -rfakeroot) in the package's
directory, then type
dpkg -i ../grc*deb
else:
1) copy conf.* files into /usr/share/grc/ or /usr/local/share/grc/,
creating directories when needed
2) copy grc.conf into /etc/
3) copy grc and grcat somewhere to your path
4) read the README and manual pages
5) modify /etc/grc.conf if you feel like it
there is a small shell script called install.sh provided, which does
automatically do the above.

340
LICENSE
View File

@ -1,340 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
{description}
Copyright (C) {year} {fullname}
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
{signature of Ty Coon}, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

227
README Normal file
View File

@ -0,0 +1,227 @@
===================================================================
Generic Colouriser
Radovan Garabík http://kassiopeia.juls.savba.sk/~garabik/software/grc.html
garabik @ kassiopeia.juls.savba.sk
===================================================================
For the impatient - try following commands:
grc netstat
grc ping hostname
grc tail /var/log/syslog
grc ps aux
---------------
Being overflooded with different logfile colo(u)?ri(s|z)ers, colortails,
gccolors, colormakes and similar programs for making text files or outputs
of different programs more readable by inserting ansi colour control codes
into them, I decided to write my very own colouriser, eventually providing
the functions of all those others.
Two programs are provided: grc and grcat. The main is grcat, which acts as
a filter, i.e. taking standard input, colourising it and writing to
standard output.
grcat takes as a parameter the name of configuration file.
Directories ~/.grc/, /usr/local/share/grc/, /usr/share/grc/ are searched
for the file (in this order). If the file is not found, it is assumed to be
an absolute path of a configuration file located elsewhere.
Configuration file consists of entries, one per regexp, entries are
separated with lines with first character non-alphanumeric (except #).
Lines beginning with # or empty lines are ignored.
Each entry consists of several lines.
Each line has form:
keyword=value
where keyword is one of: regexp, colours, command, skip, count
Only regexp is mandatory, but it does not have much sense by itself
unless you specify at least a colour, skip or command keyword as well.
regexp is the regular expression to match
colours is the list of colours, separated by commas (you can specify only
one colour), each colour per one regexp group specified in regexp.
if you use special colour name "previous", colour of the previous line
of text will be used (actually, if both the first and last character of
the previous line are of different colour than the default one,
colour of the first one will be used).
Another special colour name "unchanged" will leave the colour
unchanged, useful if you need some context for matching
regular expression and you want to leave the colour of context
unchanged.
Yet another special name is an arbitrary string enclosed in
straight quotes. This string will be inserted directly into
the output in front of the matching expression. The string will
be eval'ed, so you can use usual python escape sequences.
This is useful on a 256-colour enabled xterm, where e.g.
colours="\033[38;5;22m" will give you a dark green (inspired
by Rutger Ovidius). Caveat: the string cannot contain a comma. This
is due to my laziness :-)
command is command to be executed when regexp matches. Its output will
be mixed with normal stdout, use redirectors ( >/dev/null) if you want
to suppress it.
skip can be skip=yes, if that case the matched line is skipped
(discarded from the output), or skip=no, when it is not skipped.
Default (if you do not have skip keyword) is of course not skipped.
count is one of words: once, more, stop, previous, block or unblock
once means that if the regexp is matched, its first occurrence is coloured
and the program will continue with other regexp's.
more means that if there are multiple matches of the regexp in one line,
all of them will be coloured.
stop means that the regexp will be coloured and program will move to the
next line (i.e. ignoring other regexp's)
previous means the count will be the same as for the previous line
block marks a start of a multiline block of text, coloured with
the same colour
unblock, obviously, marks the end of such a block
example:
# this is probably a pathname
regexp=/[\w/\.]+
colour=green
count=more
this will match /usr/bin, /usr/local/bin/, /etc/init.d/syslogd and similar
strings and paint it with green.
Another example:
regexp=^-{1,2}\s{0,1}$
colours=red
count=block
-
regexp=^\s{0,5}$
colours=default
count=unblock
this will turn all correctly formatted mail signatures red.
Regular expressions are evaluated from top to bottom, this allows nested
and overlapped expressions. (e.g. you colour everything inside parentheses
with one colour, and if a following expression matches the text inside
parentheses, it will be also coloured)
Typical usage:
grcat conf.log < /var/log/syslog
/usr/sbin/traceroute www.linux.org | grcat conf.traceroute
grcat conf.esperanto < Fundamento.txt | less -r
To facilitate the use, command grc acts as frontend for grcat, automatically
choosing the configuration files, so you can write:
grc netstat
grc ping hostname
grc tail /var/log/syslog
etc...
grc will execute command command with optional parameters piping its stdout
into grcat.
Configuration file for grcat is determined by /etc/grc.conf or
~/.grc/grc.conf file.
Format of /etc/grc.conf or ~/.grc/grc.conf: each entry consists of 2 lines,
between entries there can be any number of empty lines or lines beginning
with # (comments)
First line is regular expression, second line the name of configuration
file for grcat.
Configuration file after the first regular expression matching the rest of
line after grc will be passed to grcat as its configuration file
For example, if you have
# log file
\b\w+\b.*log\b
conf.log
# traceroute command
(^|[/\w\.]+/)traceroute\s
conf.traceroute
in your /etc/grc.conf, then typing grc cat /var/log/syslog will use
conf.log to colourise the output,
grc /usr/sbin/traceroute www.linux.org will use conf.traceroute
Miscellaneous remarks:
You should get yourself familiar with regular expressions. Good reading is
at http://www.python.org/doc/howto/regex/regex.html
The program is not yet optimized for speed. There are places that can
give a big boost if optimized.
Regular expressions are handled by python, it means that they may be
slightly different from those you know from perl or grep. It's not my
fault in that case.
Colours are one of:
none, default, bold, underline, blink, reverse, concealed,
black, green, yellow, blue, magenta, cyan, white,
on_black, on_green, on_yellow, on_blue, on_magenta, on_cyan, on_white
beep
on_red means that the background (instead of foreground) is painted
with red etc...
Additional colours can be: dark, italic, rapidblink, strikethrough.
These are supported only on some terminals, so if you want to write
portable configuration files, avoid uing them (idea by James Rowe).
there can be more attributes per line (separated by space), e.g.
# this is probably a pathname
regexp=/[\w/\.]+
colours=bold blink green
count=more
will display pathnames in bold blinking green
-----------
Python 3 compatibility:
There is some preliminary python3 support, meaning that both grc and
grcat will run under both python2 and python3. However, all the regular
expressions are strings, and grcat works on string input (not bytes).
Therefore it will miserably fail if fed input with invalid UTF-8
characters.
-----------
Hint taken from logcoloriser README:
To have your syslog show on your tty12 in colour, do:
mkfifo /dev/grc
replace (or copy and edit) the /etc/syslog.conf line
*.info;mail.*;authpriv.*;kern.*;local1.* |/dev/xconsole
with :
*.info;mail.*;authpriv.*;kern.*;local1.* |/dev/grc
and add to your syslog startup script :
grcat conf.log < /dev/grc >/dev/tty12 &
Well, simpler approach seems to be to use something like this
in your system startup script, if you have GNU tail:
tail --follow=name /var/log/syslog | grcat conf.log >/dev/tty12
or, if you have recent BSD tail:
tail -F /var/log/syslog | grcat conf.log >/dev/tty12

View File

@ -1,2 +0,0 @@
# grc
generic colouriser

187
Regexp.txt Normal file
View File

@ -0,0 +1,187 @@
Regular Expression Syntax (taken from python library reference)
A regular expression (or RE) specifies a set of strings that matches
it; the functions in this module let you check if a particular string
matches a given regular expression (or if a given regular expression
matches a particular string, which comes down to the same thing).
Regular expressions can be concatenated to form new regular
expressions; if A and B are both regular expressions, then AB is also
an regular expression. If a string p matches A and another string q
matches B, the string pq will match AB. Thus, complex expressions can
easily be constructed from simpler primitive expressions like the
ones described here. For details of the theory and implementation of
regular expressions, consult the Friedl book referenced below, or
almost any textbook about compiler construction.
A brief explanation of the format of regular expressions follows. For
further information and a gentler presentation, consult the Regular
Expression HOWTO, accessible from http://www.python.org/doc/howto/.
Regular expressions can contain both special and ordinary characters.
Most ordinary characters, like "A", "a", or "0", are the simplest
regular expressions; they simply match themselves. You can
concatenate ordinary characters, so last matches the string 'last'.
(In the rest of this section, we'll write RE's in this special style,
usually without quotes, and strings to be matched 'in single
quotes'.)
Some characters, like "|" or "(", are special. Special characters
either stand for classes of ordinary characters, or affect how the
regular expressions around them are interpreted.
The special characters are:
"."
(Dot.) In the default mode, this matches any character except a newline. If the
DOTALL flag has been specified, this matches any character including a newline.
"^"
(Caret.) Matches the start of the string, and in MULTILINE mode also matches
immediately after each newline.
"$"
Matches the end of the string, and in MULTILINE mode also matches before a newline.
foo matches both 'foo' and 'foobar', while the regular expression foo$ matches only
'foo'.
"*"
Causes the resulting RE to match 0 or more repetitions of the preceding RE, as many
repetitions as are possible. ab* will match 'a', 'ab', or 'a' followed by any
number of 'b's.
"+"
Causes the resulting RE to match 1 or more repetitions of the preceding RE. ab+
will match 'a' followed by any non-zero number of 'b's; it will not match just 'a'.
"?"
Causes the resulting RE to match 0 or 1 repetitions of the preceding RE. ab? will
match either 'a' or 'ab'.
*?, +?, ??
The "*", "+", and "?" qualifiers are all greedy; they match as much text as
possible. Sometimes this behaviour isn't desired; if the RE <.*> is matched against
'<H1>title</H1>', it will match the entire string, and not just '<H1>'. Adding "?"
after the qualifier makes it perform the match in non-greedy or minimal fashion; as
few characters as possible will be matched. Using .*? in the previous expression
will match only '<H1>'.
{m,n}
Causes the resulting RE to match from m to n repetitions of the preceding RE,
attempting to match as many repetitions as possible. For example, a{3,5} will match
from 3 to 5 "a" characters. Omitting n specifies an infinite upper bound; you can't
omit m.
{m,n}?
Causes the resulting RE to match from m to n repetitions of the preceding RE,
attempting to match as few repetitions as possible. This is the non-greedy version
of the previous qualifier. For example, on the 6-character string 'aaaaaa', a{3,5}
will match 5 "a" characters, while a{3,5}? will only match 3 characters.
"\"
Either escapes special characters (permitting you to match characters like "*",
"?", and so forth), or signals a special sequence; special sequences are discussed
below.
If you're not using a raw string to express the pattern, remember that Python also
uses the backslash as an escape sequence in string literals; if the escape sequence
isn't recognized by Python's parser, the backslash and subsequent character are
included in the resulting string. However, if Python would recognize the resulting
sequence, the backslash should be repeated twice. This is complicated and hard to
understand, so it's highly recommended that you use raw strings for all but the
simplest expressions.
[]
Used to indicate a set of characters. Characters can be listed individually, or a
range of characters can be indicated by giving two characters and separating them
by a "-". Special characters are not active inside sets. For example, [akm$] will
match any of the characters "a", "k", "m", or "$"; [a-z] will match any lowercase
letter, and [a-zA-Z0-9] matches any letter or digit. Character classes such as \w
or \S(defined below) are also acceptable inside a range. If you want to include a
"]" or a "-" inside a set, precede it with a backslash, or place it as the first
character. The pattern []] will match ']', for example.
You can match the characters not within a range by complementing the set. This is
indicated by including a "^" as the first character of the set; "^" elsewhere will
simply match the "^" character. For example, [^5] will match any character except
"5".
"|"
A|B, where A and B can be arbitrary REs, creates a regular expression that will
match either A or B. This can be used inside groups (see below) as well. To match a
literal "|", use \|, or enclose it inside a character class, as in [|].
(...)
Matches whatever regular expression is inside the parentheses, and indicates the
start and end of a group; the contents of a group can be retrieved after a match
has been performed, and can be matched later in the string with the \number special
sequence, described below. To match the literals "(" or "')", use \( or \), or
enclose them inside a character class: [(] [)].
(?...)
This is an extension notation (a "?" following a "(" is not meaningful otherwise).
The first character after the "?" determines what the meaning and further syntax of
the construct is. Extensions usually do not create a new group; (?P<name>...) is
the only exception to this rule. Following are the currently supported extensions.
(?iLmsx)
(One or more letters from the set "i", "L", "m", "s", "x".) The group matches the
empty string; the letters set the corresponding flags (re.I, re.L, re.M, re.S,
re.X) for the entire regular expression. This is useful if you wish to include the
flags as part of the regular expression, instead of passing a flag argument to the
compile() function.
(?:...)
A non-grouping version of regular parentheses. Matches whatever regular expression
is inside the parentheses, but the substring matched by the group cannot be
retrieved after performing a match or referenced later in the pattern.
(?P<name>...)
Similar to regular parentheses, but the substring matched by the group is
accessible via the symbolic group name name. Group names must be valid Python
identifiers. A symbolic group is also a numbered group, just as if the group were
not named. So the group named 'id' in the example above can also be referenced as
the numbered group 1.
For example, if the pattern is (?P<id>[a-zA-Z_]\w*), the group can be referenced by
its name in arguments to methods of match objects, such as m.group('id')or
m.end('id'), and also by name in pattern text (e.g. (?P=id)) and replacement text
(e.g. \g<id>).
(?P=name)
Matches whatever text was matched by the earlier group named name.
(?#...)
A comment; the contents of the parentheses are simply ignored.
(?=...)
Matches if ... matches next, but doesn't consume any of the string. This is called
a lookahead assertion. For example, Isaac (?=Asimov) will match 'Isaac ' only if
it's followed by 'Asimov'.
(?!...)
Matches if ... doesn't match next. This is a negative lookahead assertion. For
example, Isaac (?!Asimov) will match 'Isaac ' only if it's not followed by
'Asimov'.
The special sequences consist of "\" and a character from the list below. If the ordinary
character is not on the list, then the resulting RE will match the second character. For
example, \$ matches the character "$".
\number
Matches the contents of the group of the same number. Groups are numbered starting
from 1. For example, (.+) \1 matches 'the the' or '55 55', but not 'the end' (note
the space after the group). This special sequence can only be used to match one of
the first 99 groups. If the first digit of number is 0, or number is 3 octal digits
long, it will not be interpreted as a group match, but as the character with octal
value number. Inside the "[" and "]" of a character class, all numeric escapes are
treated as characters.
\A
Matches only at the start of the string.
\b
Matches the empty string, but only at the beginning or end of a word. A word is
defined as a sequence of alphanumeric characters, so the end of a word is indicated
by whitespace or a non-alphanumeric character. Inside a character range, \b
represents the backspace character, for compatibility with Python's string
literals.
\B
Matches the empty string, but only when it is not at the beginning or end of a
word.
\d
Matches any decimal digit; this is equivalent to the set [0-9].
\D
Matches any non-digit character; this is equivalent to the set [^0-9].
\s
Matches any whitespace character; this is equivalent to the set [ \t\n\r\f\v].
\S
Matches any non-whitespace character; this is equivalent to the set [^ \t\n\r\f\v].
\w
When the LOCALE flag is not specified, matches any alphanumeric character; this is
equivalent to the set [a-zA-Z0-9_]. With LOCALE, it will match the set [0-9_] plus
whatever characters are defined as letters for the current locale.
\W
When the LOCALE flag is not specified, matches any non-alphanumeric character; this
is equivalent to the set [^a-zA-Z0-9_]. With LOCALE, it will match any character
not in the set [0-9_], and not defined as a letter for the current locale.
\Z
Matches only at the end of the string.
\\
Matches a literal backslash.

3
TODO Normal file
View File

@ -0,0 +1,3 @@
optimize for speed
handle ^C intelligently - almost done
(multiline mode)

0
build-stamp Normal file
View File

14
conf.configure Normal file
View File

@ -0,0 +1,14 @@
regexp=^checking
colours=bold blue
.........
regexp=\.\.\. .*$
colours=bold yellow
.........
regexp=\.\.\. yes$
colours=bold cyan
.........
regexp=\.\.\. no$
colours=bold red
.........
regexp=\.\.\.[ ]
colours=default

24
conf.cvs Normal file
View File

@ -0,0 +1,24 @@
# conflict
regexp=^C .*$
colours=bold red
count=more
======
# modified
regexp=^M .*$
colours=bold blue
count=more
======
# added
regexp=^A .*$
colours=cyan
count=more
======
# removed
regexp=^R .*$
colours=cyan
count=more
======
# unlisted
regexp=^\? .*$
colours=bold
count=more

39
conf.df Normal file
View File

@ -0,0 +1,39 @@
# FS
regexp=^.*?\s
colours=green
======
# Size 'K'
regexp=\s\d*[.,]?\dK\s
colours=green
======
# Size 'M'
regexp=\s\d*[.,]?\dM\s
colours=yellow
======
# Size 'G'
regexp=\s\d*[.,]?\dG\s
colours=red
======
# Size 'T'
regexp=\s\d*[.,]?\dT\s
colours=bold red
======
# Mounted on
regexp=/\w*
colours=bold green
======
# Use 0-60%
regexp=[1-6][0-9]?%|0%
colours=green
======
# Use 70-90%
regexp=[7-9][0-9]%
colours=yellow
======
# Use 90-95
regexp=[9][0-5]%
colours=red
======
# Use 95-100
regexp=[9][5-9]%|100%
colours=bold red

24
conf.diff Normal file
View File

@ -0,0 +1,24 @@
# new lines and filenames (unified diff)
regexp=^\+(.*$)
colours=bold green
count=more
=======
# removed lines and filenames (unified diff)
regexp=^\-(--.+$|[^\-].*$|$)
colours=bold red
count=more
========
# new lines
regexp=^\>([^\>].*|$)
colours=bold green
count=more
=======
# removed lines
regexp=^\<([^\<].*|$)
colours=bold red
count=more
=======
# lines affected
regexp=^@@ .* @@$
colours=magenta
count=more

29
conf.dig Normal file
View File

@ -0,0 +1,29 @@
#ipv6
regexp=(([0-9a-fA-F]{1,4})?\:\:?[0-9a-fA-F]{1,4})+
colours=green
=======
#time
regexp=\s[0-9]{1,6}\s
colours=red
=======
#type
regexp=[A-Z]{1,4}
colours=cyan
=======
#in
regexp=(IN|CH)
colours=yellow
=======
#domain
regexp=[a-z0-9-]+\.
colours=magenta
=======
#ip address
regexp=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
colours=green
=======
#comments
regexp=^;;\s\w*\s*\w*
colours=yellow
#=======

54
conf.esperanto Normal file
View File

@ -0,0 +1,54 @@
# cxi tia dosiero estas treege nekompleta kaj nur mallonga ekzemplo
# kial skribi regulojn por kolorigo de tekstoj
#
# substantivoj
regexp=(?i)\b\w+(?=(o|oj|on|ojn)\b)
colours=green
%%%%%%%
# sufiksoj de substantivoj
regexp=(?i)o(|j|n|jn)\b
colours=yellow
%%%%%%%
# verboj
regexp=\b\w+(?=(?i)i|as|is|os|u)\b
colours=magenta
%%%%%%%
# sufiksoj de verboj
regexp=(?i)(i|as|is|os|u)\b
colours=yellow
%%%%%%%
# adverboj
regexp=(?i)\b\w+(?=e\b)
colours=bold magenta
%%%%%%%
# sufiksoj de adverboj
regexp=(?i)(e|aux)\b
colours=yellow
%%%%%%%
# adjektivoj
regexp=(?i)\b\w+(?=(a|aj|an|ajn)\b)
colours=blue
%%%%%%%
# sufiksoj de adjektivoj
regexp=(?i)a(j|n|jn)\b
colours=yellow
%%%%%%%
# kelkaj kurtaj vortoj
regexp=(?i)\b(de|en|kun|sen|la|pli|plej|plu)\b
colours=bold yellow

48
conf.gcc Normal file
View File

@ -0,0 +1,48 @@
#
regexp=\bgcc\b
colours=yellow
count=more
.........
#
regexp=^[^:\s]*?:\d+:
colours=bold magenta
.........
regexp=^[^:\s]*?:
colours=cyan
count=once
.........
#
regexp=\`[A-Za-z0-9_():&*]+( const)?\'
colours=magenta
.........
# -O
regexp=\-O\d
colours=green
.........
# -o
regexp=\-o\s.+\b
colours=yellow
.........
# warning and error won't work, unless you redirect also
# stderr to grcat
#
# warning
regexp=warning:.*
colours=white
.........
regexp=warning:
colours=bold yellow
count=once
.........
# error
regexp=error:.*
colours=bold white
.........
regexp=error:
colours=bold white on_red
count=once
.........
#note
regexp=note:
colours=bold cyan
count=once

51
conf.ifconfig Normal file
View File

@ -0,0 +1,51 @@
# ipv4
regexp=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
colours=bold green
=======
# ipv6
regexp=\b[0-9a-fA-F]{1,4}(\:\:?[0-9a-fA-F]{1,4})+
colours=bold green
=======
# hwaddr
regexp=(\d|[a-f]){2}(\:(\d|[a-f]){2}){5}
colours=yellow
=======
# size
regexp=\d+(\.\d+)?\s(T|G|M|K|)i?B
colours=yellow
=======
# interface
regexp=^(([a-z]{3,}\d*)|lo)\s
colours=bold green
=======
#ip disc
regexp=(inet6?|netmask|broadcast)
colours=cyan
=======
#flags
regexp=(?<=[,<])[^,]*(?=[,>])
colours=blue
=======
# mtu
regexp=(?i)mtu(\s|\:)\d+
colours=green
=======
#errors
regexp=errors(\s|\:)\d+
colours=red
=======
regexp=dropped(\s|\:)\d+
colours=white
=======
regexp=overruns(\s|\:)\d+
colours=green
=======
regexp=frame(\s|\:)\d+
colours=white
=======
regexp=carrier(\s|\:)\d+
colours=cyan
=======
regexp=collisions(\s|\:)\d+
colours=red

32
conf.irclog Normal file
View File

@ -0,0 +1,32 @@
# ip number
regexp=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
colours=magenta
=======
# ***
regexp=\*\*\*
colours=bold green
=======
# +++
regexp=\+\+\+
colours=green
=======
# mail address
regexp=\S+\@[\w\-\.]+
colours=bold yellow
=======
# Signoff
regexp=Signoff
colours=bold red
=======
# Signon
regexp=Signon
colours=bold green
=======
# everything in parentheses
regexp=\(.+?\)
colours=green
count=more
=======
# channel name
regexp=\#[\w\-\.]+
colours=bold blue

15
conf.ldap Normal file
View File

@ -0,0 +1,15 @@
# Intended for colouring LDIF output (from ldap tools)
# comments
regexp=^#.*
colours=green
count=stop
-
# meta
regexp=^(version|search|result):
colours=red
count=stop
-
# "attribute: value" pairs
regexp=^.*?:
colours=blue
count=stop

41
conf.log Normal file
View File

@ -0,0 +1,41 @@
# this configuration file is suitable for displaying kernel log files
# display this line in yellow and stop further processing
regexp=.*last message repeated \d+ times$
colours=yellow
count=stop
======
# this is date
regexp=^... (\d| )\d \d\d:\d\d:\d\d(\s[\w\d]+?\s)
colours=green, green, red
count=once
======
# everything in parentheses
regexp=\(.+?\)
colours=green
count=more
======
# everything in `'
regexp=\`.+?\'
colours=bold yellow
count=more
======
# this is probably a pathname
regexp=/[\w/\.]+
colours=bold green
count=more
======
# name of process and pid
regexp=([\w/\.\-]+)(\[\d+?\])
colours=bold blue, bold red
count=more
======
# ip number
regexp=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
colours=bold magenta
count=more
======
# connect requires special attention
regexp=connect
colours=on_red
count=more

31
conf.ls Normal file
View File

@ -0,0 +1,31 @@
# size
regexp=(\s|^)\d+([.,]\d+)?\s?([kKMG][bB]|[bB]|[kKMG])(?=[\s,]|$)
colours=yellow
=======
# time
regexp=(\s|^)\d+(:\d+)+(?=[\s,]|$)
colours=bold green
=======
# mounth
regexp=\s[a-z]{3}\s
colours=yellow
=======
#regexp=(?<=\d):(?=\d)
#colours=bold yellow
#=======
# root
regexp=root|wheel(?=\s|$)
colours=bold red
=======
# -rwxrwxrwx
regexp=(-|([bcCdDlMnpPs?]))(?=[-r][-w][-xsStT][-r][-w][-xsStT][-r][-w][-xsStT])
colours=unchanged,unchanged,bold blue
=======
regexp=(?<=[-bcCdDlMnpPs?])(-|(r))(-|(w))(-|([xsStT]))(?=[-r][-w][-xsStT][-r][-w][-xsStT])
colours=unchanged,unchanged,bold green,unchanged,bold green,unchanged,bold green
=======
regexp=(?<=[-bcCdDlMnpPs?][-r][-w][-xsStT])(-|(r))(-|(w))(-|([xsStT]))(?=[-r][-w][-xsStT])
colours=unchanged,unchanged,bold yellow,unchanged,bold yellow,unchanged,bold yellow
=======
regexp=(?<=[-bcCdDlMnpPs?][-r][-w][-xsStT][-r][-w][-xsStT])(-|(r))(-|(w))(-|([xsStT]))
colours=unchanged,unchanged,bold red,unchanged,bold red,unchanged,bold red

19
conf.mount Normal file
View File

@ -0,0 +1,19 @@
#/full/path
regexp=\s/[-\w\d.]+(\s|/[-\w\d./]+)
colours=cyan
=======
#filesystem
regexp=^\w+\s
colours=yellow
=======
#type filesystem
#regexp=(?<=type)\s*
#colours=red
#=======
# /dev/sda
regexp=^(/dev/)?[s]d[a-f][0-9]*(?=[^\w\d]|$)
colours=bold green
=======
#mount options
regexp=(?<=[,(])[^,]*(?=[,)])
colours=green

5
conf.mount2 Normal file
View File

@ -0,0 +1,5 @@
# Intended for colouring 'mount' output
# written by Emanuele Aina
regexp=^(.*) on (.*) type (.*) \((.*)\)
colours=default,green,yellow,blue,magenta

15
conf.mtr Normal file
View File

@ -0,0 +1,15 @@
#ip address
regexp=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
colours=green
=======
# %
regexp=[0-9]{1,2}\.\d{1}%
colours=yellow
=======
# unknow host
regexp=\?\?\?
colours=red
=======
# Packets/Pings
regexp=(Packets|Pings)
colours=bold green

76
conf.netstat Normal file
View File

@ -0,0 +1,76 @@
# ip number
regexp=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
colours=magenta
=======
# hostname:service
regexp=([\w\.\-]+):([\w\-]+)\b
colours=yellow, bold green, bold yellow
=======
# hostname:port
regexp=([\w\.\-]+):(\d+)\b
colours=yellow, bold green, bold red
=======
# *:service
regexp=(\*):([\w\-]+)\b
colours=yellow, blue, bold yellow
=======
# ipx hostname
regexp=^IPX.*[\dABCDEF]+:[\dABCDEF]+
colours=green
=======
# protocols
regexp=(^tcp|^udp|^unix|^IPX|STREAM|DGRAM)
colours=bold blue
=======
# status
regexp=FIN_WAIT.*
colours=red
=======
# status
regexp=SYN.*?
colours=bold red
=======
# status
regexp=LISTEN(ING)?
colours=bold blue
=======
# status
regexp=TIME_WAIT
colours=bold red
=======
# status
regexp=CLOS(E(_WAIT)?|ING)
colours=red
skip=yes
=======
# status
regexp=LAST_ACK
colours=red
=======
# status
regexp=ESTAB.*?\b|CONNECTED
colours=bold yellow
=======
# status
regexp=FREE
colours=bold green
=======
# status
regexp=DISCONNECTING
colours=red
=======
# status
regexp=CONNECTING
colours=green
=======
# status
regexp=UNKNOWN
colours=blink bold red
=======
# status
regexp=\[.*\]
colours=green
=======
# path
regexp=(\@)[\dabcdef]+
colours=green, bold green

31
conf.ping Normal file
View File

@ -0,0 +1,31 @@
# ip number
regexp=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
colours=magenta
=======
# ipv6 number
regexp=(([0-9a-fA-F]{1,4})?\:\:?[0-9a-fA-F]{1,4})+
colours=magenta
=======
# time
regexp=\d+\.\d+\sms
colours=green
=======
# time
regexp=\d+\sms
colours=green
======
# time
regexp=time=
colours=yellow
=======
# DUP
regexp=DUP\!
colours=red
=======
# (,)
regexp=\(|\)
colours=yellow
=======
# unknown host
regexp=.+unknown\shost\s(.+)
colours=red,bold red

31
conf.proftpd Normal file
View File

@ -0,0 +1,31 @@
# this configuration file is suitable for displaying proftpd log files
# submitted by Pavol Domin
# everything in brakets
regexp=\[.+?\]
colours=cyan
count=more
======
# everything in ""
regexp=\".+?\"
colours=green
count=more
======
# ip number
regexp=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
colours=bold magenta
count=more
======
# STOR
regexp=STOR
colours=bold red on_white
count=more
======
# RETR
regexp=RETR
colours=black on_white
count=more
==
# first tree fields separated by space
regexp=^([\w\.]+?\s)([\w\.]+?\s)([\w\.]+?\s)
colours=bold blue, bold yellow, bold magenta

47
conf.ps Normal file
View File

@ -0,0 +1,47 @@
# /full/path
regexp=(\s|^)/[-\w\d.]+/[-\w\d./]+
colours=white
=======
# CAPS LINE
regexp=^[A-Z\s%]*([A-Z]{3})[A-Z\s%]*$
colours=underline
=======
# Capd Line
regexp=^([A-Z][-a-z0-9]+(\s+|$)){3,}$
colours=underline
=======
# VMSTAT
regexp=(\s|^)\d+([.,]\d+)?(?=[\s,]|$)
colours=bold green
=======
# n.n.n
regexp=(\s|^)\d+\.\d+\.\d+(?=[\s,]|$)
colours=bold cyan
=======
# text:
regexp=^([-a-z0-9]+):\s
colours=unchanged,yellow
=======
# -options
regexp=(?<=\s)-[\w\d]+(?=\s|$)
colours=yellow
=======
# --long-option=
regexp=(?<=\s)--[-\w\d]+[\w\d](?==|\s|$)(=?)
colours=cyan,white
=======
# [text]
regexp=\[[-\w\d:/]+\]
colours=cyan
=======
# root
regexp=root|wheel(?=\s|$)
colours=red
=======
# pts
regexp=(\s|^)pts/\d+(?=[^\w\d]|$)
colours=bold yellow
=======
# tty
regexp=(\s|^)tty\d+(?=[^\w\d]|$)
colours=bold cyan

42
conf.traceroute Normal file
View File

@ -0,0 +1,42 @@
# hostname
regexp=\s\w+[\w\-\.]+\w+
colours=bold yellow
count=once
-
# ip number
regexp=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
colours=magenta
-
# ipv6 number
regexp=(([0-9a-fA-F]{1,4})?\:\:?[0-9a-fA-F]{1,4})+
colours=magenta
-
# time
regexp=\d+\.?\d*(?=\sms)
colours=green
-
# ms
regexp=\bms\b
colours=yellow
-
# DUP
regexp=\bDUP
colours=red
-
# !S, !A, !H (host unreachable), etc.
regexp=\b\![AFGNPSTU]
colours=red
# just an example:
#command=echo 'Network is down'| mail root
-
# ttl=...!
regexp=ttl=\d+\!
colours=cyan
-
# *
regexp=\*
colours=red
-
# parenthesis
regexp=\(|\)
colours=yellow

9
conf.wdiff Normal file
View File

@ -0,0 +1,9 @@
# new words
regexp=\{\+.+\+\}
colours=bold green
count=more
=======
# deleted words
regexp=\[\-.+\-\]
colours=bold green
count=more

26
contrib/conf.efingerd Normal file
View File

@ -0,0 +1,26 @@
# contributed by Daniel Kollár <dkollar@fmph.uniba.sk>
# @host
regexp=@\w+[\w\-\.]+\w+
colours=magenta
count=once
======
# who fingers
regexp=(\s\w+[\w\-\.]+)(?=@)
colours=bold magenta
count=once
======
# user null fingers
regexp=\(null\)
colours=green
count=once
======
# who's fingered
regexp=(\s\d\d\d\d\s)(\w+[\w\-\.]+\s(?=fingered))
colours=bold yellow
count=once
======
# date and time
regexp=^(...)(\s...\s.\d \d\d:\d\d:\d\d)(\s...\s\d\d\d\d\s)
colours=green, green, bold green, green
count=once

View File

@ -0,0 +1,78 @@
--------------
COLORIZING nmh
--------------
I've been using nmh on Linux for a few years now, it is a powerful mail
handling system maintained by a team of volunteers. The latest version can
be found at: http://www.mhost.com/nmh/
A few months ago I discovered grc, a very cool "generic colouriser",
written by Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk>
http://melkor.dnp.fmph.uniba.sk/~garabik/grc.html
Since I'm hooked on nmh, I decided to use grc with it.
Here's a list of the files needed:
The latest version of these files can be found at:
http://users.anet.com/~mig/nmh-in-color/nmh-in-color.tar.gz
configs/
bashrc-entries Example alias entries for a ~/.bashrc file.
conf.flists grc config for flists command.
conf.inc grc config for inc command.
conf.mail grc config for show command.
conf.scan grc config for scan command.
grc.conf-entries sample entries for use in grc.conf
mh_profile-entries sample entries for use in ~/.mh_profile
mhl.body sample format file for MIME message body
mhl.format sample format file for show command
mhl.headers sample format file for MIME message headers
rxvt-resources rxvt settings from ~/.Xdefaults used for the
screenshots
scripts/
viewmail Script for viewing colorized e-mail.
vimail Script to call vim in mail-syntax mode.
------------
INSTALLATION
------------
Grab nmh-1.0.x.tar.gz, and grc_0.x.tar.gz from the websites above. Read the
documentation included with the packages and install them. Grc requires a
Python interpreter. I tested with grc_0.81 and Python-1.5.1.
Copy the conf.* files to /usr/share/grc/ or /usr/local/share/grc/, depending
on how grc was installed.
Copy viewmail and vimail somewhere in your path, like ~/bin/. Note vimail
does not use grc, but makes use of vim-5.x syntax-highlighting. You may have
to modify the path to the syntax description files given in the script to
match your system. If you only want to colorize email-viewing, or you don't
use vim to compose messages, don't install vimail.
Add the contents of bashrc-entries to your ~/.bashrc, and the contents of
mh_profile-entries to your ~/.mh_profile (look these over first, some of these
profile entries are just my personal preference). Also, add grc.conf-entries
to /etc/grc.conf.
I recommend the use of rxvt (http://www.rxvt.org). I've included the settings
from my .Xdefaults file in rxvt-resources (don't forget to do a xrdb -load
.Xdefaults after you put these in place).
--------
COMMENTS
--------
The color-scheme I've used in the conf.* files is optimized for light text on
a dark background. Please feel free to make modifications.
Enjoy!
Miguel Gualdron (August 2000)
mig@anet.com
http://users.anet.com/~mig/nmh-in-color
#---------------------------------------------------------------------------
# README file for nmh-in-color.tar.gz
# $Id: README,v 1.7 2001/01/19 03:32:30 mig Exp mig $
#---------------------------------------------------------------------------

View File

@ -0,0 +1,27 @@
#----------------------------------------------------------------------
# This alias shows all my mail folders, highlighting (in yellow)
# those which have new mail in them.
#----------------------------------------------------------------------
alias flists="grc flists"
#----------------------------------------------------------------------
# I use Procmail to sort my incoming mail into nmh folders, this alias
# shows me only the folders that have new mail in them:
#----------------------------------------------------------------------
alias fl="flists -seq unseen -noshowzero -recurse"
#----------------------------------------------------------------------
# Since I use procmail(1), I don't use inc(1) much...
#----------------------------------------------------------------------
alias inc="grc inc"
#----------------------------------------------------------------------
# I like to have a header on the the scan(1) output so I know where I am.
# Feel free to change any of the colors in the conf-* files...
#----------------------------------------------------------------------
alias scan="grc scan -header"
#----------------------------------------------------------------------
# Just a shortcut for the inbox:
#----------------------------------------------------------------------
alias si="scan +inbox"

View File

@ -0,0 +1,14 @@
#---------------------------------------------------------------------------
# $Id: conf.flists,v 1.5 2001/01/19 03:04:38 mig Exp mig $
#---------------------------------------------------------------------------
# GRC config file for use with nmh(1) command flists(1).
#---------------------------------------------------------------------------
# Unread messages:
regexp=.*has\s+([0-9]+[0-9]|[1-9])\sin.*
colours=yellow
count=more
-
# Current folder:
regexp=.*\+\s+.*
colours=green
count=once

View File

@ -0,0 +1,14 @@
#---------------------------------------------------------------------------
# $Id: conf.inc,v 1.5 2001/01/20 00:00:57 mig Exp mig $
#---------------------------------------------------------------------------
# GRC config file for use with nmh(1) command inc(1).
#---------------------------------------------------------------------------
# Replies...
regexp=\s+R[Ee]:\s+.*
colours=blue
count=more
-
# Current message:
regexp=^\s{0,3}\d{1,5}\+.*
colours=green
count=once

View File

@ -0,0 +1,132 @@
#---------------------------------------------------------------------------
# $Id: conf.mail,v 3.3 2001/01/19 03:10:13 mig Exp mig $
#-------------------------------------------------------------------------
# This configuration file is suitable for displaying mail files.
# Such as when mail is read with mh(1) or nmh(1).
#
# This version makes more use of the block count to avoid listing all of
# the possible header lines...
#-------------------------------------------------------------------------
# The Date, will be green.
#-------------------------------------------------------------------------
regexp=^\s*(Date|Sent):.*
colours=green
count=stop
-
#-------------------------------------------------------------------------
# The To, CC, BCC, and From, etc. lines will be green.
#-------------------------------------------------------------------------
regexp=^\s*((In-)?([Rr]eply-)?[Tt]o|From|Author|[BbFf]?[Cc][Cc]):
colours=green
count=more
-
#-------------------------------------------------------------------------
# The Subject line will be red.
#-------------------------------------------------------------------------
regexp=^\s*Subject:.*$
colours=bold red
count=stop
-
#-------------------------------------------------------------------------
# Long lines:
#-------------------------------------------------------------------------
regexp=^\s{5}\*\*\*.*$
colours=previous
count=previous
-
#-------------------------------------------------------------------------
# Header lines added by nmh:
#-------------------------------------------------------------------------
regexp=^\s*Replied:.*$
colours=cyan
count=more
-
#-------------------------------------------------------------------------
# Other mail header lines will be yellow.
#-------------------------------------------------------------------------
regexp=^(([Xx]-{0,1}.*\S)|((Return-)?Path)|(MIME-{0,1}.*\S)):.*$
colours=yellow
count=block
-
#-------------------------------------------------------------------------
# Multi-line signatures:
#-------------------------------------------------------------------------
regexp=^-{1,3}\s{0,1}$
colours=red
count=block
-
regexp=^={1,5}\s{0,1}$
colours=red
count=block
-
regexp=^-=-\s{0,1}$
colours=red
count=block
-
#-------------------------------------------------------------------------
# This unblock applies to all of the block lines above:
#-------------------------------------------------------------------------
regexp=^\s{0,5}$
colours=default
count=unblock
-
#---------------------------------------------------------------------------
# This will make most separating lines blue:
#---------------------------------------------------------------------------
regexp=^.*([-=_!#$*<=>.:/|\\~`] *){7}.*$
colours=blue
count=more
-
#-------------------------------------------------------------------------
# Any quoted messages will show up in blue if quoted an odd number of times,
# cyan if quoted an even number of times. The main message text will remain
# unchanged.
#
# (I grabbed these regexp's from the vim-5.x mail.vim file.)
#-------------------------------------------------------------------------
regexp=^[ \t]*([A-Za-z]+>|[\]|}>#:]).*$
colours=blue
count=more
-
regexp=^[ \t]*(([A-Za-z]+>|[\]|}>#:])[ \t]*){2}.*$
colours=cyan
count=more
-
regexp=^[ \t]*(([A-Za-z]+>|[\]|}>#:])[ \t]*){3}.*$
colours=blue
count=more
-
regexp=^[ \t]*(([A-Za-z]+>|[\]|}>#:])[ \t]*){4}.*$
colours=cyan
count=more
-
regexp=^[ \t]*(([A-Za-z]+>|[\]|}>#:])[ \t]*){5}.*$
colours=blue
count=more
-
regexp=^[ \t]*(([A-Za-z]+>|[\]|}>#:])[ \t]*){6}.*$
colours=cyan
count=more
-
#-------------------------------------------------------------------------
# Highlight URLs in magenta and email addresses in green:
#-------------------------------------------------------------------------
regexp=\b\S+@\S+\b
colours=green
count=more
-
regexp=mailto:\S+@\S+\b
colours=green
count=more
-
regexp=https?:\/\/\S+\b
colours=magenta
count=more
-
regexp=ftp:\/\/\S+\b
colours=magenta
count=more
-
regexp=file:\/\/\S+\b
colours=magenta
count=more

View File

@ -0,0 +1,31 @@
#---------------------------------------------------------------------------
# $Id: conf.scan,v 1.6 2001/01/20 00:01:32 mig Exp mig $
#---------------------------------------------------------------------------
# GRC config file for use with nmh(1) command scan(1).
#
# This file works well with the scan.unseen file provided with nmh(1).
#---------------------------------------------------------------------------
# The header line:
regexp=^FOLDER.*
colours=green
count=once
-
# Messages replied-to by me:
regexp=^\s{0,3}\d{1,5}\s+-.*
colours=cyan
count=more
-
# Replies...
regexp=\s+R[Ee]:\s+.*
colours=blue
count=more
-
# Unread messages:
regexp=^\s{0,3}\d{1,5}\sU\s.{23}
colours=yellow
count=more
-
# Current message:
regexp=^\s{0,3}\d{1,5}\+.*
colours=green
count=once

View File

@ -0,0 +1,15 @@
#
# Add these entries to the /etc/grc.conf file, so grc does the right thing
# when the scan, flists, and inc commands are used.
#
# scan command
(^|[/\w\.]+/)scan\b
conf.scan
# flists command
(^|[/\w\.]+/)flists\b
conf.flists
# inc command
(^|[/\w\.]+/)inc\b
conf.inc

View File

@ -0,0 +1,13 @@
#:
#: The .mh_profile entries listed below may be useful when using
#: nmh with grc/grcat.
#:
moreproc: viewmail
Unseen-Sequence: unseen
scan: -form scan.unseen
comp: -editor vimail
repl: -annotate -nocc all -fcc sent-mail -filter reply.filter -editor vimail
forw: -editor forwedit -format
forwedit: -editor vimail
flists: -recurse
mhshow-show-text/html: lynx -dump -force_html '%f' |viewmail

View File

@ -0,0 +1 @@
body:nocomponent,width=79,overflowtext="*** ",overflowoffset=5,noleftadjust

View File

@ -0,0 +1,22 @@
; mhl.format
;
; This is a slighly modified version of the default mhl.format file included
; with nmh-1.0.x. I've added "width=79,overflowtext='*** '" to the "body"
; line at the bottom. I've also made the the overflowtext string "*** "
; instead of the default "***" to improve readability.
;
; Miguel Gualdron (July 2000).
;
:
overflowtext="*** ",overflowoffset=5
leftadjust,compwidth=9
ignores=msgid,message-id,received,content-type,content-transfer-encoding,content-id
Date:formatfield="%<(nodate{text})%{text}%|%(pretty{text})%>"
To:
cc:
From:decode
Subject:decode
:
extras:nocomponent
:
body:nocomponent,width=79,overflowtext="*** ",overflowoffset=5,noleftadjust

View File

@ -0,0 +1,20 @@
; mhl.headers
;
; Slighly modified version of the default mhl.headers file included with
; nmh-1.0.x. See the comments at the top of mhl.format for more details.
;
; Format file for displaying headers in
; MIME messages. mhn calls the mhlproc with this
; filter to display message header.
;
overflowtext="*** ",overflowoffset=5
leftadjust,compwidth=9
ignores=msgid,message-id,received,content-type,content-transfer-encoding,content-id
Date:formatfield="%<(nodate{text})%{text}%|%(pretty{text})%>"
To:
cc:
From:decode
Subject:decode
:
extras:nocomponent
:

View File

@ -0,0 +1,30 @@
!--------------------------------------------------------------
! These are the resource settings I use with rxvt(1),
! they were in place when the screenshots were generated.
!
! If you prefer your terminal windows with dark text on
! a light background, you'll have to tweak the colors here, as
! well as in the grc conf-* files.
!-----------------
! Rxvt settings
!-----------------
Rxvt*background: black
Rxvt*foreground: gray70
Rxvt*color4: #1e90ff
Rxvt*color12: #63b8ff
Rxvt*colorBD: #63b8ff
Rxvt*colorUL: #00ffff
!
!--------------------------------------------------------------
! The following settings have a similar effect on
! xterm(1).
!-----------------
! Xterm settings
!-----------------
XTerm*background: black
XTerm*foreground: gray70
XTerm*colorBDMode: on
XTerm*color4: #1e90ff
XTerm*color12: #63b8ff
XTerm*colorBD: #63b8ff
XTerm*colorUL: #00ffff

View File

@ -0,0 +1,37 @@
#!/bin/sh
#
#---------------------------------------------------------------------------
# $Id: viewmail,v 1.4 2000/08/19 00:23:32 mig Exp mig $
#----------------------------------------------------------------------
# Script Name: viewmail
# Purpose: Short script to page through and colorize email.
#
#----------------------------------------------------------------------
#---------------------------------------------------------------------------
# If we're sending output to a terminal, then colorize it,
# otherwise, just cat it (...in case we're piping to lpr, etc.).
#
# Assume the input comes from STDIN. If we get command-line arguments,
# then we assume they're filenames, and cat them each in turn.
#---------------------------------------------------------------------------
if [ -t 1 ]; then
if [ $# -eq 0 ]; then
grcat conf.mail | less -r
else
for _arg in $*
do
grcat conf.mail < $_arg | less -r
done
fi
else
if [ $# -eq 0 ]; then
cat
else
for _arg in $*
do
cat $_arg
done
fi
fi

View File

@ -0,0 +1,15 @@
#!/bin/sh
#
#---------------------------------------------------------------------------
# $Id: vimail,v 1.3 2000/08/19 00:25:17 mig Exp mig $
#---------------------------------------------------------------------------
# Script Name: vimail
# Purpose: Short script to edit mail from nmh(1)
# This script makes use if vim-5.x syntax highlighting.
#
#---------------------------------------------------------------------------
if [ $# = 0 ]; then
vi +'so $VIM/syntax/mail.vim' -
else
vi +'so $VIM/syntax/mail.vim' $*
fi

28
contrib/wrap-ccache Executable file
View File

@ -0,0 +1,28 @@
#!/bin/sh
# by Alexey Galakhov
wd="`dirname $0`"
ccache="`which ccache`"
grc="`which grc`"
grconf="conf.gcc"
if [ "`basename $1`" = "configure" ]; then
ccache=""
grconf="conf.configure"
fi
gropts=""
if perl -e 'use POSIX "isatty"; exit !isatty(1);'; then
gropts="$gropts --stdout"
fi
if perl -e 'use POSIX "isatty"; exit !isatty(2);'; then
gropts="$gropts --stderr"
fi
if [ ! -z "$grc" -a ! -z "$gropts" ]; then
grc="$grc -s -e -c $wd/$grconf"
else
grc=""
fi
exec $grc $ccache "$@"

6
debian/README.Debian vendored Normal file
View File

@ -0,0 +1,6 @@
grc
----------------------
packaged as native package
-- Radovan Garabík <garabik@kassiopeia.juls.savba.sk>

213
debian/changelog vendored Normal file
View File

@ -0,0 +1,213 @@
grc (1.6) unstable; urgency=low
* add several configuration files (thanks to Mrs. Smith)
-- Radovan Garabik <garabik@kassiopeia.juls.savba.sk> Wed, 30 Oct 2013 15:15:20 +0100
grc (1.5) unstable; urgency=low
* added configuration file for the 'mount' command (thanks to Emanuele Aina)
* catch SIGPIPE in grcat (closes: #689705),
thanks to Дмитрий Кацубо for pointing this out
* add several configuration files (thanks to Dark Wizard)
* preliminary python3 support (thanks to Dark Wizard and Andreas Niederl),
as a consequence, grc requires at least python2.6
-- Radovan Garabík <garabik@kassiopeia.juls.savba.sk> Sat, 10 Aug 2013 14:23:01 +0200
grc (1.4) unstable; urgency=low
* fix grcat argument search path,
thanks to Andrzej Polis and Алексей Галахов
* added conf.configure, thanks to Алексей Галахов
* IPv6 support for ping6 and traceroute6
-- Radovan Garabík <garabik@kassiopeia.juls.savba.sk> Sat, 14 May 2011 14:39:43 +0200
grc (1.3) unstable; urgency=low
* propagate CTRL+C properly to the command being executed
(for i in range(100): print "I'll never use wildcard 'except:' again")
* if grcat argument starts with ./, search in current working directory
* fix unified diff configuration to include also single '-',
thanks to Markus Klinik for noticing
-- Radovan Garabík <garabik@kassiopeia.juls.savba.sk> Wed, 8 Jul 2009 20:29:06 +0200
grc (1.2) unstable; urgency=low
* properly redirect stderr, thanks to Алексей Галахов
* fix several minor pylint warnings
-- Radovan Garabík <garabik@kassiopeia.juls.savba.sk> Thu, 14 May 2009 19:21:00 +0200
grc (1.1) unstable; urgency=low
* added several non-standard escape attributes (thanks to James Rowe)
-- Radovan Garabík <garabik@kassiopeia.juls.savba.sk> Sat, 31 Mar 2007 21:25:02 +0200
grc (1.0.9) unstable; urgency=low
* added configuration file for the cvs command (thanks to Andreas Niederl)
* modify diff configuration file to colour the filenames
as well (thanks to Andreas Niederl)
-- Radovan Garabík <garabik@kassiopeia.juls.savba.sk> Thu, 4 Jan 2007 20:45:12 +0100
grc (1.0.8) unstable; urgency=low
* add the possibility to include arbitrary string as the colourifying
sequence
-- Radovan Garabík <garabik@kassiopeia.juls.savba.sk> Mon, 11 Sep 2006 09:58:54 +0200
grc (1.0.7) unstable; urgency=low
* do not use sys.maxint, it caused problems
* improve ping conffile, thanks to Michael Kebe (closes: #378981)
-- Radovan Garabík <garabik@kassiopeia.juls.savba.sk> Sat, 22 Jul 2006 08:56:56 +0200
grc (1.0.6) unstable; urgency=low
* applied patch that causes grcat to complain and exits when grcat can't find the
config file (thanks to Tripp Lilley <tlilley @ perspex.com>)
-- Radovan Garabík <garabik@kassiopeia.juls.savba.sk> Tue, 4 Mar 2003 13:42:47 +0100
grc (1.0.5) unstable; urgency=low
* add "unchanged" colour
(thanks to Jehan Bing <jehan@bravobrava.com>)
-- Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk> Tue, 4 Feb 2003 14:29:55 +0100
grc (1.0.4) unstable; urgency=low
* do not require $HOME to be set (closes: #158316)
-- Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk> Wed, 4 Sep 2002 13:44:41 +0200
grc (1.0.3) unstable; urgency=low
* added configuration file for colourising diff outputs
(thanks to Dr. Rafael Sepúlveda <drs@gnulinux.org.mx>)
-- Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk> Sun, 18 Aug 2002 19:35:34 +0200
grc (1.0.2) unstable; urgency=low
* package updated for new python version in debian
* if grc is run without any arguments, display helpful
message (closes: #108675)
* do not include INSTALL in debian documentation (closes: #94053)
-- Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk> Sun, 21 Oct 2001 14:43:11 +0200
grc (1.0.1) unstable; urgency=low
* included rpm spec file, conf.ldap, modified grc.conf - all
thanks to Christian Zuckschwerdt
-- Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk> Wed, 28 Feb 2001 21:56:02 +0100
grc (1.0) unstable; urgency=low
* moved Build-Depends where it belongs
* OK, this seems pretty stable already.... first stable version :-)
-- Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk> Fri, 23 Feb 2001 21:27:55 +0100
grc (0.999) unstable; urgency=low
* grc terminates with the exit status of subprogram
* my e-mail added to README file :-)
* license changed
-- Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk> Mon, 12 Feb 2001 18:01:24 +0100
grc (0.99) unstable; urgency=low
* candidate for stable version
* corrected two stupid bugs when using skip option (closes: #84007)
* upgraded nmh-in-color, by Miguel Gualdron
-- Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk> Tue, 30 Jan 2001 15:06:57 +0100
grc (0.9) unstable; urgency=low
* grc catches ctrl C and propagates to subprocess (Closes: #81137)
* added skip keyword to skip lines in output containing certain patterns
-- Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk> Thu, 18 Jan 2001 10:12:38 +0100
grc (0.8.1) unstable; urgency=low
* typo in manpages fixed, closes: #70498
-- Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk> Tue, 29 Aug 2000 14:20:14 +0200
grc (0.8) unstable; urgency=low
* added patches from Miguel Gualdron <mig@anet.com> for
colourising multiline blocks of text and making current colour
dependent on previous line
-- Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk> Sun, 27 Aug 2000 09:47:17 +0200
grc (0.7) unstable; urgency=low
* redirecting both stdout and stderr works
I do not know what was the error, but I made it differently and it works :-)
-- Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk> Tue, 23 May 2000 21:35:46 +0200
grc (0.6) unstable; urgency=low
* rewritten grc to use fork() and exec()
* introduce --colour= option, to colourise depending on stdout being a tty (closes #62365)
-- Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk> Sun, 7 May 2000 19:42:30 +0200
grc (0.5) unstable; urgency=low
* a bit of speed optimization
* added a few (2) more configuration files
* added debhelper to Build-Depends
* upgraded Standards-Version
-- Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk> Mon, 14 Feb 2000 12:23:29 +0100
grc (0.4) unstable; urgency=low
* change of configuration file format
* added use of different colours per different regexp groups
* added execution of external commands if regexp matches
-- Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk> Mon, 22 Nov 1999 19:13:05 +0100
grc (0.3) unstable; urgency=low
* enable nested and overlaped regular expressions - this fixes a few
display glitches
-- Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk> Wed, 27 Oct 1999 22:32:58 +0200
grc (0.2) unstable; urgency=low
* grc can redirect stderr as well
* background and other attributes (blink, bold) can be changed too
* documentation update
-- Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk> Tue, 26 Oct 1999 18:02:28 +0200
grc (0.1) unstable; urgency=low
* Initial Release.
-- Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk> Thu, 14 Oct 1999 19:24:25 +0200
Local variables:
mode: debian-changelog
End:

1
debian/compat vendored Normal file
View File

@ -0,0 +1 @@
9

14
debian/control vendored Normal file
View File

@ -0,0 +1,14 @@
Source: grc
Section: text
Priority: optional
Maintainer: Radovan Garabík <garabik@kassiopeia.juls.savba.sk>
Standards-Version: 3.7.2
Build-Depends: debhelper (>=4)
Package: grc
Architecture: all
Depends: python (>=2.6) | python3
Description: generic colouriser for everything
generic colouriser, can be used to colourise logfiles,
output of commands, arbitrary text....
configured via regexp's.

19
debian/copyright vendored Normal file
View File

@ -0,0 +1,19 @@
This is grc, written and maintained by Radovan Garabík <garabik@kassiopeia.juls.savba.sk>
on Thu, 14 Oct 1999 19:24:25 +0200.
The original source can be found at:
http://kassiopeia.juls.savba.sk/~garabik/software/grc.html
It is released under GPL: under Debian systems see /usr/share/common-licenses/GPL,
with following additional condition:
If you want to use, redistribute, modify, abuse and molest grc in any
way, and you feel like it, you may add any clause to the license, as
long as it does not put any additional responsibility for behaviour of
this program at me and at least one of these conditions is met:
- the resulting license fulfills Debian free software guidelines
(http://www.debian.org/social_contract#guidelines)
- Richard Stallman has nothing against the new license, neither
against running grc with any version of python available
at the time of adding the clause
- the resulting license brings peace and happiness to the world

2
debian/dirs vendored Normal file
View File

@ -0,0 +1,2 @@
usr/bin
usr/share/grc

1
debian/docs vendored Normal file
View File

@ -0,0 +1 @@
TODO README Regexp.txt CREDITS contrib/

1
debian/files vendored Normal file
View File

@ -0,0 +1 @@
grc_1.5_all.deb text optional

18
debian/grc.debhelper.log vendored Normal file
View File

@ -0,0 +1,18 @@
dh_installdirs
dh_installdocs
dh_installexamples
dh_installmenu
dh_installcron
dh_installman
dh_installinfo
dh_installchangelogs
dh_link
dh_strip
dh_compress
dh_fixperms
dh_installdeb
dh_shlibdeps
dh_gencontrol
dh_md5sums
dh_builddeb
dh_builddeb

1
debian/grc.substvars vendored Normal file
View File

@ -0,0 +1 @@
misc:Depends=

74
debian/rules vendored Executable file
View File

@ -0,0 +1,74 @@
#!/usr/bin/make -f
# Sample debian/rules that uses debhelper.
# GNU copyright 1997 to 1999 by Joey Hess.
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
build: build-stamp
build-stamp:
dh_testdir
# Add here commands to compile the package.
#$(MAKE)
touch build-stamp
clean:
dh_testdir
dh_testroot
rm -f build-stamp
# Add here commands to clean up after the build process.
#-$(MAKE) clean
dh_clean
install: build
dh_testdir
dh_testroot
dh_clean -k
dh_installdirs
# Add here commands to install the package into debian/tmp.
./install.sh `pwd`/debian/grc
touch install-stamp
# Build architecture-dependent files here.
binary-arch: build install
# Build architecture-independent files here.
binary-indep: build install
# dh_testversion
dh_testdir
dh_testroot
# dh_installdebconf
dh_installdocs
dh_installexamples
dh_installmenu
# dh_installemacsen
# dh_installpam
# dh_installinit
dh_installcron
dh_installman grc.1 grcat.1
dh_installinfo
# dh_undocumented
dh_installchangelogs
dh_link
dh_strip
dh_compress
dh_fixperms
# You may want to make some executables suid here.
# dh_suidregister
# dh_makeshlibs
dh_installdeb
# dh_perl
dh_shlibdeps
dh_gencontrol
dh_md5sums
dh_builddeb
binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install

170
grc Executable file
View File

@ -0,0 +1,170 @@
#! /usr/bin/python
import os, re, string, sys, getopt, signal
def version():
print ("Generic Colouriser 1.5")
sys.exit()
def help():
print("""Generic Colouriser 1.5
grc [options] command [args]
Options:")
-e --stderr redirect stderr. If this option is selected,
do not automatically redirect stdout
-s --stdout redirect stdout, even if -e is selected
-c name --config=name use name as configuration file for grcat
--colour=word word is one of: on, off, auto
""")
sys.exit()
def catch_signal(signum, frame):
"catch signal sent to grc and forward it to the original application"
global pidp
try:
os.kill(pidp, signum)
except OSError: # if the subprocess already died
pass
try:
optlist, args = getopt.getopt(sys.argv[1:], "sec:", ["stdout", "stderr", "config=", "colour="] )
except:
help()
if not args:
help()
stdoutf = 0
stderrf = 0
# configure file for grcat
cfile = ""
colour = 1
for i in optlist:
if i[0] in ["--stderr", "-e"]:
stderrf = 1
elif i[0] in ["--stdout", "-s"]:
stdoutf = 1
elif i[0] in ["--config", "-c"]:
cfile = i[1]
elif i[0] == "--colour":
if i[1] == "on":
colour = 1
elif i[1] == "off":
colour = 0
elif i[1] == "auto":
colour = sys.stdout.isatty()
else:
help()
stdoutff = 1
stderrff = 0
if stderrf == 1:
stdoutff = 0
stderrff = 1
if stdoutf == 1:
stdoutff = 1
conffile = None
if cfile == "":
home = []
if 'HOME' in os.environ:
home = [os.environ['HOME']+"/.grc/grc.conf"]
conffilenames = home + ["/etc/grc.conf"]
for i in conffilenames:
if os.path.isfile(i):
conffile = i
break
regexplist = []
if conffile:
f = open(conffile, "r")
while 1:
l = f.readline()
if l == "":
break
if l[0] == "#" or l[0] == '\012':
continue
regexp = l.strip()
if re.search(regexp, ' '.join(args)):
cfile = f.readline().strip()
break
signal.signal(signal.SIGINT, catch_signal)
if cfile != "" and colour:
if stdoutff:
choo, chio = os.pipe()
if stderrff:
choe, chie = os.pipe()
pidp = os.fork()
if pidp == 0: # child
if stdoutff:
os.dup2(chio, 1)
os.close(choo)
os.close(chio)
if stderrff:
os.dup2(chie, 2)
os.close(choe)
os.close(chie)
os.execvp(args[0], args)
if stdoutff:
pido = os.fork()
if pido == 0: # child
os.dup2(choo, 0)
os.close(choo)
os.close(chio)
if stderrff:
os.close(choe)
os.close(chie)
os.execvp("grcat", ["grcat", cfile])
if stderrff:
pide = os.fork()
if pide == 0: # child
os.dup2(choe, 0)
os.dup2(2, 1)
os.close(choe)
os.close(chie)
if stdoutff:
os.close(choo)
os.close(chio)
os.execvp("grcat", ["grcat", cfile])
try:
status = os.waitpid(pidp, 0)[1]
except OSError: # interrupted system call
status = None
pass # this is probably not correct
if stderrff:
os.close(chie)
os.waitpid(pide, 0)
os.close(choe)
if stdoutff:
os.close(chio)
os.waitpid(pido, 0)
os.close(choo)
sys.exit(status and os.WEXITSTATUS(status))
else:
pidp = os.fork()
if pidp == 0:
os.execvp(args[0], args)
try:
status = os.wait()[1]
except OSError: # interrupted system call
status = None
pass # this is probably not correct
sys.exit(status and os.WEXITSTATUS(status))

76
grc.1 Normal file
View File

@ -0,0 +1,76 @@
.TH GRC 1
.SH NAME
grc \- frontend for generic colouriser
.BR grcat "(1)
.SH SYNOPSIS
.B grc
.I [options] "command [args]"
.SH DESCRIPTION
.BR grc
will execute command
.I "command"
with optional parameters
.I "[args]"
piping its stdout or stderr into
.BR grcat ",
with apropriate configuration file.
Configuration file for
.BR grc
is determined by /etc/grc.conf file.
Format of /etc/grc.conf:
each entry consists of 2 lines, between entries there can be any number of empty
lines or lines beginning with # (comments)
First line is regular expression, second line the name of configuration
file for
.BR grcat ".
Configuration file after the first regular expression matching
.I "command [args]"
will be passed to
.BR grcat
as its configuration file
.SH OPTIONS
.TP
.B \-\-help
Show summary of options.
.TP
.B \-\-version
Display version.
.TP
.B \-e \-\-stderr
Redirect error output. Unless
.B -s
is selected as well, this cancels redirection of standard output via
.BR grcat
.TP
.B \-s \-\-stdout
Redirect standard output. Used to redirect standard output
together with
.B \-\-stderr
option.
.TP
.B \-\-colour=x
x is one of
.I on
.I off
.I auto
.B \-\-colour=on
will colourise (default)
.B \-\-colour=off
will just execute
.I command
without colourising.
.B \-\-colour=auto
will test if standard output is a tty, and colourise only when it is.
.SH SEE ALSO
.BR grcat "(1)
.SH AUTHOR
Written by Radovan Garab\('ik <garabik @ kassiopeia.juls.savba.sk>

76
grc.conf Normal file
View File

@ -0,0 +1,76 @@
# anything to do with irc
\b\w+\b.*irc.*
conf.irclog
# log file
\b\w+\b.*log\b
conf.log
# configure command
(^|[/\w\.]+/)?configure
conf.configure
# ping command
(^|[/\w\.]+/)ping6?\s
conf.ping
# traceroute command
(^|[/\w\.]+/)traceroute6?\s
conf.traceroute
# gcc command
(^|[/\w\.]+/)g?cc\s
conf.gcc
# make command
(^|[/\w\.]+/)g?make\s?
conf.gcc
# netstat command
(^|[/\w\.]+/)netstat\s?
conf.netstat
# diff command
(^|[/\w\.]+/)diff\s?
conf.diff
# wdiff command
(^|[/\w\.]+/)wdiff\s?
conf.wdiff
# last command
(^|[/\w\.]+/)last\s?
conf.log
# ldap tools
(^|[/\w\.]+/)ldap
conf.ldap
# cvs command
(^|[/\w\.]+/)cvs\s?
conf.cvs
# mount command
(^|[/\w\.]+/)mount\s?
conf.mount
# mtr command
(^|[/\w\.]+/)mtr\s?
conf.mtr
# ps command
(^|[/\w\.]+/)ps\s?
conf.ps
# dig command
(^|[/\w\.]+/)dig\s?
conf.dig
# ifconfig command
(^|[/\w\.]+/)ifconfig\s?
conf.ifconfig
# ls command
(^|[/\w\.]+/)ls\s?
conf.ls

57
grc.spec Normal file
View File

@ -0,0 +1,57 @@
# Note that this is NOT a relocatable package
%define ver 1.0.8
%define rel 1
%define prefix /usr
%define confdir /etc
Summary: Generic Colouriser
Name: grc
Version: %ver
Release: %rel
License: GPL
Group: Development/Tools
Source: grc-%{PACKAGE_VERSION}.tar.gz
URL: http://melkor.dnp.fmph.uniba.sk/~garabik/grc.html
BuildRoot: %{_tmppath}/grc-%{PACKAGE_VERSION}-root
Packager: Valerij Klein <vklein@console-colors.de>
BuildArchitectures: noarch
%description
Generic Colouriser is yet another colouriser for beautifying your logfiles
or output of commands.
Authors:
--------
Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk>
%prep
%setup
%install
rm -rf $RPM_BUILD_ROOT
install -d -m 755 $RPM_BUILD_ROOT%{prefix}/bin
install -m 755 grc $RPM_BUILD_ROOT%{prefix}/bin
install -m 755 grcat $RPM_BUILD_ROOT%{prefix}/bin
install -d -m 755 $RPM_BUILD_ROOT%{prefix}/share/grc
install -m 644 conf.* $RPM_BUILD_ROOT%{prefix}/share/grc
install -d -m 755 $RPM_BUILD_ROOT%{confdir}
install -m 644 grc.conf $RPM_BUILD_ROOT%{confdir}
install -d -m 755 $RPM_BUILD_ROOT%{_mandir}/man1
install -m 644 *.1 $RPM_BUILD_ROOT%{_mandir}/man1
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-, root, root)
%doc CHANGES CREDITS README TODO Regexp.txt
%{prefix}/bin/*
%{prefix}/share/grc/*
%doc %{_mandir}/man1/*
%config(noreplace) /etc/grc.conf
%changelog
* Fri Sep 01 2006 Valerij Klein <vklein@console-colors.de> 1.0.7-1
- Minor changes in SPEC

52
grc.spec.old Normal file
View File

@ -0,0 +1,52 @@
# Note that this is NOT a relocatable package
%define ver 1.0
%define rel 1
%define prefix /usr
%define confdir /etc
Summary: Generic Colouriser
Name: grc
Version: %ver
Release: %rel
Copyright: GPL
Group: Console/Utilities
Source: grc_%{PACKAGE_VERSION}.tar.gz
URL: http://melkor.dnp.fmph.uniba.sk/~garabik/grc.html
BuildRoot: %{_tmppath}/grc-%{PACKAGE_VERSION}-root
Packager: Christian Zuckschwerdt <zany@triq.net>
%description
Generic Colouriser is yet another colouriser for beautifying your logfiles
or output of commands.
Authors:
--------
Radovan Garabik <garabik@melkor.dnp.fmph.uniba.sk>
%prep
%setup
%install
rm -rf $RPM_BUILD_ROOT
install -d -m 755 $RPM_BUILD_ROOT%{prefix}/bin
install -m 755 grc $RPM_BUILD_ROOT%{prefix}/bin
install -m 755 grcat $RPM_BUILD_ROOT%{prefix}/bin
install -d -m 755 $RPM_BUILD_ROOT%{prefix}/share/grc
install -m 644 conf.* $RPM_BUILD_ROOT%{prefix}/share/grc
install -d -m 755 $RPM_BUILD_ROOT%{confdir}
install -m 755 grc.conf $RPM_BUILD_ROOT%{confdir}
install -d -m 755 $RPM_BUILD_ROOT%{_mandir}/man1
install -m 644 *.1 $RPM_BUILD_ROOT%{_mandir}/man1
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-, root, root)
%doc CHANGES CREDITS README TODO Regexp.txt
%{prefix}/bin/*
%{prefix}/share/grc/*
%doc %{_mandir}/man1/*
%config /etc/*

219
grcat Executable file
View File

@ -0,0 +1,219 @@
#! /usr/bin/python
import sys, os, string, re, signal, errno
#some default definitions
colours = {
'none' : "",
'default' : "\033[0m",
'bold' : "\033[1m",
'underline' : "\033[4m",
'blink' : "\033[5m",
'reverse' : "\033[7m",
'concealed' : "\033[8m",
'black' : "\033[30m",
'red' : "\033[31m",
'green' : "\033[32m",
'yellow' : "\033[33m",
'blue' : "\033[34m",
'magenta' : "\033[35m",
'cyan' : "\033[36m",
'white' : "\033[37m",
'on_black' : "\033[40m",
'on_red' : "\033[41m",
'on_green' : "\033[42m",
'on_yellow' : "\033[43m",
'on_blue' : "\033[44m",
'on_magenta' : "\033[45m",
'on_cyan' : "\033[46m",
'on_white' : "\033[47m",
'beep' : "\007",
'previous' : "prev",
'unchanged' : "unchanged",
# non-standard attributes, supported by some terminals
'dark' : "\033[2m",
'italic' : "\033[3m",
'rapidblink' : "\033[6m",
'strikethrough': "\033[9m",
}
# ignore ctrl C - this is not ideal for standalone grcat, but
# enables propagating SIGINT to the other subprocess in grc
signal.signal(signal.SIGINT, signal.SIG_IGN)
def add2list(clist, m, patterncolour):
for group in range(0, len(m.groups()) +1):
if group < len(patterncolour):
clist.append((m.start(group), m.end(group), patterncolour[group]))
else:
clist.append((m.start(group), m.end(group), patterncolour[0]))
def get_colour(x):
if x in colours:
return colours[x]
elif len(x)>=2 and x[0]=='"' and x[-1]=='"':
return eval(x)
else:
raise ValueError('Bad colour specified: '+x)
home = []
conffile = None
if 'HOME' in os.environ:
home = [os.environ['HOME']+"/.grc/"]
conffilepath = [""] + home + ["/usr/local/share/grc/", "/usr/share/grc/"]
conffile_arg = sys.argv[1] # tentative conffile
for i in conffilepath:
if os.path.isfile(i+conffile_arg):
conffile = i+conffile_arg
break
if not conffile:
sys.stderr.write("config file [%s] not found\n" % sys.argv[1])
sys.exit(1)
regexplist = []
f = open(conffile, "r")
is_last = 0
split = str.split
lower = str.lower
letters = string.ascii_letters
while not is_last:
ll = {'count':"more"}
while 1:
l = f.readline()
if l == "":
is_last = 1
break
if l[0] == "#" or l[0] == '\012':
continue
if not l[0] in letters:
break
keyword, value = split(l[:-1], "=", 1)
keyword = lower(keyword)
if not keyword in ["regexp", "colours", "count", "command", "skip"]:
raise ValueError("Invalid keyword")
ll[keyword] = value
# Split string into one string per regex group
# e.g. split "brown bold, red" into "brown bold" and
# "red"
#colstrings = []
#for colgroup in split(ll['colours'], ','):
# colourlist = split(colgroup)
# c = ""
# for i in colourlist :
# c = c + colours[i]
# colstrings.append(c)
# do not try to understand the optimized form below :-)
if 'colours' in ll:
colstrings = list(
map(
lambda colgroup:
''.join(map(lambda x: get_colour(x), split(colgroup))),
split(ll['colours'], ',')
)
)
ll['colours'] = colstrings
cs = ll['count']
ll['regexp'] = re.compile(ll['regexp']).search
regexplist.append(ll)
prevcolour = colours['default']
prevcount = "more"
blockflag = 0
freadline = sys.stdin.readline
while 1:
line = freadline()
if line == "" :
break
line = line[:-1]
clist = []
skip = 0
for pattern in regexplist:
pos = 0
currcount = pattern['count']
while 1:
m = pattern['regexp'](line, pos)
if m:
if 'colours' in pattern:
if currcount == "block":
blockflag = 1
blockcolour = pattern['colours'][0]
currcount = "stop"
break
elif currcount == "unblock":
blockflag = 0
blockcolour = colours['default']
currcount = "stop"
add2list(clist, m, pattern['colours'])
if currcount == "previous":
currcount = prevcount
if currcount == "stop":
break
if currcount == "more":
prevcount = "more"
pos = m.end(0)
else:
prevcount = "once"
pos = len(line)
if 'command' in pattern:
os.system(pattern['command'])
if 'colours' not in pattern:
break
if 'skip' in pattern:
skip = pattern['skip'] in ("yes", "1", "true")
if 'colours' not in pattern:
break
else: break
if m and currcount == "stop":
prevcount = "stop"
break
if len(clist) == 0:
prevcolour = colours['default']
first_char = 0
last_char = 0
length_line = len(line)
if blockflag == 0:
cline = (length_line+1)*[colours['default']]
for i in clist:
# each position in the string has its own colour
if i[2] == "prev":
cline[i[0]:i[1]] = [colours['default']+prevcolour]*(i[1]-i[0])
elif i[2] != "unchanged":
cline[i[0]:i[1]] = [colours['default']+i[2]]*(i[1]-i[0])
if i[0] == 0:
first_char = 1
if i[2] != "prev":
prevcolour = i[2]
if i[1] == length_line:
last_char = 1
if first_char == 0 or last_char == 0:
prevcolour = colours['default']
else:
cline = (length_line+1)*[blockcolour]
nline = ""
clineprev = ""
if not skip:
for i in range(len(line)):
if cline[i] == clineprev:
nline = nline + line[i]
else:
nline = nline + cline[i] + line[i]
clineprev = cline[i]
nline = nline + colours['default']
try:
print(nline)
except IOError as e:
if e.errno == errno.EPIPE:
break
else:
raise

89
grcat.1 Normal file
View File

@ -0,0 +1,89 @@
.TH GRCAT 1
.SH NAME
grcat \- read from standard input, colourise it and write to standard
output
.SH SYNOPSIS
.B grcat
.I "configuration"
.SH DESCRIPTION
.I "configuration"
is a name of a configuration file. Directories
~/.grc/, /usr/local/share/grc/, /usr/share/grc/
are searched for the file (in this order).
If the file is not found, it is assumed to be an absolute path of a
configuration file located elsewhere.
Configuration file consists of entries, one per regexp, entries are
separated with lines with first character non-alphanumeric (except #).
Lines beginning with # or empty lines are ignored.
Each entry consists of several lines.
Each line has form:
.I keyword=value
where keyword is one of:
.BR regexp ",
.BR colours ",
.BR command ",
.BR skip ",
.BR count ".
Only
.BR regexp
is mandatory, but it does not have much sense by itself
unless you specify at least a
.BR colour
or
.BR command
keyword as well.
.I regexp
is the regular expression to match
.I colours
is the list of colours, separated by commas (you can specify only
one colour), each colour per one regexp group specified in regexp.
.I command
is command to be executed when regexp matches. Its output will
be mixed with normal stdout, use redirectors ( >/dev/null) if you want
to supress it.
.I skip
can be either
.BR yes ",
or
.BR no ",
if yes, the matched line will be skipped and not displayed in output.
Default is no.
.I count
is one of words:
.BR once ",
.BR more ",
or
.BR stop ".
.BR once
means that if the regexp is matched, its first occurrence is coloured
and the program will continue with other regexp's.
.BR more
means that if there are multiple matches of the regexp in one line,
all of them will be coloured.
.BR stop
means that the regexp will be coloured and program will move to the
next line (i.e. ignoring other regexp's)
Regular expressions are evaluated from top to bottom, this allows nested
and overlapped
expressions. (e.g. you colour everything inside parentheses with one
colour, and if a following expression matches the text inside parentheses,
it will be also coloured)
.SH OPTIONS
None so far.
.SH SEE ALSO
.BR grc "(1)
.SH AUTHOR
Written by Radovan Garab\('ik <garabik @ kassiopeia.juls.savba.sk>

0
install-stamp Normal file
View File

14
install.sh Executable file
View File

@ -0,0 +1,14 @@
#!/bin/sh
DESTDIR=$1
BINDIR=$DESTDIR/usr/bin
LIBDIR=$DESTDIR/usr/share/grc
MANDIR=$DESTDIR/usr/share/man/man1
CONFDIR=$DESTDIR/etc
mkdir -p $BINDIR || true
cp -fv grc grcat $BINDIR
mkdir -p $LIBDIR || true
cp -fv conf.* $LIBDIR
mkdir -p $CONFDIR || true
cp -fv grc.conf $CONFDIR

33
mrsmith/conf.dig Normal file
View File

@ -0,0 +1,33 @@
#comments
regexp=;\s\w*\s*\w*.*
colours=yellow
=======
#comments 2
regexp=;;\s\w*\s*\w*.*
colours=white
=======
#ipv6
regexp=(([0-9a-fA-F]{1,4})?\:\:?[0-9a-fA-F]{1,4})+
colours=green
=======
#time
regexp=\s[0-9]{1,6}\s
colours=red
=======
#type
regexp=\s(A|AAAA|NS|PTR|MX|CNAME|TXT|COA)(\s|$)
colours=cyan
=======
#in
regexp=\s(IN|CH)\s
colours=yellow
=======
#domain
regexp=@?([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}\.?
colours=magenta
=======
#ip address
regexp=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
colours=green
#=======

54
mrsmith/conf.ifconfig Normal file
View File

@ -0,0 +1,54 @@
# ip
regexp=\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b
colours=bold green
=======
# ipv6
regexp=(([0-9a-fA-F]{1,4})?\:\:?[0-9a-fA-F]{1,4})+
colours=bold green
=======
# hwaddr
regexp=([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])
colours=yellow
=======
# size
regexp=\d+(\.\d+)?\s((T|G|M|K)i)?B
colours=yellow
=======
# interface
regexp=(([0-9a-z]{3,8}\d)|lo):
colours=bold green
=======
#ip disc
regexp=(inet6?|netmask|broadcast)
colours=cyan
=======
#flags
regexp=(?<=[,<])[^,]*(?=[,>])
colours=blue
=======
# mtu
regexp=mtu\s\d+
colours=green
=======
# unspec
regexp=(unspec|UNSPEC)
colours=bold red
=======
#errors
regexp=errors\s\d*
colours=red
=======
regexp=dropped\s\d*
colours=white
=======
regexp=overruns\s\d*
colours=green
=======
regexp=frame\s\d*
colours=white
=======
regexp=carrier\s\d*
colours=cyan
=======
regexp=collisions\s\d*
colours=red

27
mrsmith/conf.mtr Normal file
View File

@ -0,0 +1,27 @@
#ip address
regexp=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
colours=green
=======
# % 0.0 - 10.9 % loss
regexp=[^\d][0-9]{1}.\d%
colours=green
=======
# % 11.0 - 30.9 % loss
regexp=[123]{1}[0-9]{1}.\d%
colours=yellow
=======
# % 30.0 - 80.9% loss
regexp=[3-8]{1}[0-9]{1}.\d%
colours=bold yellow
=======
# % 80.0 - 95.9% loss
regexp=[8-9]{1}[0-9]{1}.\d%
colours=red
=======
# unknow host
regexp=\?\?\?
colours=red
=======
# Packets/Pings
regexp=(Packets|Pings)
colours=bold green

80
mrsmith/conf.netstat Normal file
View File

@ -0,0 +1,80 @@
# hostname:service
regexp=(\S*):(\d{1,5}|\S*)\s
colours=yellow, bold green, bold yellow
=======
# ipx hostname
regexp=^IPX.*[\dABCDEF]+:[\dABCDEF]+
colours=green
=======
# protocols TCP
regexp=tcp6?
colours=bold blue
=======
# protocols UDP
regexp=udp6?
colours=bold cyan
=======
# protocols other
regexp=(^unix|^IPX|STREAM|DGRAM|SEQPACKET)
colours=bold green
=======
# status
regexp=FIN_WAIT.*
colours=red
=======
# status
regexp=SYN.*?
colours=bold red
=======
# status
regexp=LISTEN(ING)?
colours=bold blue
=======
# status
regexp=TIME_WAIT
colours=bold red
=======
# status
regexp=CLOS(E(_WAIT)?|ING)
colours=red
skip=yes
=======
# status
regexp=LAST_ACK
colours=red
=======
# status
regexp=ESTAB.*?\b|CONNECTED
colours=bold yellow
=======
# status
regexp=FREE
colours=bold green
=======
# status
regexp=DISCONNECTING
colours=red
=======
# status
regexp=CONNECTING
colours=green
=======
# status
regexp=UNKNOWN
colours=blink bold red
=======
# path
regexp=(\@)[\dabcdef]+
colours=green, bold green
=======
# timewait
regexp=timewait\s\((.*\))
colours=green, red
=======
# timewait off
regexp=off.*
colours=bold red
=======
# process name
regexp=\s(\d*)/(\S*)\s
colours=yellow,bold cyan, bold green

67
mrsmith/conf.ps Normal file
View File

@ -0,0 +1,67 @@
# CAPS LINE
regexp=^[A-Z\s%]*([A-Z]{3})[A-Z\s%]*$
colours=underline
=======
# /full/path
regexp=(\s|^)/[-\w\d.]+/[-\w\d./]+
colours=white
=======
# Capd Line
regexp=^([A-Z][-a-z0-9]+(\s+|$)){3,}$
colours=underline
=======
# VMSTAT
regexp=(\s|^)\d+([.,]\d+)?(?=[\s,]|$)
colours=bold green
=======
# n.n.n
regexp=(\s|^)\d+\.\d+\.\d+(?=[\s,]|$)
colours=bold cyan
=======
# text:
regexp=^([-a-z0-9]+):\s
colours=unchanged,yellow
=======
# -options
regexp=(?<=\s)-[\w\d]+(?=\s|$)
colours=yellow
=======
# --long-option=
regexp=(?<=\s)--[-\w\d]+[\w\d](?==|\s|$)(=?)
colours=cyan,white
=======
# [text]
regexp=\[[-\w\d:/]+\]
colours=cyan
=======
# root user
regexp=root|wheel(?=\s|$)
colours=red
=======
# pts
regexp=(\s|^)pts/\d+(?=[^\w\d]|$)
colours=bold yellow
=======
# tty
regexp=(\s|^)tty\d+(?=[^\w\d]|$)
colours=bold cyan
=======
# time
regexp=(\d*:)?\d*:\d{2}
colours=bold white
=======
# time 00:00:00
regexp=00:00:00
colours=bold black
======
# time 0:00
regexp=\s0:00\s
colours=bold black
======
# ?
regexp=\s\?\s
colours=red
=======
# Process state
regexp=\s([DRSTEXZ])([NLsl+<]*)\s
colours=cyan, bold blue