Page 1 of 1

WxLua — использование WxWidgets из Lua-скриптов

Posted: Tue 26 Nov, 2019 07:45
by IgorZ
Наверное, многие слышали про кроссплатформенную графическую библиотеку WxWidgets, а кто-то, возможно даже использует её. Не так давно я обнаружил, что она адаптирована и для Lua: WxLua. Теперь, найдя, наконец, время, решил поделиться с сообществом.

Достоинства: довольно легко и просто делать графические скрипты для Far. Надо ли это? Ну, пусть лучше будет такая возможность, чем нет.

Недостатки:
  • при возникновении ошибки может подвесить или уронить Far, поэтому требует большей аккуратности при написании скриптов;
  • переопределяет функцию _G.print, что приводит к ошибкам при попытке обратиться к print с привычными параметрами. Способы борьбы:
    • вручную заменить все вызовы print на mf.print (на мой взгляд, разумно для своих скриптов, особенно для выкладываемых публично);
    • в _macroinit.lua добавить следующий фрагмент:

      Code: Select all

      pcall(require,"wx")
      _G.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 бит, но там же есть и исходники, так что желающие могут скомпилировать сами.

Документация: Ну и для затравки - простенький скрипт для просмотра графических файлов.

WxLua

Posted: Tue 26 Nov, 2019 16:21
by citRiks
IgorZ wrote: Tue 26 Nov, 2019 07:45 скомпилированная версия имеется только для 32 бит
А нельзя ли для тех, кто сам не собирает, сделать версию и под x64, и приложить здесь или к скрипту?

WxLua

Posted: Tue 26 Nov, 2019 16:44
by buniak_a_h
citRiks, +1

WxLua

Posted: Tue 26 Nov, 2019 17:20
by John Doe

WxLua

Posted: Tue 26 Nov, 2019 17:49
by zg
John Doe wrote: Tue 26 Nov, 2019 17:20 Гуглится вот это https://dl.bintray.com/muhkuh/Muhkuh/or ... ua/2.8.12/
там в экспортах такое _Z22wxInitAllImageHandlersv, поэтому нет.

WxLua

Posted: Wed 27 Nov, 2019 09:49
by IgorZ
citRiks wrote: Tue 26 Nov, 2019 16:21
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, и считаю это достаточно разумным.

WxLua — использование WxWidgets из Lua-скриптов

Posted: Tue 03 Dec, 2019 05:27
by IgorZ
John Doe wrote: Mon 02 Dec, 2019 14:10
IgorZ wrote: Tue 26 Nov, 2019 07:45 вручную заменить все вызовы print на mf.print (на мой взгляд, разумно разве что для выкладываемых публично макросов);
Давно использую именно mf.print, и считаю это достаточно разумным.
Если использовать только свои скрипты, то да, к тому же, предотвращает потенциальные проблемы у остальных пользователей этого скрипта. А если у человека много чужих, да ещё регулярно обновляющихся? Каждый раз после скачивания проверять скрипт и заменять вручную (да ещё и учитывать, что автор из своих соображений может, скажем, определить в файле свою локальную функцию print, так что автозамена не метод)? А вариант с добавлением двух строк в _macroinit.lua универсален, прост и снимает данную проблему полностью, так что для большинства пользователей предпочтительнее.

P. S. Уточню формулировку насчёт способов борьбы.

WxLua — использование WxWidgets из Lua-скриптов

Posted: Tue 03 Dec, 2019 07:08
by buniak_a_h
zg wrote: Tue 26 Nov, 2019 17:49
John Doe wrote: Tue 26 Nov, 2019 17:20 Гуглится вот это https://dl.bintray.com/muhkuh/Muhkuh/or ... ua/2.8.12/
там в экспортах такое _Z22wxInitAllImageHandlersv, поэтому нет.
Однако работает …

WxLua — использование WxWidgets из Lua-скриптов

Posted: Tue 03 Dec, 2019 08:40
by John Doe
IgorZ wrote: Tue 03 Dec, 2019 05:27 Каждый раз после скачивания проверять скрипт и заменять вручную
При возникновении реального конфликта можно сообщить автору, и вероятнее всего он сам исправит раз и навсегда.

А с какой целью библиотекой переопределяется print?
Подозреваю что это может настраиваться.
(хотя не похоже чтобы было просто: https://www.mail-archive.com/wxlua-user ... 01491.html)

WxLua — использование WxWidgets из Lua-скриптов

Posted: Wed 04 Dec, 2019 05:38
by IgorZ
John Doe wrote: Tue 03 Dec, 2019 08:40
IgorZ wrote: Tue 03 Dec, 2019 05:27 Каждый раз после скачивания проверять скрипт и заменять вручную
При возникновении реального конфликта можно сообщить автору, и вероятнее всего он сам исправит раз и навсегда.
Вполне возможно. Но возможны и варианты. А пользователю, как правило, удобнее всего сделать то, что делается единожды, не слишком сложно, при этом работает сразу и с гарантированным результатом. Так что написать автору лишним не будет, но и ждать, когда он выложит исправленную версию - вариант не для всех и не в любой ситуации.
John Doe wrote: Tue 03 Dec, 2019 08:40 А с какой целью библиотекой переопределяется print?
Подозреваю что это может настраиваться.
(хотя не похоже чтобы было просто: https://www.mail-archive.com/wxlua-user ... 01491.html)
Поначалу предполагал, что он должен выводить текст на графическую форму. Но проверка показала, что всё сложнее. Так что нашёл и проверил обходное решение и отложил разбор до поры, когда не будет более важных проблем.

WxLua — использование WxWidgets из Lua-скриптов

Posted: Tue 31 Dec, 2019 06:03
by IgorZ
citRiks wrote: Mon 30 Dec, 2019 21:48 IgorZ,

М.б. стоит обратить внимание ещё на один нюанс, связанный с сабжевым скриптом.

  1. Это относится к библиотеке, а не к данному скрипту. Соответственно, Вашему посту место в теме библиотеки. Примите во внимание на будущее.
  2. С библиотекой, к сожалению, ничего не сделать. Если только найдётся энтузиаст, который подхватит выпавшее из рук автора знамя; благо, исходные тексты в наличии.