More 156_WorldName____________(Read)_(Active: n)_(Log)_(Mail)_(Over)_12:34
The status area may contain 1 or more rows; the number is determined by %status_height. The rows are numbered from the top starting at 0. Each row is defined as a list of fields. A status field is defined as follows:
/clock off
/status_rm @clock
").
/clock on
/clock [format]
/clock %I:%M
/status_defaults
/status_save name
/status_restore name
/status_rm [-rN] name
/status_rm @mail
/status_add [options] name[:width[:attributes]] ...
/status_add -A@world hp:4
/status_add -Aclock foo:4 :1 bar:4 :2 baz:4
/status_add -Aclock foo:4
/status_add -Afoo bar:4
/status_add -Abar -s2 baz:4
/status_edit [-rN] name[:width[:attributes]]
/set status_int_log=nlog() ? "L" : ""
/status_edit @log:1
For backward compatiblity, you can get and set the status fields for row 0 via the %status_fields variable, but doing so is deprecated.
The default list of status fields is:
@more:8:Br :1 @world :1 @read:6 :1 @active:11 :1 @log:5 :1 @mail:6 :1 insert:6 :1 kbnum:4 :1 @clock:5There are several types of fields:
Any variable may be monitored, but there is a fixed list of internal statuses. The internal statuses available are:
@more
@world
@read
@active
@log
@mail
@clock
A field's width determines how many columns it will take up on the screen. If the width of a string literal field field is omitted, it defaults to the length of the string literal. One other field width may be omitted or set to 0, which means that field will use whatever columns are unused by the other fields. Normally, fields are left-justified within the width, but a negative field width will right-justify the field within the absolute value of the width. A width of "-0" can be used to right-justify the variable-width field. If the formatted text is wider than the field width, it will be truncated to fit within the specified width. Fields may also be truncated if they would not fit on the screen.
The attributes explicily given
in the field definiton are combined with those in the corresponding
%status_attr_int_fieldname
(for internal state fields)
or %status_attr_var_varname
(for variable fields).
The combined attributes
are applied to the field text when it is displayed,
but not to the padding used to bring the field to the specified width.
The entire status line, including padding, is displayed with the
attributes given by
%status_attr,
which is none by default.
To bring fields up to their specified width, they are padded with %status_pad, which is "_" by default. By setting status_pad to " " and status_attr to "r", you can create a status line that looks more like the one in emacs or the irc client.
When a status field is updated, the text displayed for that field is
determined by evaluating the
expression contained in the
variable
status_int_name
(for internal state
@name
) or
status_var_name
(for variable name
).
Also, for variable
fields, if status_var_name
is not
set, the value of the variable
will be displayed directly. Changing a format variable will cause
the status line to update.
All this may sound rather complex, so an example might help. The default value of status_fields is:
@more:8:Br :1 @world :1 @read:6 :1 @active:11 :1 @log:5 :1 @mail:6 :1 insert:6 :1 kbnum:4 :1 @clock:5and the corresponding format variables are:
/set status_int_more \ moresize() == 0 ? "" : \ moresize() > 9999 ? "MuchMore" : \ pad("More", 4, moresize(), 4) /set status_int_world strcat( \ fg_world() !~ "" & !is_open(fg_world()) ? "!" : "", fg_world()) /set status_int_read nread() ? "(Read)" : "" /set status_int_active nactive() ? pad("(Active:",0,nactive(),2,")") : "" /set status_int_log nlog() ? "(Log)" : "" /set status_int_mail \ !nmail() ? "" : \ nmail()==1 ? "(Mail)" : \ pad("Mail", 0, nmail(), 2) /set status_var_insert insert ? "" : "(Over)" /set status_int_clock ftime(clock_format)
The first field is "@more:8:Br
". So, whenever the number of
unseen lines changes, TF looks for the
variable
status_int_more
, and evaluates the
expression it contains.
The result of the expression
is printed in the first 8 columns of the status line, with
attributes "Br" (bold and reverse).
The expression was carefully
written so that it will never be more than 8 characters, because it would be
confusing to generate something like "More:12345
" and then have
it truncated to "More:123
" because of the field width of 8.
Since the "@world
" field has no explicit width, its width
is determined dynamically.
The fields on its left are pushed to the left side of the screen,
the fields on its right are pushed to the right side of the screen, and
the "@world
" field uses whatever space remains in the middle.
Another example: Say your mud has a
prompt like
"H:42 M:17>
" that shows your hit points and mana,
and you want it displayed on the status line like
" 42, 17
", after the world name.
To do this, call
"/status_add -Aworld hp_mana:7
",
and define a prompt
hook:
/def -mregexp -h"PROMPT ^H:([^ ]*) M:([^ ]*)> $" hp_mana_hook = \ /set hp=%P1%; \ /set mana=%P2%; \ /set hp_mana=$[pad(hp, 3, ",", 0, mana, 3)]%; \ /test prompt({*})
See: visual