Ginsu is a client for the gale chat system. It is designed to be powerful and above all stable, as well as having a quick learning curve.
Filters are used throughout ginsu. A filter is an expression which selects puffs which match it.
Filters are built up from primitives via conjunctions, disjunctions and grouping, allowing complex filters to be created.
a ; b - semicolons are used to mean OR. this matches if a OR b matches a b - a space means AND. this matches if a AND b both match (a b) ; c - filters may be grouped with parenthesis !a - NOT. this matches if a does not match
primitive filters are regular expressions which are matched against the body of the puff, or a variety of special forms beginning with a ~ then a single character, then a colon, then the rest of the special form.
Special Forms | |
~a:<gale-id> | author of puff |
~c:<category> | category puff was sent too |
~k:<regex> | regex match against keywords |
~s:<regex> | regex match against senders real name |
Examples of Filters:
(~a:john@ugcs.caltech.edu) - all puffs by me (~c:pub.tv.buffy ~a:jtr@ofb.net) - puffs from jtr and to pub.tv.buffy ([gG]insu ; ~c:pub.comp.ginsu) - puffs containing the word ginsu or directed to pub.comp.ginsu (!~k:^spoil) - no spoilers (~c:pub.tv.buffy !~c:pub.meow) - puffs to buffy which are not about cats
There is always a current filter stack, which is a set of filters that determines which puffs are currently visible. there are a variety of keystrokes to modify the filter stack. If non-empty, the current filter stack is displayed on the bottom line of the main screen.
See online help via '?' or F1.
If any of these exist in the environment prefixed with GINSU_, they are preferred over the bare versions.
see also: http://gale.org/users/vars
keys may be rebound with the 'bind' keyword in the configuration file. the syntax is
bind <key> <command> </pre> here are some examples: <pre> bind <C-r> reconnect_to_servers bind c prompt_new_filter bind v goto_match
When puff bodies match regular expressions, the user may choose to run arbitrary commands based on them. This can be used to follow web links in puffs for instance. The 'apphook' mechanism is fully configurable via using 'apphook' lines in your ginsu.config file.
The general form is:
apphook <name> <regular expression> <command to run> [string user sees in menu ("$0" by default)]in the command and menu string, $0 is replaced by the whole regex match and $1, $2, .. $9 are replaced by the substrings captured by parenthesis in the regular expression.
apphook WikiWord '([[:space:]]|^)(([[:upper:]][[:lower:]]+){2,})([[:space:]]|$)' '$BROWSER ''http://wiki.ofb.net/?$2''' '$2' apphook URL '(http|ftp)s?://(%[[:digit:]A-Fa-f][[:digit:]A-Fa-f]|[-_.!~*'';/?:@&=+$,[:alnum:]])+' '$BROWSER ''$0'''
Ginsu uses the same alias mechanism as 'gsend'. Aliases take the form of symbolic links in the aliases directory in the gale directory.
Here is an example of how to create new aliases.
mkdir ~/.gale/aliases # only if it does not already exist cd ~/.gale/aliases ln -s pub pub@ofb.net ln -s ugcs ugcs@ugcs.caltech.edu
$GALE_DIR is ~/.gale/ by default.
There is also a public arch repository for ginsu at http://repetae.net/john/arch/2004/