More 156_WorldName____________(Read)_(Active: n)_(Log)_(Mail)_(Over)_12:34
The status line is defined as a list of fields. A status field is defined as follows:
/eval
/set
status_fields=%status_field_defaults
".
Except for restoring the default value, you should usually not set
status_fields
directly, but use the following commands instead.
/clock off
/status_rm @clock
").
/clock on
/clock [format]
/clock %I:%M
/status_rm name
/status_rm @mail
/status_add [options] name[:width[:attributes]]
/status_add -A@world hp:4
/status_edit name[:width[:attributes]]
/set status_int_log=nlog() ? "L" : ""
/status_edit @log:1
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
Also, the entire status line will be updated whenever the screen is redrawn, any of the /status_{add,rm,edit} commands are called, or the status_fields variable is modified.
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, 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. 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