Re: Multiple Selections in Notebook
- To: mathgroup at smc.vnet.net
- Subject: [mg65220] Re: Multiple Selections in Notebook
- From: "David Reiss" <dbreiss at gmail.com>
- Date: Sat, 18 Mar 2006 06:40:43 -0500 (EST)
- References: <dv8vqf$ng9$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Neal,
Here is one strategy for a function that will do what you want. (Then
number string "578208455191942" is just a random tag).
The function uses the Kernel exclusively. It can probably be rewritten
to work using only the FrontEnd.
Thanks for this question. I think that I may include this function in
the New Mathematica Package that I am in the midst of finishing off....
but of course it's yourse for the using....
Best,
David
(* **************************** *)
CelarAll[EvaluateToHere];
EvaluateToHere::usage = "EvaluateToHere[nb] evaluates all Input cells
in
the notebook nb up to and including the current selection in nb. \
EvaluateToHere[] does this or the current InputNotebook. ";
EvaluateToHere[nb_NotebookObject] :=
Module[{hasTag, selection},
SelectionMove[nb, After, Cell, AutoScroll -> False];
NotebookWrite[nb, Cell["", "Input", CellTags ->
{"578208455191942"}, CellOpen -> False]];
SelectionMove[nb, Before, Notebook, AutoScroll -> False];
selection = NotebookFind[nb, "Input", Next, CellStyle, AutoScroll
->
False];
hasTag = MemberQ[Flatten[{CellTags /.
Options[selection]}], "578208455191942"];
While[! hasTag,
SelectionEvaluateCreateCell[nb];
selection = NotebookFind[nb, "Input", Next, CellStyle,
AutoScroll -> False];
hasTag = MemberQ[Flatten[{CellTags /. Options[selection]}],
"578208455191942"];
];
NotebookFind[nb, "578208455191942", All, CellTags];
NotebookDelete[nb]
];
EvaluateToHere[] := EvaluateToHere[InputNotebook[ ]]
(* **************************** *)
Neal Tornberg wrote:
> I'd like to create an "Execute to Here" button in one of my homebrew
> palettes. My instinct is to do it by selecting all cells previous to the
> cursor position and "Evaluate Cells". SelectionMove apparently can't be
> made to select more than one cell at once. Is there a way to do that or is
> there a better way to accomplish what I want?