Как встроить графическую интерактивную оболочку IronPython в приложение?

Я пробовал очевидный путь в моем домашнем проекте с открытым исходным кодом RevitPythonShell (плагин для программного обеспечения для моделирования зданий Autodesk Revit Architecture 2010 ): code.interact() с движком IronPython, настроенным для использования потоков .NET для STDIN и STDOUT. Затем я перенаправляюсь к элементу управления TextBox. Это вроде как работает, но на самом деле это всего лишь уродливый хак.

Основная проблема заключается в том, чтобы заставить все вещи оболочки работать: стрелка вверх и стрелка вниз для истории, редактирования, копирования и вставки, EOF, подсветка синтаксиса, подсказки инструментов и т.д. Требуется много работы для получите это право, и это не проблема, которую я пытаюсь решить (я пытаюсь получить интерактивную оболочку, размещенную в Revit, не создавая идеальный графический интерфейс оболочки).

Если бы это был не проект .NET, я бы, вероятно, подумал о повторном использовании PyCrust/PyWrap, но я не уверен, это можно сделать из проекта WinForms. Есть ли что-то подобное для .NET?

Кто-нибудь когда-либо реализовал интерфейс IConsole и может показать пример того, что мне нужно сделать? Кажется, это будет правильный маршрут (в отличие от использования модуля code), но для жизни меня я не могу понять. Исходный код IronPython не имеет комментариев.

ОБНОВЛЕНИЕ: После того, как я попробовал некоторые вещи, я в конце концов остановился на превосходном IronLab. Он включает пример оболочки с подсветкой синтаксиса и всеми. Код был приятным и легким для интеграции. Проверьте код RevitPythonShell на подсказки о том, как вставлять его.

Ответ 1

Я искал аналогичную вещь, и я обнаружил, что проект IronLab содержит приятную консоль IronPython. Исходный код можно найти здесь https://github.com/rwg0/ironlab/tree/master/IronPythonConsole.

[edit on 25/10/2016] исправленный сломанный URL

Ответ 2

Хорошо, тогда у меня есть два возможных ответа. Один в комментарии выше.... и еще более простой (без intellisense, без подсветки синтаксиса):

http://www.codeproject.com/KB/edit/irontextbox2.aspx

Это JoeSox, и это для IronPython 2, а не 2.6. Однако я смог обновить его, чтобы нормально работать с 2.6 примерно за пять минут. Если вам интересно, я могу найти способ отправить вам файл diff или пощекотать обновленный проект где-нибудь (он был опубликован под лицензией MIT).

Наслаждайтесь!

Дэвид