Skirda wrote:Что-то в упор не вижу тестовой реализации альтернативы...
ссылка
раз. ссылка
два. не идеал конечно, но как минимум под каждую функцию инструкция не заводится.
что касается топика.
в принципе хоть макроязык и весьма интегрирован в фар, но если откинуть сохранение, загрузку, запись и прочее редактирование, то остаётся почти одна функция — KeyMacro::GetKey (есть ещё PeekKey, но на первый взгляд она легко реализуется через GetKey). таким образом на самом низком уровне ничего кроме кнопки не нужно.
таким образом, если мы хотим интегрировать какой либо скриптовой язык, то необходимый минимум, который нужно реализовать это:
1. инициализация. получаем от фара название скрипта/сам код, akey, что-то ещё. производим полную инициализацию.
2. выполнение. фар дёргает нашу GetKey. начинаем выполнять скрипт. если на вдруг надо вернуть фару какую нибудь кнопку, выполняем что-то типа far.Key("CtrlShiftW"). реализация far.Key приостанавливает работу скрипта, возвращает управление фару, фа работает до следующего GetKey.
3. финализация. скрипт окончен, всевозможные клеанапы и прочее.
проблемы видятся как минимум две:
1. реализация far.Key. я не уверен, что скриптовые языки для подключаемых функций позволяют заморозить выполнение скрипта, и вернуться в вызываемую программу.
2. рекурсия. в скрипте создали диалог, показали, в нём вызвали другой скрипт. т.е. на первый взгляд создаём новую вм, и радуемся жизни. но во-1 запуск новой вм не такая дешёвая операция, как мне кажется. во-2 возникают проблемы с глобальными переменными. многие скриптовые языки поддерживают корутины, возможно стоит поискать решение проблемы тут.