这是一个简单的实现(我也很感激代码审查,我不擅长前端编程):
(* 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"]
]
]
]
它会在空行处打断单元格。为此,我们需要先解析表达式(如果一个空行出现在 long 的中间Module
怎么办?)。但是单独解析会导致几个问题。
此实现的问题:
- 它删除评论
- 它无法处理不正确的输入
- 它不保留格式(换行符)
- 我确定肯定还有其他一些可能出错的地方