When developing some new code (eg. a function to analyse something) I usually make a .m and .nb file. The code goes in to .m is then called from the .nb.
But sometimes I forget to run the package after saving and then spend some time wondering why my code changes don't have the desired effect.
Is there a way to run a package automatically after it's saved?
Basically I would like that when I press [Ctrl]+S the package is saved and that the effect of this button being pressed is achieved.
Currently I put Import["MyPackage.m"]
at the top of the evaluation cell I'm currently working on in the notebook. Perhaps I could also abuse $Pre for this, but then the package would get imported on every cell evaluation (which is a bit needles).
EDIT
Well, this is what I have so far based on Chirs's answer
FrontEndExecute[
FrontEnd`AddMenuCommands[
"Save", {Delimiter,
MenuItem["Save and Run &Package",
FrontEnd`KernelExecute[NotebookSave[SelectedNotebook[]];
If[FileExtension[NotebookFileName[SelectedNotebook[]]] ==
"m",(*then*)
Get[NotebookFileName[SelectedNotebook[]]];
];
], MenuKey["S", Modifiers -> {"Control"}],
System`MenuEvaluator -> Automatic]}]]
If[FileExtension...]
you could useFunction[filecheck, If[filecheck =!= $Failed, If[FileExistsQ[#], Get[#]]]& @ StringJoin[StringDrop[filecheck, -3], ".m"]] @ Quiet[NotebookFileName[SelectedNotebook[]]]
. This checks if the current notebook is saved, then checks for existence of a package before trying to load it. $\endgroup$ – Chris Degnen May 10 '12 at 22:09