1 # SPDX-License-Identifier: GPL-3.0-only
5 [supercommand tfortune]
14 synopsis = [global-options...] [--] [<subcommand> [subcommand-options...]]
16 summary = print help and exit
18 [option detailed-help]
19 summary = print help, including all details, and exit
21 summary = print version and exit
24 summary = control amount of logging
26 arg_info = required_arg
30 LSGLL_DEBUG = "debug",
32 LSGLL_NOTICE = "notice",
33 LSGLL_WARNING = "warning",
34 LSGLL_ERROR = "error",
40 Log only messages with severity greater or equal than the given
41 value. Possible values:
43 debug: Produces really noisy output.
44 info: Still noisy, but won't fill up the disk quickly.
45 notice: Indicates normal, but significant event.
46 warning: Unexpected events that can be handled.
47 error: Unhandled error condition.
48 crit: System might be unreliable.
49 emerg: Last message before exit.
52 summary = where to look for input files
54 arg_info = required_arg
57 default_val = "~/.tfortune"
59 This is used to locate epigrams and named tag expressions.
60 If any filename argument does not start with a slash, the
61 filename is interpreted as relative to this base directory.
63 Epigrams are expected in the "epigrams" subdirectory of the base
64 directory while tag expressions are expected to be stored below
69 purpose = perform bash command line completion
70 non-opts-name = arg...
72 This subcommand is executed from the bash completer for tfortune. The
73 completer sets the non-option arguments for the subcommand to the
74 words of the current command line. It obtains these words from the
75 elements of the special COMP_WORDS array which is maintained by bash.
77 The compgen subcommand writes all possible completions to stdout. The
78 completer reads in the completions and builds the COMPREPLY array
79 containing the matching entries. Bash examines the elements of this
80 array and completes the command line if there is a single matching
81 completion, or prints out the list of completions in case of ambiguity.
84 [option current-word-index]
86 summary = index of the current word in the command line
88 arg_info = required_arg
91 An index into the argument vector of the word containing the current
92 cursor position. See the description of the $CWORD special variable
96 [subcommand completer]
97 purpose = print the bash completer to stdout
99 The output of this command is designed to be re-used as input for bash.
100 Specifically, bash completion for tfortune can be activated by adding
101 the following to .bashrc: eval "$(tfortune completer)".
104 summary = also add an alias and a completer for it
106 arg_info = required_arg
110 Specify this to define a bash alias for tfortune along with the
111 completer. Unlike the regular tfortune program, the alias will
112 contain the double dash argument which separates the subcommand and
113 its options from the options to tfortune itself.
117 purpose = edit epigrams
118 non-opts-name = basename...
120 Opens the named epigram file an interactive editor. The executable
121 of the editor is determined as follows: First the contents of the
122 environment variable TFORTUNE_EDITOR is examined. If this variable
123 is empty or unset, EDITOR is tried. If EDITOR is also unset, vi
126 The given basename is interpreted as described in the help text of the
127 --basedir option above. If --basedir is not given and the "epigrams"
128 directory does not exist, it is created.
132 purpose = edit tag expressions
133 non-opts-name = basename...
135 Opens the named tag expression file an interactive editor. The editor
136 to execute is determined in the same way as for the "ede" subcommand.
137 Also, a non-existing "expressions" subdirectory is handled in the same
141 purpose = list available subcommands or print command-specific help
142 non-opts-name = [command]
144 Without any arguments, help prints the list of available commands. When
145 called with a command name argument, it prints the help text of the
150 summary = show the long help text
152 If the optional argument is supplied, the long help text contains the
153 synopsis, the purpose and the description of the specified command,
154 followed by the option list including summary and help text of each
155 option. Without --long, the short help is shown instead. This omits
156 the description of the command and the option help.
158 If no command is supplied but --long is given, the list contains the
159 purpose of each command.
163 purpose = list epigram files
165 Print the list of all epigram files.
169 summary = long listing
171 This is similar to the long output of the standard ls(1) command.
177 This lists all tags contained in any of the given input files.
179 non-opts-name = <file>...
182 summary = long listing
184 Also show how many times this tag appears.
186 [option sort-by-count]
188 summary = sort by occurrence count rather than alphabetically.
191 summary = reverse sort order
194 purpose = list tag expressions
196 Print the list of all named tag expressions.
200 summary = long listing
202 This is similar to the long output of the standard ls(1) command.
205 purpose = print epigram(s)
207 Unless --all is given, this picks an epigram by random from the
208 given file(s) which is admissible with respect to the given named
209 tag expression. If no file is given, all files are taken into account.
211 non-opts-name = [file...]
214 summary = name of the tag expression
215 arg_info = required_arg
218 default_val = /dev/null
220 Use the tag expression stored in the given file to define the
221 admissible epigrams. The special string "-" means to read the tag
222 expression from stdin. The default value corresponds to the empty
223 tag expression for which all epigrams are admissible.
227 summary = print all admissible epigrams, not just a random one.
230 summary = print also the tags of the selected epigram
232 purpose = show statistics
234 This prints several counts and averages about the epigrams, tags and
239 summary = include statistics about hash table utilization
241 [section Input file format]
242 Input files may contain arbitrary many epigrams. The end of each
243 epigram must be marked with a "tag" line. The tag line consists of
244 four dashes, a space character, and a comma separated list of tags.
245 Tags may span multiple words, but no comma is allowed. The following
246 is an example input file for tfortune. It contains a single epigram
251 Anyone who attempts to generate random numbers by deterministic means
252 is, of course, living in a state of sin. -- John von Neumann
258 [section Tag Expressions]
259 Tag expressions are based on a context-free grammar in which the
260 following keywords are defined:
265 if the epigram contains a tag named
271 evaluates to the number of bytes of the epigram.
274 evaluates to contents of the epigram. This is useful for pattern
278 The grammar admits the following operators and relations:
283 logical operators for
293 arithmetic operators for addition, negation or subtraction (unary
294 or binary minus), multiplication and division. Arithmetic is always
295 performed on 64 bit signed integers.
304 less than, greater than, less or equal than, greater or equal than,
305 equal to, not equal to, regular expression match.
306 Regular expression patterns are of the form
307 .IR /pattern/[flags] .
308 That is, the pattern is delimited by slashes, and is followed by
309 zero or more characters, each specifying a flag according to the
318 Treat newline as an ordinary character
323 Note that only extended regular expression patterns are supported. See
324 regex(3) for details.
327 The above operators obey the usual associativity and precedence
328 rules. Parentheses can be used to change precedence.
332 is an expression in this grammar which evaluates to either
336 Epigrams for which the expression is
341 For example, the above epigram is admissible for the tag expression
345 (tag("math") || tag("physics")) && len < 1000 && text =~ /neumann/i
349 It is not admissible for
353 (tag("math") && tag("physics")) || len > 1000 || text =~ /neumann/
360 Print a random epigram:
368 Print a random short (less than 100 bytes) epigram:
372 echo 'len < 100' | tfortune -l debug -- print -x -
376 List tags, including usage counts, sort by count in descending order:
384 Activate bash completion and define the
390 eval "$(tfortune completer -a tf)"
399 Copyright (C) COPYRIGHT_YEAR() AUTHOR()
403 This is free software: you are free to change and redistribute it.
405 There is NO WARRANTY, to the extent permitted by law.
408 .UR PACKAGE_HOMEPAGE()