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.
These are the default keybindings. You may use the action name to rebind a key. See below for details.
Action Name | Default Key | Description |
Main Screens | ||
show_help_screen | <F1>, ? | Show help screen |
show_presence_status | <F3> | show presence status |
show_puff_details | d | show puff details |
show_status_screen | S | show status screen |
Puff Movement | ||
next_puff | j, <Down> | Goto the next puff |
previous_puff | k, <Up> | Goto the previous puff |
first_puff | <Home> | Goto the first puff |
last_puff | <End>, G | Goto the last puff |
next_line | <Enter>, <C-E> | Scroll one line down |
previous_line | <BackSpace>, <C-Y> | Scroll one line up |
next_page | <C-F>, <PageDown> | Scroll one page down |
previous_page | <C-B>, <PageUp> | Scroll one page up |
forward_half_page | <C-D> | Scroll a half page down |
backward_half_page | <C-U> | Scroll a half page up |
Filter Manipulation | ||
prompt_new_filter | c | prompt new filter |
prompt_new_filter_slash | / | prompt new filter slash |
prompt_new_filter_twiddle | ~ | prompt new filter twiddle |
pop_one_filter | u | pop one filter |
pop_all_filters | U | pop all filters |
invert_filter | ! | invert filter |
filter_current_thread | t, T | filter current thread |
swap_filters | x | swap filters |
filter_current_author | a | filter current author |
Puff Body Filtering | ||
toggle_rot13 | <C-o> | toggle Rot13 filter |
Mark/Workspace Manipulation | ||
set_mark | m | save current position at a given mark. |
recall_mark | <SingleQuote> | goto position saved at mark |
set_filter_mark | M | save current filter stack at given mark. |
recall_filter_mark | <DoubleQuote> | Recall filter stack at mark |
recall_combine_mark | C | Recall filter stack at mark and combine it with the current filter stack. |
recall_workspace | [1-9] | Recall given numbered workspace and set it as current workspace, these follow marks [1-9] |
Composing Puffs | ||
new_puff | p | compose a new puff |
follow_up | f | follow up to the same category as the current puff |
reply_to_author | r | reply to the author of the current puff privatly |
group_reply | g | reply to the union of the sender and categories of the current puff |
resend_puff | R | resend puff |
Miscellaneous | ||
goto_match | v | visit link in current puff |
modify_presence_string | N | modify presence string |
reconnect_to_servers | <C-r> | reconnect to servers |
edit_config_file | E | Edit the configuration file and reload its settings |
ask_quit | q | quit ginsu |
fast_quit | Q | quit ginsu without asking first |
redraw_screen | <C-l> | redraw screen |
ginsu [OPTIONS]... [categories]...
Available Options | |
-v, --verbose | increase verbosity output to errorlog. |
-V, --version | print version information |
-s, --sample-config | print sample configuration file to stdout |
-m, --man | print all internal help screens to stdout |
-e, --justargs | only subscribe to command line arguments |
-P | do not write to pufflog |
--help | show this help screen |
--nopufflog | do not read or write pufflog |
--errorlog <FILE> | log errors to file |
--dumpkey <KEYFILE> | print info for keyfile |
--checkconfig | check and print out configuration |
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. Arbitrary text may be used in filters by quoting it with single quotes.
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> | search everything visible for regex |
?true | always succeed |
?false | always fail |
?signed | puff is signed |
?encrypted | puff is encrypted |
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.gale.ginsu) - puffs containing the word ginsu or directed to pub.comp.ginsu ( /'(?i)john +meacham' ) - puffs with my name in them (!~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.
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>
here are some examples:
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/