File/New/Notebook creates a new notebook using the same current kernel. Is it possible to make it create a new kernel by default? I know how to create a new kernel manually and set that kernel to my notebook. What I'm asking is how to automate that process so that File/New/Notebook automatically creates a new kernel and uses it.
-
1$\begingroup$ How many kernels would you like this to go up to? It's pretty expensive in terms of processors to be making a new kernel for every notebook. On the other hand if you really want this see Kuba's comments here: mathematica.stackexchange.com/questions/43900/… $\endgroup$– b3m2a1Commented Jun 10, 2018 at 2:14
-
1$\begingroup$ Also, if you have a normal license, you cannot create arbitrary many new kernels. Usually, the limit is 2 main kernels. If you happen to be in a network with infinitely many licenses, however, this won't be an issue. $\endgroup$– halirutanCommented Jun 10, 2018 at 2:57
1 Answer
Summing up, I don't think you can get away in a long run with what you want. But maybe you can, I will give you few ideas to experiment with, there is no the best way as your request is not standard.
Maybe it would be enough to to set separate CellContext -> Notebook
for those notebooks?
Based on Create new notebook at fixed size, it can be done as follows:
SetOptions[$FrontEnd, NotebookEventActions :> {
{"MenuCommand", "New"} :> CreateNotebook["Default", CellContext -> Notebook]}
]
In case you really want separate kernels, you can create them dynamically: How to set up LinkSnooper for monitoring FrontEnd--Kernel communication?
CurrentValue[$FrontEnd, {EvaluatorNames, "newUniqueName"}] = {
"AutoStartOnLaunch" -> False
};
and then
NotebookEventActions :> {
{"MenuCommand", "New"} :> CreateNotebook["Default", Evaluator -> "newUniqueName"]
}
Considering how many new notebooks one may create it is probably good idea to clean/delete the kernel on MenuCommand/WindowClose
or something. But then you you to recreate it when the notebook is opened. You could you NotebookEventActions :> Refresh[reinitcode, None]
for that.
Let me know if there is anything I did not cover.