Recent versions of Mathematica dynamically prompt a list of possible options. For example, when typing
Plot[x, {x,0,1}, PlotStyle->
After typing the arrow, Mathematica prompt a list Gray, Dashed, Thick
for choice. How to define similar behavior for user defined functions? For example,
Options[myFun] = {myOpt -> value};
myFun[OptionsPattern[]] := 1;
How to prompt a set of possible options, like opt1, opt2, opt3
right after typing
myFun[myOpt->
Answer
Thanks for asking this question; I might not have discovered this customizable area without it.
The auto-completion option values are automatically loaded on Front End start from:
FileNameJoin[{$InstallationDirectory, "SystemFiles", "FrontEnd",
"SystemResources", "FunctionalFrequency", "OptionValues"}]
This directory contains a series of Package (.m
) files each with the name of a function, e.g. ArrayPlot.m
. The file name itself determines that this will apply to the function ArrayPlot
. It also contains an additional file that appears to apply to all functions: CommonOptions.m
The structure of each file is a list of Rules:
{Extension -> {"Automatic"}, Trig -> {"True", "False"}}
- The right hand side of each rule is always a list of Strings or an empty list
{}
- Option values that are actual strings must be escaped:
"\"string\""
- Option names must be Symbols (thanks Kuba)
A special Rule form exists for icons within the menu, e.g. from ArrayPlot.m
:
PlotTheme ->
{{"\"Web\"", "PlotTheme-ArrayPlot-Web.png"},
{"\"Minimal\"", "PlotTheme-ArrayPlot-Minimal.png"},
{"\"Detailed\"", "PlotTheme-ArrayPlot-Detailed.png"},
{"\"Business\"", "PlotTheme-ArrayPlot-Business.png"},
{"\"Marketing\"", "PlotTheme-ArrayPlot-Marketing.png"},
{"\"Scientific\"", "PlotTheme-ArrayPlot-Scientific.png"},
{"\"Monochrome\"", "PlotTheme-ArrayPlot-Monochrome.png"},
{"\"Classic\"", "PlotTheme-ArrayPlot-Classic.png"},
{"\"Default\"", "PlotTheme-ArrayPlot-Default.png"}}
Each of these icon files reside in:
FileNameJoin @ {$InstallationDirectory, "SystemFiles", "FrontEnd",
"SystemResources", "Bitmaps", "Popups", "CodeCompletion", "Thumbnails"}
I have not checked to see if other paths are also searched.
As an example I created a new file foo.m
in the OptionValues directory with the content:
{myOption -> {"Doc", "Grumpy", "Happy", "Sleepy", "Bashful", "Sneezy", "Dopey"}}
Now after (re)starting Mathematica:
Comments
Post a Comment