Ginsu Manual

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.

Using Ginsu

Keys

These are the default keybindings. You may use the action name to rebind a key. See below for details.

Action NameDefault KeyDescription
Main Screens
show_help_screen<F1>, ?Show help screen
show_presence_status<F3>show presence status
show_puff_detailsdshow puff details
Puff Movement
next_puffj, <Down>Goto the next puff
previous_puffk, <Up>Goto the previous puff
first_puff<Home>Goto the first puff
last_puff<End>, GGoto the last puff
next_line<Enter>, <C-E>next line
previous_line<BackSpace>, <C-Y>previous line
next_page<C-F>, <PageDown>next page
previous_page<C-B>, <PageUp>previous page
forward_half_page<C-D>forward half page
backward_half_page<C-U>backward half page
Filter Manipulation
prompt_new_filterc, /prompt new filter
prompt_new_filter_twiddle~prompt new filter twiddle
pop_one_filterupop one filter
pop_all_filtersUpop all filters
invert_filter!invert filter
filter_current_threadt, Tfilter current thread
swap_filtersxswap filters
filter_current_authorafilter current author
Mark Manipulation
set_markmSet numbered mark to current filter stack
recall_mark[1-9]Recall numbered mark
recall_combine_markCRecall numbered mark and push onto filter stack
Composing Puffs
follow_upffollow up
new_puffpnew puff
reply_to_authorrreply to author
group_replyggroup reply
resend_puffRresend puff
Miscellaneous
modify_presence_stringNmodify presence string
reconnect_to_servers<C-r>reconnect to servers
edit_config_fileEedit config file
ask_quitqask quit
fast_quitQfast quit
redraw_screen<C-l>redraw screen

Options

ginsu [OPTIONS]...  [categories]...

Available Options
-v, --verboseincrease verbosity output to errorlog.
-V, --versionprint version information
-s, --sample-configprint sample configuration file to stdout
-m, --manprint all internal help screens to stdout
-e, --justargsonly subscribe to command line arguments
-Pdo not write to pufflog
--helpshow this help screen
--nopufflogdo not read or write pufflog
--errorlog <FILE>log errors to file
--dumpkey <KEYFILE>print info for keyfile
--checkconfigcheck and print out configuration

Filters

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. If the text following the colon begins with a letter, the colon may be omitted.

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
~b:<regex>regex match against message body
<regex>synonym for ~b:<regex>

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

The Filter Stack

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.

Keybindings

See online help via '?' or F1.

Environment Variables

BROWSER
which web browser to use in the default application hooks.
EDITOR
used if $VISUAL is not set.
GALE_CONF
name of alternate Gale configuration file to read. This does not change the name of the ginsu specific configuration file.
GALE_DIR
alternate location for user's gale directory. ~/.gale/ by default.
VISUAL
editor to use for composing puffs.

If any of these exist in the environment prefixed with GINSU_, they are preferred over the bare versions.

Configuration Options

Standard Gale Options Honored by Ginsu

GALE_DOMAIN
The current gale domain.
GALE_ID
Your gale id. default is $LOGNAME@$GALE_DOMAIN
GALE_NAME
Your real name used in puffs sent.
GALE_PRESENCE
default presence string to send out.
GALE_PROXY
This can be used to override which gale server to connect to.
GALE_SUBSCRIBE
List of categories to subscribe to. The default is some common public categories and your private address.

see also: http://gale.org/users/vars

Ginsu Specific Options

BEEP
beep on incoming puffs which match this filter.
BROWSER
set the web browser. This overrides the environment. This is only used by the default 'apphook' declarations. see below.
CHARSET
character set to assume files are in. This will become obsolete at some point.
DISABLE_SIGWINCH
do not install sigwinch handler. ignore if you don't know what this means.
EDITOR_NEWPUFF_OPTION
options passed to editor when beginning a new puff.
EDITOR_OPTION
options passed to editor when replying to a puff.
MARK_[1-9]
these should be set to filters which are activated by the corresponding number key.
NO_PRESENCE_NOTIFY
disable presence notifications.
ON_INCOMING_PUFF
macro to run when new puff is received.
ON_STARTUP
on startup, run this macro.
PRESERVED_KEYWORDS
when replying to a puff, keep these keywords intact.
PUFFLOG_SIZE
number of puffs to store in the pufflog.
TRIM_BLANKLINES
before sending a puff, get rid of leading and trailing blank lines.
VISUAL
set the editor. This overrides the environment.

Changing Keybindings

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

Changing Application Hooks

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'''

Category Aliases

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

Files ginsu uses

$GALE_DIR is ~/.gale/ by default.

$GALE_DIR/ginsu.config
main configuration file.
$GALE_DIR/ginsu.n.pufflog
pufflog version n
$GALE_DIR/ginsu.errorlog
main configuration file.
$GALE_DIR/auth/private/*
This is where ginsu looks for private keys for decoding incoming encrypted puffs.

Other ginsu resources

There is also a public arch repository for ginsu at http://repetae.net/john/arch/2004/