Skip to main content
replaced http://mathematica.stackexchange.com/ with https://mathematica.stackexchange.com/
Source Link

There are a numbernumber ofof answers on this site to specific menu editing commands, but there is no general reference.

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 dialogsdialogs, 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.

There are a number of answers on this site to specific menu editing commands, but there is no general reference.

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.

There are a number of answers on this site to specific menu editing commands, but there is no general reference.

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.

added 2305 characters in body
Source Link
b3m2a1
  • 47.1k
  • 3
  • 95
  • 245

##Note:

I've discovered the menus are more-or-less as customizable as one would like, although it is mildly annoying to do this. Simply write your own Menu expression and use FrontEndExecute@ResetMenusPacket[{expr}]. If someone more expert has a better way, though, I would really like to know it.

For those glancing through, here is a minimal example of a dynamically editable menu-symbol:

$FEMenuRoot=Import[<your_MenuSetup.tr_file>];
$feStoredMenu = Automatic;
$FrontEndMenu := Replace[$feStoredMenu, Automatic -> $FEMenuRoot];
$FrontEndMenu /: 
  HoldPattern[Set[$FrontEndMenu, m : _Menu]] :=(
    $feStoredMenu = m;
    FrontEndExecute@ResetMenusPacket[{m}]
    );
$FrontEndMenu /: 
  HoldPattern[
   Set[$FrontEndMenu, Automatic]] :=
    (
     $feStoredMenu = Automatic; 
     FrontEndExecute@ResetMenusPacket[{Automatic}]);
$FrontEndMenu /: 
  HoldPattern[
   Unset[$FrontEndMenu]] :=
    ($FrontEndMenu = Automatic;);

Then do something like:

$FrontEndMenu =
  Menu["Mathematica",
   {
    Menu["DoopDoop", {
      MenuItem["Copy", "Copy", MenuKey["C", Modifiers -> {"Command"}]],
      MenuItem["Cut", "Cut", MenuKey["X", Modifiers -> {"Command"}]],
      MenuItem["Paste", "Paste", 
       MenuKey["V", Modifiers -> {"Command"}]],
      MenuItem["Save", "Save", MenuKey["S", Modifiers -> {"Command"}]],
      MenuItem["Save as WL",
       KernelExecute@
        FrontEndTokenExecute["SaveRename",
         {StringReplace[NotebookFileName[], ".nb" -> ".wl"], "Package"}
         ],
       MenuKey["S", Modifiers -> {"Command", "Shift"}],
       MenuEvaluator -> "Local",
       Method -> "Queued"
       ],
      MenuItem["Revert Menus",
       KernelExecute[$FrontEndMenu =.],
       MenuKey["R", Modifiers -> {"Command"}],
       MenuEvaluator -> "Local"]
      }],
    Menu["", {
      MenuItem["Musak",
       KernelExecute@
        SystemOpen@"https://www.youtube.com/watch?v=_lYx6dIKfos",
       MenuEvaluator -> "Local"
       ]
      }
     ]
    }];

And you have menus you can play with.

##Original Question:

So I've been playing with FrontEnd`AddMenuCommands recently and I wanted to figure out what all I could do with it.

So I've been playing with FrontEnd`AddMenuCommands recently and I wanted to figure out what all I could do with it.

##Note:

I've discovered the menus are more-or-less as customizable as one would like, although it is mildly annoying to do this. Simply write your own Menu expression and use FrontEndExecute@ResetMenusPacket[{expr}]. If someone more expert has a better way, though, I would really like to know it.

For those glancing through, here is a minimal example of a dynamically editable menu-symbol:

$FEMenuRoot=Import[<your_MenuSetup.tr_file>];
$feStoredMenu = Automatic;
$FrontEndMenu := Replace[$feStoredMenu, Automatic -> $FEMenuRoot];
$FrontEndMenu /: 
  HoldPattern[Set[$FrontEndMenu, m : _Menu]] :=(
    $feStoredMenu = m;
    FrontEndExecute@ResetMenusPacket[{m}]
    );
$FrontEndMenu /: 
  HoldPattern[
   Set[$FrontEndMenu, Automatic]] :=
    (
     $feStoredMenu = Automatic; 
     FrontEndExecute@ResetMenusPacket[{Automatic}]);
$FrontEndMenu /: 
  HoldPattern[
   Unset[$FrontEndMenu]] :=
    ($FrontEndMenu = Automatic;);

Then do something like:

$FrontEndMenu =
  Menu["Mathematica",
   {
    Menu["DoopDoop", {
      MenuItem["Copy", "Copy", MenuKey["C", Modifiers -> {"Command"}]],
      MenuItem["Cut", "Cut", MenuKey["X", Modifiers -> {"Command"}]],
      MenuItem["Paste", "Paste", 
       MenuKey["V", Modifiers -> {"Command"}]],
      MenuItem["Save", "Save", MenuKey["S", Modifiers -> {"Command"}]],
      MenuItem["Save as WL",
       KernelExecute@
        FrontEndTokenExecute["SaveRename",
         {StringReplace[NotebookFileName[], ".nb" -> ".wl"], "Package"}
         ],
       MenuKey["S", Modifiers -> {"Command", "Shift"}],
       MenuEvaluator -> "Local",
       Method -> "Queued"
       ],
      MenuItem["Revert Menus",
       KernelExecute[$FrontEndMenu =.],
       MenuKey["R", Modifiers -> {"Command"}],
       MenuEvaluator -> "Local"]
      }],
    Menu["", {
      MenuItem["Musak",
       KernelExecute@
        SystemOpen@"https://www.youtube.com/watch?v=_lYx6dIKfos",
       MenuEvaluator -> "Local"
       ]
      }
     ]
    }];

And you have menus you can play with.

##Original Question:

So I've been playing with FrontEnd`AddMenuCommands recently and I wanted to figure out what all I could do with it.

Tweeted twitter.com/StackMma/status/811924102541877248
added 1179 characters in body
Source Link
b3m2a1
  • 47.1k
  • 3
  • 95
  • 245

------ 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

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.

------ 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

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.

edited tags
Source Link
Mr.Wizard
  • 273.1k
  • 34
  • 595
  • 1.4k
Loading
edited tags
Link
Mr.Wizard
  • 273.1k
  • 34
  • 595
  • 1.4k
Loading
Source Link
b3m2a1
  • 47.1k
  • 3
  • 95
  • 245
Loading