Re: Preserve notebook's $ContextPath between sessions /
- To: mathgroup at smc.vnet.net
- Subject: [mg104993] Re: [mg104967] Preserve notebook's $ContextPath between sessions /
- From: Leo Alekseyev <dnquark at gmail.com>
- Date: Tue, 17 Nov 2009 05:13:41 -0500 (EST)
- References: <200911151056.FAA09284@smc.vnet.net>
John, thanks for your response. Since there can be many session-dependent volatile contexts, it probably wouldn't be a good idea to save them all by default -- which is probably why that feature isn't there. On the other hand, it would be nice to offer the user a greater control over this: for instance, I am simply trying to avoid doing SetOptions[EvaluationNotebook[],CellContext->Notebook]; Needs/@{"foo`","bar`"} (* which have already been autoloaded by init.m, but are now hidden *) AppendTo[$ContexPath,"Global`"]; (* in some sessions it's good to have a "read-only" access to global context *) at the start of every notebook that I want to set up like that. Specifying a "Other..." context as you suggested doesn't solve this problem because the packages and loaded contexts are still hidden. I am just surprised there isn't an easy mechanism to save/retrieve the context info. By poking around I noticed there's a variable Global`Private`SavedContextInfo["$ContextPath"]. However, it looks like the SavedContextInfo variables cannot be made persistent -- correct me if I am wrong. I tried writing the following wrapper function: test2[] := (SetOptions[EvaluationNotebook[], CellContext -> Notebook]; (AppendTo[$ContextPath, #1] &) /@ Global`Private`SavedContextInfo["$ContextPath"]; $ContextPath = DeleteDuplicates[$ContextPath]) However, it appears that only the SetOptions[EvaluationNotebook[], CellContext -> Notebook] command takes effect when written like this *unless invoked twice in two separate cells with a fully-qualified symbol name. This seems kind of inelegant (and trying to do this voodoo programmatically by manipulating notebooks with kernel functions is ugly and doesn't work well). I am still curious if there is a good way around this. --Leo On Mon, Nov 16, 2009 at 10:44 AM, John Fultz <jfultz at wolfram.com> wrote: > Yes, that's right. Mathematica is not just changing the context, but t= rying to > sandbox a number of evaluation side effects from notebooks which are oper= ating > in another context, including... > > * $Context (of course) > * $ContextPath > * The state of In[]/Out[] numbering > * The Out[] history > > In a notebook set with a unique notebook-level context, no attempt is mad= e to > recover the same context when you close and open the notebook again, and = the > context you used isn't stored anywhere in the file. I don't think that= occurred > to anyone here when designing the feature, and I'm not entirely certain w= hether > it would be generally desirable to do so. > > But, what you want to do is easy enough. Instead of specifying a > notebook-unique context, specify a named context of your choice (i.e., th= e > "Other..." option). Everything will be remembered as long as it's usin= g the > same context name, and by hard-coding the name, you can guarantee that. = Down > side...you'll have to make sure you pick a unique name. But that's pro= bably not > so difficult...you could choose a name based upon the file name, for exam= ple. > You could write a button which does this, too. I'll leave that as an e= xercise > for the reader. > > Sincerely, > > John Fultz > jfultz at wolfram.com > User Interface Group > Wolfram Research, Inc. > > > On Sun, 15 Nov 2009 05:56:32 -0500 (EST), dnquark wrote: >> I have fallen into the habit of making the default context of the >> notebooks private by issuing the command >> SetOptions[EvaluationNotebook[], CellContext->Notebook] >> at the start of every notebook session. However, I typically add >> several other contexts to $ContextPath; I even wrote a utility >> function to easily do all this automatically. >> >> It turns out, though, that upon closing and reopening the notebook >> Mathematica puts only "Notebook$$xx`" and "System`" contexts in >> $ContextPath. My question is -- is there a way to make _my custom_ >> $ContextPath persistent between sessions in the same way as {"Notebook$ >> $xx`", "System`"} context list is persistent?.. Or at least, can I >> store custom metadata with the notebook -- i can always write a >> wrapper function to retrieve it. >> >> Thanks, >> --Leo > > > >
- References:
- Preserve notebook's $ContextPath between sessions / store custom
- From: dnquark <dnquark@gmail.com>
- Preserve notebook's $ContextPath between sessions / store custom