I often copy Mathematica code from websites (such as SO) to a notebook. The code usually gets pasted as a single input cell. I'm looking for a simple way to paste it as several input cells for convenient step-by-step evaluation.
For example,
a = 2;
f[x_] := x^a
Plot[f[x], {x,0,2}]
would ideally paste as two input cells. Manual formatting (i.e. the original newlines) should preferably also be preserved (this is not the case with default pasting).
Generally, if one selects all input cells (ALT-click), copies them into a text editor, then copies the resulting text back into a notebook, one should get a close equivalent of the original cells that were copied.
To Create a New Cell:Move the pointer in the notebook window until it becomes a horizontal I-beam. Click, and a cell insertion bar will appear; start typing. By default, new cells are the Wolfram System input cells.
Or.... you can just Hit Ctrl+Shift+D at the point where you'd like to split your singe cell into 2 separate cells. Some times it's advantageous to group multiple operations into a single cell (or rather not split them to begin with). To undo such a split, select both cells (or more than 2 if you'd like) and click Ctrl+Shift+M to merge them into one.
This is a simple implementation (I'd also appreciate a code review, I'm not good in front end programming):
(* This converts a sequence of expressions into boxes *)
Clear[makeManyBoxes]
SetAttributes[makeManyBoxes, HoldAllComplete];
makeManyBoxes[e__] := List@ReleaseHold[MakeBoxes /@ HoldComplete[e]]
(* Split a list at separator *)
split[list_, sep_] :=
DeleteCases[Split[list, #1 =!= sep && #2 =!= sep &], {sep}]
wr[e_] := NotebookWrite[InputNotebook[], Cell[BoxData[e], "Input"]]
CreatePalette@Button["Paste!",
Module[{clipboard},
clipboard = NotebookGet[ClipboardNotebook[]][[1, 1, 1]];
If[StringQ[clipboard],
wr /@
split[ToExpression[clipboard, InputForm, makeManyBoxes], "Null"]
]
]
]
It breaks cells at empty lines. For this, we need to parse the expression first (what if an empty line appears in the middle of a long Module
?). But parsing alone will cause several problems.
Problems with this implementation:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With