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](http://mathematica.stackexchange.com/a/915/38205) [of](http://mathematica.stackexchange.com/a/1607/38205) [answers](https://mathematica.stackexchange.com/questions/5417/running-a-package-automatically-when-its-saved/5418#5418) 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: [![Menu graph][1]][1] 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](http://mathematica.stackexchange.com/a/915/38205), 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. # ------ Update ------ Playing around with this I was able to find a way to more or less edit all the menus, but we have to do it manually. It takes a bit of work to do so. My idea was to use `FrontEndExecute@ResetMenuPackets[{menu}]` and build the `menu` manually. I created a special `$FrontEndMenu` symbol which basically routes `Set` to that (plus some utility code and whatnot). Then create `Add`, `Insert`, `Drop`, `Take`, etc. commands to manipulate a `Menu` expression. The toplevel menu expression needs to look like `Menu["Mathematica", {submenus}]` as best I can tell (anything else I tried crashed the system). Then just save the basic menu expression from the MenuSetup.tr file (import it in the ``System` `` context) and work with that. Doing this I've been able to completely my menus however I like: [![Menu rewrite][2]][2] Two issues: I don't know if this will work outside of Mac and it prevents the use of the `AddMenuComands` token. Hopefully there's also a simpler way to do this... if anyone has better ways though that'd be great, otherwise this'll do for customization I guess. [1]: https://i.sstatic.net/XpO8B.png [2]: https://i.sstatic.net/cvyAK.png