NAME
signify - Program to generate semi-random signatures
SYNOPSIS
signify [--fifo=$HOME/.signature] [--input=file] [--debug]
DESCRIPTION
Signify will take a signature description file ( ~/.signify or whatever
file is specified by the --input=<file> option ) and create a random
signature based on the information contained therein. This allows the
ability to do such things as pick a random quote for each message sent.
Signify, by default, will write the generated signature to standard
output from where it can be redirected to overwrite the .signature
file. Alternatively, Signify can pipe it’s output to a given ’fifo’.
Each read from that file will return a different signature.
To use the FIFO feature, delete the current "$HOME/.signature" file and
start Signify in the background like "signify --fifo=$HOME/.signature
&". With this running, try "cat $HOME/.signature" a few times. A
different signature will be returned each time. (Note: This feature
will probably work only on unix systems.)
The --debug switch causes Signify to generate messages on what it is
doing to stderr. This switch is only meant to be useful to the
program’s maintainers.
CONFIGURATION
The definition for the generated signatures is contained entirely
within the .signify file contained in the user’s home directory. Any
completely empty lines (lines with even a single space are considered
part of the signature data) and those lines starting with a hash
character (#) are completely ignored. Those lines starting with a
percent sign (%) are considered commands and affect the way Signify
behaves.
Perl Command Substitution
Signify can execute an arbitrary perl code fragment during the initial
reading of the configuration file. This can be used, for example, to
choose values or text depending on the environment in which Signify is
being run. To use this feature, simply enclose the desired perl code
in back-tics (i.e. ‘perl code‘). Whatever the perl code evaluates to
will be substituted in that spot. No further variable substitutions
are made on the resulting text. Signify is intelligent enough to
recognize two back-tics together (often used as a better looking
quotation mark) as not being a code fragment. Thus, writting something
like "‘‘Stop,’’ she said." will appear as expected. Note: The entire
code fragment must be contained on a single line of the input file.
Defining Variables
Signify will substitute variables within each line of the signature in
much the same way as the shell would. Any sequence of $WORD; will be
replaced by the value corresponding to the name "WORD". Case is
significant but the trailing semicolon may be omitted if the next
character is not a letter, digit, or underscore. By default, these
variables look up values inside the environment variables, but can also
be defined or redefined within the .signify file itself with a command
such as:
% $email=myid@mycompany.com
Everything after the equal sign (=) is considered part of the value.
Variables can be used in the definition of other variables. As a
special case, $$ will evaluate to a single dollar sign ($).
The special variable SIGWIDTH can be used to set the desired output
width of the generated signature. By default, this variable has the
value "79". There is also a BLANK variable you can place on a line to
create a totally empty line when the signature is output.
Including Other Files
You can tell Signify to read another file in place of the current line
with a command like:
% include $HOME/.signify-quotes
For convienence, you can use a tilde (~) instead of $HOME to read a
file relative to your home directory.
Creating Alternates
An unlimited number of "alternates" can be specified by using the "{",
"|", and "}" commands. When the signature is generated, only one of
all the possible alternates will be output. For example:
% {
This is the first possibility.
% |
This is the second possibility.
% |
This is the third (and last) possibility.
Note that alternatives can span multiple lines.
% }
Creating Columns
Signify will automatically create side-by-side columns with nice, even
spacing by using the "(", "|", and ")" commands. When output,
everything will be padded out with spaces to fit nicely on the line.
For example:
% (
This is the
first column.
% |
This is the second.
% |
This is the third
(and last) column.
% )
Nesting Sections
Alternates and columns can be nested to any depth, though this can
quickly become unwieldy and may not work exactly as expected,
especially with columns. As a general rule, only supply alignment
options (eg. "center", "right") at the most outside level to do any
text formatting. For example, if supplying multiple "alternates"
within a column, put the alignment options on the column and not on the
alternates.
Section Command Options
The "alternates" and "columns" commands can take options to alter how
they behave. The following is a list of supported options and what
they do, though not all have meaning for both types of section.
Multiple options can be specified by separating them with a comma (,).
bottom push the following lines of text to the bottom of a column
should it have fewer lines than the longest column. This option
has no meaning to "alternates" sections.
center adjust the following lines to be centered on the page or in the
column. When used in an "alternates" section, an additional
"=<number>" can be used to specify what column to center around
instead of the middle of the page.
exec treat the following lines not as text to be included in the
column or alternate, but as commands to be executed by the
shell. For each command executed, if its return status is 0
then the output it produced is included at that point, otherwise
the output is discarded. Any included text is then aligned,
etc. as usual. This command is most useful for inserting random
quotes generated by programs such as fortune(6).
left adjust the following lines so they sit at the left margin. This
is the default horizontal alignment and most closely reflects
how the lines are entered into the .signify file itself. Note
that pad spaces will still be placed on both sides of a column
with this type of alignment unless the minwidth option is also
specified.
minwidth
do not pad the left and right sides of this column when placing
next to other columns. This is useful for building column
separator lines and the like that are not really part of the
content. This option has no meaning to "alternates" sections.
repeat output the following lines multiple times to fill all lines in
the column. This is useful for building column separator lines
and the like that are just a repeated sequence. A multi-line
sequence can be specified and only those lines necessary to fill
the column will be output. The entire sequence will be output
in its entirety at least once, however. This option has no
meaning to "alternates" sections.
right adjust the following lines so they sit at the right margin.
Note that pad spaces will still be placed on both sides of a
column with this type of alignment unless the minwidth option is
also specified.
top push the following lines of text to the top of a column should
it have fewer lines than the longest column. This is the
default action if no vertical centering is specified. This
option has no meaning to "alternates" sections.
vcenter
push the following lines of text in the vertical center of a
column should it have fewer lines than the longest column. This
option has no meaning to "alternates" sections.
weight=<number>
change the likelihood a given alternate will be chosen. The
chance of any specific alternate being chosen is the given
<number> divided by the total of all weights. If not specified,
the weight defaults to 1.0. Decimal numbers and numbers less
that 1.0 are allowed. This option has no meaning to "columns"
sections.
THE COST OF FREE SOFTWARE
Let’s face it: Somebody has to pay for all software that gets written.
Whether it is the time donated by the programmer or the salary donated
by the company, everything has its cost. Signify has been made
available to the general public in the hope that it will be useful and
thus help raise the visibility of the people that sponsored its
creation. In this way, the cost of creating Signify is offset by the
publicity gained. If you use this program and would like to further
the development of such software, it is asked (but by no means
required) that you put something like the following in the quotes
section of your .signify file.
% | center, weight=0.1
Generated by $PROGRAM. For this and more, visit $WEBSITE
(for single-line quote) or (for multi-line in a column)
% | weight=0.1
This signature was automatically generated with
$PROGRAM. For this and other cool products,
check out $WEBSITE
These are weighted very low (though you are more than welcome to
increase these weightings :-) and will thus show up in your signature
only occasionally. The variables are defined internal to Signify and
provide the program name (including version number) and the web site
where it can be found. We thank you for your support!
BUGS
Please report any bugs to: bcwhite@pobox.com
AUTHOR
Signify was written and documented by Brian White <bcwhite@pobox.com>
on August 24th, 1996.
COPYRIGHT
Signify has been placed in the public domain, the only true "free". It
would be apprecated if copies of any improvements or bug-fixes would be
sent to the author in order to be incorporated into the main upstream
code and propogated to all users of this software.