Наверное, многие слышали про кроссплатформенную графическую библиотеку WxWidgets, а кто-то, возможно даже использует её. Не так давно я обнаружил, что она адаптирована и для Lua: WxLua. Теперь, найдя, наконец, время, решил поделиться с сообществом.
Достоинства: довольно легко и просто делать графические скрипты для Far. Надо ли это? Ну, пусть лучше будет такая возможность, чем нет.
Недостатки:
при возникновении ошибки может подвесить или уронить Far, поэтому требует большей аккуратности при написании скриптов;
переопределяет функцию _G.print, что приводит к ошибкам при попытке обратиться к print с привычными параметрами. Способы борьбы:
вручную заменить все вызовы print на mf.print (на мой взгляд, разумно для своих скриптов, особенно для выкладываемых публично);
(Этот способ предпочтительнее, на мой взгляд, для скриптов чужого авторства).
Установка: качаем с https://sourceforge.net/projects/wxlua/ ... /2.8.12.3/ архив wxLua-2.8.12.3-Lua-5.1.5-MSW-Unicode.zip, из каталога bin достаём wx.dll и кладём в %FarProfile%\Macros\lib32. К сожалению, скомпилированная версия имеется только для 32 бит, но там же есть и исходники, так что желающие могут скомпилировать сами.
IgorZ wrote: ↑Tue 26 Nov, 2019 07:45
скомпилированная версия имеется только для 32 бит
А нельзя ли для тех, кто сам не собирает, сделать версию и под x64, и приложить здесь или к скрипту?
Не ко мне. Я с C/C++ - на "вы": практики нет, на работе другие языки востребованы.
WxLua
Posted: Mon 02 Dec, 2019 06:07
by IgorZ
Добавил в шапку замечание по нюансу, возникающему при использовании wxLua и стандартной функции print. Сразу забыл про это написать, приношу извинения.
WxLua — использование WxWidgets из Lua-скриптов
Posted: Mon 02 Dec, 2019 14:10
by John Doe
IgorZ wrote: ↑Tue 26 Nov, 2019 07:45
вручную заменить все вызовы print на mf.print (на мой взгляд, разумно разве что для выкладываемых публично макросов);
Давно использую именно mf.print, и считаю это достаточно разумным.
IgorZ wrote: ↑Tue 26 Nov, 2019 07:45
вручную заменить все вызовы print на mf.print (на мой взгляд, разумно разве что для выкладываемых публично макросов);
Давно использую именно mf.print, и считаю это достаточно разумным.
Если использовать только свои скрипты, то да, к тому же, предотвращает потенциальные проблемы у остальных пользователей этого скрипта. А если у человека много чужих, да ещё регулярно обновляющихся? Каждый раз после скачивания проверять скрипт и заменять вручную (да ещё и учитывать, что автор из своих соображений может, скажем, определить в файле свою локальную функцию print, так что автозамена не метод)? А вариант с добавлением двух строк в _macroinit.lua универсален, прост и снимает данную проблему полностью, так что для большинства пользователей предпочтительнее.
IgorZ wrote: ↑Tue 03 Dec, 2019 05:27
Каждый раз после скачивания проверять скрипт и заменять вручную
При возникновении реального конфликта можно сообщить автору, и вероятнее всего он сам исправит раз и навсегда.
Вполне возможно. Но возможны и варианты. А пользователю, как правило, удобнее всего сделать то, что делается единожды, не слишком сложно, при этом работает сразу и с гарантированным результатом. Так что написать автору лишним не будет, но и ждать, когда он выложит исправленную версию - вариант не для всех и не в любой ситуации.
Поначалу предполагал, что он должен выводить текст на графическую форму. Но проверка показала, что всё сложнее. Так что нашёл и проверил обходное решение и отложил разбор до поры, когда не будет более важных проблем.
И если эту запись закомментировать, то сообщение об ошибке пропадает. А при раскомментировании — возникает вновь. К каким последствиям приводит эта ошибка непонятно. В 3.0.0.5542 x86 проскакиваемое сообщение продолжает наблюдаться.
При старте Far x64 ошибку отловить не удаётся. Возможно, она и не возникает, а м.б. и не успевает попасть в кадр записывающей экран программы.
Это относится к библиотеке, а не к данному скрипту. Соответственно, Вашему посту место в теме библиотеки. Примите во внимание на будущее.
С библиотекой, к сожалению, ничего не сделать. Если только найдётся энтузиаст, который подхватит выпавшее из рук автора знамя; благо, исходные тексты в наличии.