MFL sources are usual ASCII files and you may
edit them with any editor you like. However, the best choice for this
job (as well as for many others) is, without doubt, GNU Emacs. To ease
the work of editing script files, the mailfromd package
provides a special Emacs mode, called MFL mode.
The elisp source file providing this mode, mfl-mode.el, is installed automatically, provided that GNU Emacs is present on your machine. To enable the mode, add the following lines to your Emacs setup file (either system-wide site-start.el, or your personal one, ~/.emacs):
(autoload 'mfl-mode "mfl-mode")
(setq auto-mode-alist (append auto-mode-alist
'(("\\.mfl$" . mfl-mode))))
The first directive loads the MFL mode, and the second one tells Emacs to apply it to any file whose name ends in ‘.mfl’ suffix.
MFL mode provides automatic indentation and syntax highlighting for MFL sources. The default indentation setup is the same as the one used throughout this book:
loop keyword.
(see mfl-loop-statement-offset). Continuation statements within
loop header are offset 5 columns from the indentation of their
controlling keyword, either for or while
(see mfl-loop-continuation-offset).
The mode provides two special commands that help navigate through the complex filter scripts:
Move to the beginning of current function or handler definition.
Move to the end of current function or handler definition.
Here, current function or handler means the one within which your cursor currently stays.
You can use C-M-e repeatedly to walk through all function and handler definitions in your script files. Similarly, repeatedly pressing C-M-a will visit all the definitions in the opposite direction (from the last up to the very first one).
Another special command, C-c C-c, allows to verify the
syntax of your script file. This command runs mailfromd in
syntax check mode (see Testing Filter Scripts) and displays its
output in a secondary window, which allows to navigate through
eventual diagnostic messages and to jump to source locations
described by them.
All MFL mode settings are customizable. To change any of them, press M-x customize and visit ‘Environment/Unix/Mfl’ customization group. This group offers two subgroups: ‘Mfl Lint group’ and ‘Mfl Indentation group’.
‘Mfl Lint group’ controls invocation of mailfromd by C-c C-c. This group contains two variables:
The mailfromd to be invoked. By default, it is
‘mailfromd’. You will have to change it, if mailfromd
cannot be found using PATH environment variable, or if you wish
to pass it some special options. However, do not include
--lint or -I options in this variable. The
--lint option is given automatically, and include paths are
controlled by mfl-include-path variable (see below).
A list of directories to be appended to mailfromd include
search path (see include search path). By default it is empty.
‘Mfl Indentation group’ controls automatic indentation of MFL scripts. This group contains the following settings:
This variable sets the basic indentation increment. It is set to 2, by default, which corresponds to the following indentation style:
prog envfrom
do
if $f = ""
accept
else
...
fi
done
Indentation offset for case and when lines, relative to
the column of their controlling keyword. The default is 0, i.e.:
switch x do case 0: ... default: ... done
Indentation offset of returns and alias statements,
relative to the controlling func keyword. The default value is
2, which corresponds to:
func foo() alias bar returns string
Indentation increment for multi-line comments. The default value is 1, which makes:
/* first comment line
second comment line */
Indentation increment for parts of a loop statement. The
default value is 5, which corresponds to the following style:
loop for stmt,
while cond,
incr
do
If any of the loop parts occupies several lines, the
indentation of continuation lines relative to the first line is
controlled by mfl-loop-continuation-offset, which defaults
to 5:
loop for set n 0
set z 1,
while n != 10
or z != 2,
set n n + 1