<!--}}}-->
-<sect>Variable Expansion <!--{{{-->
+<sect>Expansion within variables <!--{{{-->
+
+ <p>Besides just assign static content to variables, there's plenty of
+ ways of adding external and more or less dynamic content.
<sect1>Commands' Output
<p>Mutt-ng flexibly allows users to define their own variables. To
avoid conflicts with the standard set and to prevent misleading
- error messages, there's a reserved namespace for them. All
+ error messages, there's a reserved namespace for them: all
user-defined variables must be prefixed with <tt/user_/ and can be
used just like any ordinary configuration or environment
variable.
- <p>For example, to view the manual, users can either define three
+ <p>For example, to view the manual, users can either define two
macros like the following
<tscreen><verb>
macro generic <F1> "!less -r /path/to/manual" "Show manual"
macro pager <F1> "!less -r /path/to/manual" "Show manual"
-macro index <F1> "!less -r /path/to/manual" "Show manual"
</verb></tscreen>
<p>for <tt/generic/, <tt/pager/ and <tt/index/. The alternative is to
define a custom variable like so:
<tscreen><verb>
-set user_manualcmd = '!less -r /path/to_manual"
+set user_manualcmd = "!less -r /path/to_manual"
macro generic <F1> "$user_manualcmd<enter>" "Show manual"
macro pager <F1> "$user_manualcmd<enter>" "Show manual"
macro index <F1> "$user_manualcmd<enter>" "Show manual"
+</verb></tscreen>
+
+ <p>to re-use the command sequence as in:
+
+<tscreen><verb>
+macro index <F2> "$user_manualcmd | grep '\^[ ]\\+~. '" "Show Patterns"
</verb></tscreen>
<p>Using this feature, arbitrary sequences can be defined once and
include to save a variable's value at the beginning of macro
sequence and restore it at end.
+ <p>When the variable is first defined, the first value it gets
+ assigned is also the initial value to which it can be reset using
+ the <tt/reset/ command.
+
+ <p>The complete removal is done via the <tt/unset/ keyword.
+
+ <p>After the following sequence:
+
+<tscreen><verb>
+set user_foo = 42
+set user_foo = 666
+</verb></tscreen>
+
+ <p>the variable <tt>$user_foo</tt> has a current value of 666 and an
+ initial of 42. The query
+
+<tscreen><verb>
+set ?user_foo
+</verb></tscreen>
+
+ <p>will show 666. After doing the reset via
+
+<tscreen><verb>
+reset user_foo
+</verb></tscreen>
+
+ <p>a following query will give 42 as the result. After unsetting it
+ via
+
+<tscreen><verb>
+unset user_foo
+</verb></tscreen>
+
+ <p>any query or operation (except the noted expansion within other
+ statements) will lead to an error message.
+
+ <sect1>Pre-Defined Variables
+
+ <p>In order to allow users to share one setup over a number of
+ different machines without having to change its contents, there's a
+ number of pre-defined variables. These are prefixed with
+ <tt/muttng_/ and are read-only, i.e. they cannot be set, unset or
+ reset. The reference chapter lists all available variables.
+
+ <p><em> Please consult the local copy of your manual for their
+ values as they may differ from different manual sources.</em> Where
+ the manual is installed in can be queried (already using such a
+ variable) by running:
+
+<tscreen><verb>
+muttng -Q muttng_docdir
+</verb></tscreen>
+
+ <p>To extend the example for viewing the manual via self-defined
+ variables, it can be made more readable and more portable by
+ changing the real path in:
+
+<tscreen><verb>
+set user_manualcmd = '!less -r /path/to_manual'
+</verb></tscreen>
+
+ <p>to:
+
+<tscreen><verb>
+set user_manualcmd = "!less -r $muttng_docdir/manual.txt"
+</verb></tscreen>
+
+ <p>which works everywhere if a manual is installed.
+
+ <p><em>Note: this is a draft feature and maybe subject to change in
+ the near future.</em>
+
<sect1>Type Conversions
<p>A note about variable's types during conversion: internally
<tscreen><verb>
set read_inc = 100
set folder = $read_inc
-set $read_inc = $folder
+set read_inc = $folder
set user_magic_number = 42
set folder = $user_magic_number
</verb></tscreen>
and the <tt>˜n</tt> pattern:
<verb>
-color black yellow "~n 10-"
-color red yellow "~n 100-"</verb>
+color index black yellow "~n 10-"
+color index red yellow "~n 100-"</verb>
<p>The rules above mark all messages with a score between 10 and 99
with black and yellow, and messages with a score greater or equal