So I've been playing with FrontEnd`AddMenuCommands
recently and I wanted to figure out what all I could do with it.
There are a number of answers on this site to specific menu editing commands, but there is no general reference.
I've been able to figure out a bit from the source files, including making a useful reference graph of all the menus and submenus:
using the following code:
$MenuSetupTR =
FileNameJoin@{$InstallationDirectory, "SystemFiles", "FrontEnd",
"TextResources", "Macintosh", "MenuSetup.tr"};
$MenuStringsTR =
FileNameJoin@{$InstallationDirectory, "SystemFiles", "FrontEnd",
"TextResources", "MenuStrings.tr"};
$menuStructure = Import@$MenuSetupTR;
$menuStrings = Import@$MenuStringsTR;
$menuNames =
Cases[$menuStructure, (MenuItem[__,
name_String?(StringContainsQ["Dialog"])] | Menu[name_, ___]) :>
name, ∞];
menuRules[Menu[name_, e_]] := Menu[name] -> menuRules@e;
menuRules[
ignore : (_String | _MenuItem | Delimiter | _AlternateItems)] :=
ignore;
SetAttributes[menuRules, Listable];
menuPart[menu_, name_] :=
FirstCase[menu, Menu[name, _], None, ∞];
menuPart[menu_, name1_, names__] :=
Fold[menuPart, menu, {name1, names}];
menuEdges[menu_] :=
ReplaceAll[
Cases[
DeleteCases[menuRules@menu,
Except[_Menu | _MenuItem |
Rule[_Menu, _] | _List | _String | _AlternateItems],
∞] //. {
Rule[m_, expr : Except[_Rule]] :> Thread[m -> expr],
Rule[m_Menu, Rule[subm_Menu, e_]] :> {m -> subm, subm -> e}
},
_Rule,
∞] // Flatten,
Rule -> DirectedEdge];
menuGraph[menu_] :=
With[{edges = menuEdges@menu},
Graph[
edges,
VertexShape -> {
Menu[n_] :> Graphics[Tooltip[{Hue[.1, .8, 1], Disk[]}, n]],
m_MenuItem :> Graphics[Tooltip[{Hue[.6, .8, 1], Disk[]}, m]],
e_AlternateItems :>
Graphics[Tooltip[{Hue[.4, .8, 1], Disk[]}, e]]
}
]
];
menuGraph@$menuStructure
But I was hoping someone might know which of these menus are actually editable and what I can add to them. There are also the dialogs, which I tried to scrape and found a few of and if someone could advise me on the use of these that would be a huge help too.
If this is too open ended, I'll refine the question, but in the meantime hopefully someone familiar with menu editing can help me out.