The -P option allows you to tailor the prompt to your preference.
The string given to the -P option replaces the specified prompt
string. Certain characters in the string are interpreted
specially. The prompt mechanism is rather complicated to provide
flexibility, but the ordinary user need not understand the
details of constructing personalized prompt strings.
A percent sign followed by a single character is expanded
according to what the following character is:
%bX Replaced by the byte offset into the current input file.
The b is followed by a single character (shown as X above)
which specifies the line whose byte offset is to be used.
If the character is a "t", the byte offset of the top line
in the display is used, an "m" means use the middle line,
a "b" means use the bottom line, a "B" means use the line
just after the bottom line, and a "j" means use the
"target" line, as specified by the -j option.
%B Replaced by the size of the current input file.
%c Replaced by the column number of the text appearing in the
first column of the screen.
%dX Replaced by the page number of a line in the input file.
The line to be used is determined by the X, as with the %b
option.
%D Replaced by the number of pages in the input file, or
equivalently, the page number of the last line in the
input file.
%E Replaced by the name of the editor (from the VISUAL
environment variable, or the EDITOR environment variable
if VISUAL is not defined). See the discussion of the
LESSEDIT feature below.
%f Replaced by the name of the current input file.
%F Replaced by the last component of the name of the current
input file.
%g Replaced by the shell-escaped name of the current input
file. This is useful when the expanded string will be
used in a shell command, such as in LESSEDIT.
%i Replaced by the index of the current file in the list of
input files.
%lX Replaced by the line number of a line in the input file.
The line to be used is determined by the X, as with the %b
option.
%L Replaced by the line number of the last line in the input
file.
%m Replaced by the total number of input files.
%pX Replaced by the percent into the current input file, based
on byte offsets. The line used is determined by the X as
with the %b option.
%PX Replaced by the percent into the current input file, based
on line numbers. The line used is determined by the X as
with the %b option.
%s Same as %B.
%t Causes any trailing spaces to be removed. Usually used at
the end of the string, but may appear anywhere.
%T Normally expands to the word "file". However if viewing
files via a tags list using the -t option, it expands to
the word "tag".
%x Replaced by the name of the next input file in the list.
If any item is unknown (for example, the file size if input is a
pipe), a question mark is printed instead.
The format of the prompt string can be changed depending on
certain conditions. A question mark followed by a single
character acts like an "IF": depending on the following
character, a condition is evaluated. If the condition is true,
any characters following the question mark and condition
character, up to a period, are included in the prompt. If the
condition is false, such characters are not included. A colon
appearing between the question mark and the period can be used to
establish an "ELSE": any characters between the colon and the
period are included in the string if and only if the IF condition
is false. Condition characters (which follow a question mark)
may be:
?a True if any characters have been included in the prompt so
far.
?bX True if the byte offset of the specified line is known.
?B True if the size of current input file is known.
?c True if the text is horizontally shifted (%c is not zero).
?dX True if the page number of the specified line is known.
?e True if at end-of-file.
?f True if there is an input filename (that is, if input is
not a pipe).
?lX True if the line number of the specified line is known.
?L True if the line number of the last line in the file is
known.
?m True if there is more than one input file.
?n True if this is the first prompt in a new input file.
?pX True if the percent into the current input file, based on
byte offsets, of the specified line is known.
?PX True if the percent into the current input file, based on
line numbers, of the specified line is known.
?s Same as "?B".
?x True if there is a next input file (that is, if the
current input file is not the last one).
Any characters other than the special ones (question mark, colon,
period, percent, and backslash) become literally part of the
prompt. Any of the special characters may be included in the
prompt literally by preceding it with a backslash.
Some examples:
?f%f:Standard input.
This prompt prints the filename, if known; otherwise the string
"Standard input".
?f%f .?ltLine %lt:?pt%pt\%:?btByte %bt:-...
This prompt would print the filename, if known. The filename is
followed by the line number, if known, otherwise the percent if
known, otherwise the byte offset if known. Otherwise, a dash is
printed. Notice how each question mark has a matching period,
and how the % after the %pt is included literally by escaping it
with a backslash.
?n?f%f .?m(%T %i of %m) ..?e(END) ?x- Next\: %x..%t";
This prints the filename if this is the first prompt in a file,
followed by the "file N of N" message if there is more than one
input file. Then, if we are at end-of-file, the string "(END)"
is printed followed by the name of the next file, if there is
one. Finally, any trailing spaces are truncated. This is the
default prompt. For reference, here are the defaults for the
other two prompts (-m and -M respectively). Each is broken into
two lines here for readability only.
?n?f%f .?m(%T %i of %m) ..?e(END) ?x- Next\: %x.:
?pB%pB\%:byte %bB?s/%s...%t
?f%f .?n?m(%T %i of %m) ..?ltlines %lt-%lb?L/%L. :
byte %bB?s/%s. .?e(END) ?x- Next\: %x.:?pB%pB\%..%t
And here is the default message produced by the = command:
?f%f .?m(%T %i of %m) .?ltlines %lt-%lb?L/%L. .
byte %bB?s/%s. ?e(END) :?pB%pB\%..%t
The prompt expansion features are also used for another purpose:
if an environment variable LESSEDIT is defined, it is used as the
command to be executed when the v command is invoked. The
LESSEDIT string is expanded in the same way as the prompt
strings. The default value for LESSEDIT is:
%E ?lm+%lm. %g
Note that this expands to the editor name, followed by a + and
the line number, followed by the shell-escaped file name. If
your editor does not accept the "+linenumber" syntax, or has
other differences in invocation syntax, the LESSEDIT variable can
be changed to modify this default.