history
Manipulate the history list
Syntax
history [ option ] [ arg ... ]
Description
The history command performs one of several
operations related to recently-executed commands recorded in a history
list. Each of these recorded commands is referred to as an
event. When specifying an event to the
history command, the following forms may be used:
- A number: if positive, it refers to the event with
that number (all events are numbered starting at 1). If the number
is negative, it selects an event relative to the current event
(-1 refers to the previous event, -2 to the one before that, and
so on).
- A string: selects the most recent event that matches the
string. An event is considered to match the string either if the
string is the same as the first characters of the event, or if the
string matches the event in the sense of the string match command.
The history command can take any of the following forms:
- history
- Same as history info,
described below.
- history add command [ exec ]
- Adds the command argument to the history list as a
new event. If exec is specified (or abbreviated)
then the command is also executed and its result is returned. If
exec isn't specified then an empty string is returned
as result.
- history change newValue [ event ]
- Replaces the value recorded for an event with
newValue. event specifies the event to replace,
and defaults to the current event (not event
-1). This command is intended for use in commands
that implement new forms of history substitution and wish to replace
the current event (which invokes the substitution) with the command
created through substitution. The return value is an empty string.
- history event [ event ]
- Returns the value of the event given by
event. Event defaults to -1.
This command causes history revision to occur: see below for details.
- history info [ count ]
- Returns a formatted string (intended for humans to read) giving
the event number and contents for each of the events in the history
list except the current event. If count is specified then
only the most recent count events are returned.
- history keep count
- This command may be used to change the size of the history list
to count events. Initially, 20 events are retained in the
history list. This command returns an empty string.
- history nextid
- Returns the number of the next event to be recorded in the
history list. It is useful for things like printing the event number
in command-line prompts.
- history redo [ event ]
- Re-executes the command indicated by event and
returns its result. Event defaults to -1.
This command results in history revision: see below for details.
- history substitute old new [ event ]
- Retrieves the command given by event
(-1 by default), replaces any occurrences of
old by new in the command (only simple character
equality is supported; no wild-cards), executes the resulting command,
and returns the result of that execution. This command results in
history revision: see below for details.
- history words selector [ event ]
- Retrieves from the command given by event (-1 by default)
the words given by selector, and returns those words in a string
separated by spaces. The selector argument has three forms.
If it is a single number then it selects the word given by that
number (0 for the command name, 1 for its first argument, and so on). If it consists of two numbers separated by a dash,
then it selects all the arguments between those two. Otherwise
selector is treated as a pattern; all words matching that
pattern (in the sense of string match) are returned. In
the numeric forms $ may be used
to select the last word of a command.
For example, suppose the most recent command in the history list is
format {%s is %d years old} Alice [expr $ageInMonths/12]
Below are some history commands and the results they would produce:
history words $ [expr $ageInMonths/12]
history words 1-2 {%s is %d years old} Alice
history words *a*o* {%s is %d years old} [expr $ageInMonths/12]
History words results in history revision: see below
for details.
History revision
The history options event, redo,
substitute, and words result in
history revision. When one of these options is invoked then
the current event is modified to eliminate the history command and
replace it with the result of the history command. For example,
suppose that the most recent command in the history list is
set a [expr $b+2]
and suppose that the next command invoked is one of the ones on the
left side of the table below. The command actually recorded in the
history event will be the corresponding one on the right side of the
table.
history redo set a [expr $b+2]
history s a b set b [expr $b+2]
set c [history w 2] set c [expr $b+2]
History revision is needed because event specifiers like
-1 are only valid at a particular time: once more
events have been added to the history list a different event specifier
would be needed. History revision occurs even when
history is invoked indirectly from the current event
(e.g. a user types a command that invokes a Tcl procedure that invokes
history): the top-level command whose execution
eventually resulted in a history command is replaced.
If you wish to invoke commands like history words
without history revision, you can use history event
to save the current history event and then use
history change to restore it later.