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.