Here is a widget which I constructed some time ago for my purposes. This is an InputField as well, but it operates on boxes, and as a bonus, the standard syntax highlighting works inside it:
ClearAll[codeInputField];
Attributes[codeInputField] = {HoldFirst};
Options[codeInputField] = {
BaseStyle -> {FontSize -> 14, FontWeight -> Plain, FontFamily -> "Courier"},
FieldSize -> {20, {2, Infinity}},
ImageSize -> Automatic,
KeyEventActions -> Automatic,
EnterPressedCustomFunction :> Automatic
};
codeInputField[startingCode_, opts : OptionsPattern[]] :=
With[{bs = OptionValue[BaseStyle], fsize = OptionValue[FieldSize],
acts = OptionValue[KeyEventActions],
EnterPressedF = OptionValue[EnterPressedCustomFunction],
ims = OptionValue[ImageSize]},
Module[{nb, enterPressed},
With[{actions =
Sequence @@
If[acts === Automatic,
{},
Replace[acts,
(s_ -> f_) :> (s :> f[Hold[startingCode], Hold[enterPressed], s, nb]),
{1}]
],
enterF = If[EnterPressedF === Automatic, Hold, EnterPressedF]
},
EventHandler[
InputField[
Dynamic[
startingCode,
(nb = InputNotebook[]; startingCode = #) &
],
Boxes,
FieldSize -> fsize, ContinuousAction -> True,
BaseStyle -> bs, ImageSize -> ims
],
{"ReturnKeyDown" :>
(
enterPressed = True;
enterF[Hold[startingCode], nb];
FrontEndExecute[NotebookWrite[InputNotebook[], "\n"]];
If[! ValueQ[nb], nb = InputNotebook[]];
SetOptions[NotebookSelection[nb], ShowSelection -> True];
),
actions
},
PassEventsDown -> True
]]]];
Here is an example of use:
code = MakeBoxes[Plot[Sin[x], {x, 0, 4 Pi}]];
Dynamic[code]
RowBox[{"Plot","[",RowBox[{RowBox[{"Sin","[","x","]"}],",",RowBox[{"
{",RowBox[{"x",",","0",",",RowBox[{"4"," ","\[Pi]"}]}],"}"}]}],"]"}]
The above dynamic is to monitor the code variable. Now, the input field:
codeInputField[code]

The highlighting is enabled after "Enter" is pressed the first time. You can edit the code to see the highlighting at work and how the code variable is updated.
I also coded an interactive REPL-style cell based on this, which can evaluate code inside it. If there is an interest in it, I could expand to include that as well.