2

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.

yewang
  • 327
  • 1
  • 5
  • 1
    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: https://mathematica.stackexchange.com/questions/43900/new-kernel-for-notebook?rq=1 – b3m2a1 Jun 10 '18 at 02:14
  • 1
    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. – halirutan Jun 10 '18 at 02:57

1 Answers1

2

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.

Kuba
  • 136,707
  • 13
  • 279
  • 740