Относительно симпатичной печати: ниже приведен очень схематичный код, основанный на ответе @ Mr.Wizard, показывающий, что несколько простых правил могут значительно улучшить читаемость кода:
Internal`InheritedBlock[{RunThrough},
Unprotect[RunThrough];
ClearAttributes[RunThrough, ReadProtected];
Block[{$ContextPath = Append[$ContextPath, "System`Dump`"]},
With[{boxes = ToBoxes@ DownValues[RunThrough]},
CellPrint[Cell[BoxData[#], "Input"]] &[
boxes /.
f_[left___, "\[RuleDelayed]", right___] :>
f[left, "\[RuleDelayed]", "\n", right] //.
{
RowBox[{left___, ";", next : Except["\n"], right___}] :>
RowBox[{left, ";", "\n", "\t", next, right}],
RowBox[{sc : ("Block" | "Module" | "With"), "[",
RowBox[{vars_, ",", body_}], "]"}] :>
RowBox[{sc, "[", RowBox[{vars, ",", "\n\t", body}], "]"}]
}]]]]
Это, безусловно, не общее решение (в частности, оно не будет хорошо работать с глубоко вложенным функциональным кодом без множества отдельных операторов), но я уверен, что его можно улучшить и обобщить без особых проблем, чтобы охватить многиеинтересные случаи.