SelectionPlaceholder in Packages
- To: mathgroup at smc.vnet.net
- Subject: [mg90236] SelectionPlaceholder in Packages
- From: "David Park" <djmpark at comcast.net>
- Date: Thu, 3 Jul 2008 06:10:11 -0400 (EDT)
I'm having a lot of difficulty in using a SelectionPlaceholder in a CreatePalette statement that is in a package. The problem is that it gets the package context attached to it and if I try to write a 'Global`' in front of it I obtain syntax errors when loading the package. Here is a preliminary 'in notebook' example that does what I want. I include several features that are in my actual example such as the HoldFirst attribute and Grid construction. I also include a Global` context on the placeholder even though it is not necessary here. The Defer is necessary to keep from displaying the evaluated version of foo. Attributes[foo] = {HoldFirst}; foo[x_] := x^2 TestPalette := CreatePalette[ Defer@Grid[{{PasteButton[foo[Global` \[SelectionPlaceholder]]]}}], WindowTitle -> "TestPalette", WindowMargins -> Automatic, ClosingAutoSave -> False] TestPalette; That all works. Now, here is a package version. Create a TestPalette folder in your private Applications folder and save the notebook there under the name TestPackage'. ___________________________________________________________ Notebook[{ Cell[CellGroupData[{ Cell["TestPackage", "Section"], Cell[BoxData[ RowBox[{ "BeginPackage", "[", "\"\<TestPalette`TestPackage`\>\"", "]"}]], "Input", InitializationCell->True], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"foo2", "::", "usage"}], "=", "\"\<foo2[x] is a test function.\>\""}], ";"}]], "Input", InitializationCell->True], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"TestPalette2", "::", "usage"}], "=", "\"\<TestPalette2 will launch a palette to paste the foo function.\ \>\""}], ";"}]], "Input", InitializationCell->True], Cell[BoxData[ RowBox[{"Begin", "[", "\"\<`Private`\>\"", "]"}]], "Input", InitializationCell->True], Cell[BoxData[ RowBox[{ RowBox[{"Attributes", "[", "foo2", "]"}], "=", RowBox[{"{", "HoldFirst", "}"}]}]], "Input", InitializationCell->True], Cell[BoxData[ RowBox[{ RowBox[{"foo2", "[", "x_", "]"}], ":=", SuperscriptBox["x", "2"]}]], "Input", InitializationCell->True], Cell[BoxData[ RowBox[{"TestPalette2", ":=", "\[IndentingNewLine]", RowBox[{"CreatePalette", "[", RowBox[{ RowBox[{"Defer", "@", RowBox[{"Grid", "[", RowBox[{"{", RowBox[{"{", RowBox[{"Global`testsymbol", ",", RowBox[{"PasteButton", "[", RowBox[{"foo2", "[", "\[SelectionPlaceholder]", "]"}], "]"}]}], "}"}], "}"}], "]"}]}], ",", "\[IndentingNewLine]", RowBox[{"WindowTitle", "\[Rule]", "\"\<TestPalette2\>\""}], ",", "\[IndentingNewLine]", RowBox[{"WindowMargins", "\[Rule]", "Automatic"}], ",", "\[IndentingNewLine]", RowBox[{"ClosingAutoSave", "\[Rule]", "False"}]}], "]"}]}]], "Input", InitializationCell->True], Cell[BoxData[ RowBox[{"End", "[", "]"}]], "Input", InitializationCell->True], Cell[BoxData[ RowBox[{"EndPackage", "[", "]"}]], "Input", InitializationCell->True] }, Open ]] }, AutoGeneratedPackage->Automatic, WindowSize->{607, 750}, WindowMargins->{{Automatic, 191}, {Automatic, 62}}, FrontEndVersion->"6.0 for Microsoft Windows (32-bit) (May 21, 2008)", StyleDefinitions->"Default.nb" ] ___________________________________________________________ In the TestPackage Grid I include an extra Global`testsymbol object to show that usually this construction works all right. Now if one loads the package and evaluates TestPalette2: Needs["TestPalette`TestPackage`"] TestPalette2 the palette is displayed but it has the private package context on the selection placeholder. But if I use Global`\[SelectionPlaceholder] then I obtain a syntax error when reading the package. I can't find any way to get it into the Global context. Does anyone know how to do this? Thanks in advance. -- David Park djmpark at comcast.net http://home.comcast.net/~djmpark/