Is there a way to store metadata in a cell in such a way that it can be accessed with Dynamic
?
Think of e.g. how ExternalLanguage cells work. We can select whether they should use Python or NodeJS and this state is permanently stored in the CellEvaluationLanguage
cell option.
The cell expression would be something like
Cell["", "ExternalLanguage",
CellEvaluationLanguage->"NodeJS"]
It is unclear to me if CellEvaluationLanguage
needs to be a built-in option for this to work. I tried something similar with an arbitrary option name and it did not work. For example, CurrentValue[EvaluationCell[], FooBar] = 123
will not set the FooBar
option on the cell.
Next, I tried to use TaggingRules
.
We can do
CurrentValue[EvaluationCell[], {TaggingRules, "FooBar"}] = 123
then examine the input cell's cell expression. It will have the FooBar tagging rule set. But it will also have inherited all tagging rules from the front end. On my machine I see this:
Is there a way that avoids these problems and still managed to store arbitrary hidden metadata in the cell?
What I am aiming for is implementing a similar selector to what we have for ExternalLanguage cells. Here's a proof of concept with TaggingRules
that still has the problem I described above. Evaluate the following to add a selector to the input cell:
CurrentValue[EvaluationCell[],
CellFrameLabels] = {{None,
Cell[BoxData[
PopupMenuBox[
Dynamic[CurrentValue[
ParentCell[EvaluationCell[]], {TaggingRules,
"MyRule"}]], {6 -> "6", 24 -> "24"}]]]}, {None, None}}