blob: 1e7e80898ae4e9d51a1a502ccee41a161b1092f4 [file] [log] [blame]
SYNOPSIS
#include <sys/driver_hooks.h>
set_driver_hook(H_MODIFY_COMMAND, value)
<value> being:
int|string <closure>(string cmd, object player)
int|string <name>(string cmd)
<mapping>
DESCRIPTION
Optional hook to modify commands (both entered or given by a
call to command()) before the parser sees them.
Hook setting can be any closure, the name of the function to
call in the object, or a mapping.
For interactives this hook is used only if the interactive
object has no command modifier already set by the efun
set_modify_command().
If the hook is a closure, it is called with the entered
command as first, and the command giving player as second
argument. Unbound lambda closures are bound to the command
giving player.
If the hook is a string, it is used as the name of an lfun
in the command giving player, which is called with the command
as argument.
If the hook is a mapping, it is queried with the given command
as index, and the data retrieved is used as new command
(defaults to 0 if no data is stored for a given command). If
an entry is a closure instead of a string, it is called as
int|string <closure>(string cmd, object player)
and the result from the call is used as 'the' command.
The result is treated equal in all three cases:
- If the result is a string, it is the new command to execute
instead of the given one. Note that it is not possible to
make several commands from one this way!
- If the result is a non-zero number, the given command is to
be ignored. In case of the closure/lfun setting this may
mean that the closure/lfun already executed it.
- If the result is 0, the originally given command is to be
used.
It is possible for the hook to change the command giver
(this_player()) for the execution of the command. This means that
even though the commands are execute for the original commandgiver,
this_player() will return the changed commandgiver.
HISTORY
SEE ALSO
hooks(C), command(H), modify_command_fname(H), notify_fail(H),
send_notify_fail(H)