bidiv - bidirectional text filter
bidiv [ -plj ] [ -w width ] [file...]
bidiv is a filter, or viewer, for birectional text stored in logical-
order. It converts such text into visual-order text which can be viewed
on terminals that do not handle bidirectionality. The output visual-
order text is formatted assuming a fixed number of characters per line
(automatically determined or given with the -w parameter).
bidiv is oriented towards Hebrew, and assumes the input to be a Hebrew
and ASCII text encoded in one of the two common logical-order
encodings: ISO-8859-8-i or UTF-8. Actually, bidiv guesses the encoding
of its input at a character by character basis, so the input might be a
mix of ISO-8859-8-i and Hebrew UTF-8. bidiv’s output is visual-order
text, in either the ISO-8859-8 or UTF-8 encoding, depending on your
bidiv reads each file in sequence, converts it into visual order and
writes it on the standard output. Thus:
$ bidiv file
prints file on your terminal (assuming it has the appropriate fonts,
but no bidirectionality support), and:
$ bidiv file1 file2 | less
concatenates file1 and file2, and shows the results using the pager
If no input file is given, bidiv reads from the standard input file.
For more ideas on how to use bidiv, see the EXAMPLES section below.
-p Paragraph-based direction (default): When formatting a
bidirectional output line, bidiv needs to be aware of that
line’s base direction. A line whose base direction is RTL (right
to left) gets right-justified and its first element appears on
the right. Otherwise, the line is left-justified and its first
element appears on the left.
The -p option tells bidiv to choose a base direction per
paragraph, where a paragraph is delimited by an empty line. This
is bidiv’s default behavior, and usually gives the expected
results on most texts and emails.
The direction of the entire paragraph is chosen according to the
first strongly-directioned character (i.e., an alphabetic
character) appearing in the paragraph. Currently, if the first
output line of a paragraph has no directional characters (e.g.,
a line of minus signs before an email signature, or a line
containing only numbers) that line is output with the same
direction of the previous paragraph, but it does not determine
the direction of the rest of the paragraph. If the first line of
the first paragraph does not have a direction, the RTL direction
is arbitrarily chosen.
-l Line-based direction: This option choose an alternative method
of choosing each output line’s base direction. When this option
is enabled, the base direction of each output line is determined
on its own (again, according to the first character on the line
with a strong direction). This method may give wrong results in
the case where a line starts with a word of the opposite
direction. This case is rare, but does happen under random line-
splitting circumstances, or when the text is defining words of a
-j Do not justify: By default, RTL lines are right-justified, i.e.,
they are padded with spaces on the left when shorter than the
required line width (see the -w option). The -j option tells
bidiv not to preform this justifications, and leave short lines
bidiv formats its output for lines of the given width. Lines are
split when longer than this width, and RTL lines are right-
justfied to fill that width unless the -j option is given.
When the -w option is not given, bidiv uses the value of the
COLUMNS variable, which is usually automatically defined by the
user’s shell. When that both the -w option and the COLUMNS
variable are missing, the default of 80 columns is used.
The following operand is supported:
file A path name of an input file. If no file is specified, the
standard input is used.
1. bidiv README | less
2. man something | bidiv | less
(or groff -man -Tlatin1 something.1 |sed ’s/.^H\(.\)/\1/g’ |../bidiv
3. set "bidiv" as a filter for your mail program (mutt, pine, etc.) for
viewing mail with the ISO 8859-8-i character set, and Hebrew UTF-8
COLUMNS see -w option.
The following exit values are returned:
0 All input files were output successfully.
>0 An error occurred.
Written by Nadav Har’El, http://nadav.harel.org.il.
Please send bug reports and comments to email@example.com.
The latest version of this software can be found in