Manipulating notebooks from the kernel: Order in which commands are executed?
- To: mathgroup at smc.vnet.net
- Subject: [mg16142] Manipulating notebooks from the kernel: Order in which commands are executed?
- From: r.lawrence at worldnet.att.net (Robert Lawrence)
- Date: Sat, 27 Feb 1999 03:23:09 -0500
- Organization: AT&T WorldNet Services
- Sender: owner-wri-mathgroup at wolfram.com
I created a button with the following ButtonFunction: NotebookLocate["tagName"]; SelectionEvaluateCreateCell[SelectedNotebook[]]; This properly found the cell in the active notebook with the tag "tagName", evaluated that cell, and created a new cell containing the result of the evaluation, with the current selection being immediately after the new cell . Now I added a line to the ButtonFunction, so that it read: NotebookLocate["tagName"]; SelectionEvaluateCreateCell[SelectedNotebook[]; SelectionMove[SelectedNotebook[], Previous,Cell]; But instead of moving the current selection to the new cell as I had expected, this moved the current selection to the cell immediately before the new cell (i.e., the cell with the tag "tagName"). This behavior gave me the impression that, at the time SelectionMove was executed, the new cell created by SelectionEvaluateCreateCell had not yet been recognized in some sense. Something similar seems to occur in the following example, which is based upon an extension of some code posted by Jean-Marie Thomas in December 1997 (and which I came across in seeking a solution for the above problem): Here is Thomas's code: thisNotebook=SelectedNotebook[]; defNotebook= "notebook A.nb";(*give the correct path with Input/get file path*) NotebookLocate[{defNotebook,"foo3 definition"}]; data=NotebookRead[defNotebook]; SetSelectedNotebook[thisNotebook]; NotebookWrite[thisNotebook,data]; SelectionMove[thisNotebook,Previous,Cell]; SelectionEvaluate[thisNotebook]; This code copies the cell in defNotebook with tag "foo3 definition", and pastes it into thisNotebook. The code then evaluates the newly-pasted cell and leaves the current selection immediately after the newly-pasted cell (or immediately after the cell containing the output of the evaluation, if output is displayed). All of this works as expected. However, I tried adding two lines to Thomas's code, so that it read as follows: thisNotebook=SelectedNotebook[]; defNotebook= "notebook A.nb";(*give the correct path with Input/get file path*) NotebookLocate[{defNotebook,"foo3 definition"}]; data=NotebookRead[defNotebook]; SetSelectedNotebook[thisNotebook]; NotebookWrite[thisNotebook,data]; SelectionMove[thisNotebook,Previous,Cell]; SelectionEvaluate[thisNotebook]; SelectionMove[thisNotebook,Previous,Cell]; NotebookDelete[thisNotebook]; The added lines are designed to delete the pasted cell after it has been evaluated. Surprisingly, however, this augmented code merely deletes the pasted cell without ever evaluating it, giving the impression that the NotebookDelete command is somehow executed before the SelectionEvaluate command has been executed. I would be grateful for any insights into these apparent anomalies. Robert Lawrence