これは単純な実装です(コードレビューもありがたいです。フロントエンドプログラミングは得意ではありません)。
(* 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"]
]
]
]
空の行でセルを分割します。このためには、最初に式を解析する必要があります(長い行の途中に空の行が表示された場合はどうなりModule
ますか?)。ただし、解析だけでいくつかの問題が発生します。
この実装の問題:
- コメントを削除します
- 誤った入力を処理できません
- フォーマットは保持されません(改行)
- うまくいかないことが他にもいくつかあるに違いないと思います