Alexyz21
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору shmuz, не знаю, не знаю... - учитывая, что код выделения используя панельное API практически такой же по количеству строк: Код: local pc=ffi.cast("struct PluginStartupInfo*",far.CPluginStartupInfo()).PanelControl pc(PANEL_ACTIVE,"FCTL_BEGINSELECTION",0,NULL) for Item=1,ItemsNumber do local GPItem=panel.GetPanelItem(nil,1,Item) pc(PANEL_ACTIVE,"FCTL_SETSELECTION",Item-1,(GPItem.FileAttributes:find("d") or process(GPItem.FileName,ChkBOX)==0) and pBL0 or pBL1) end pc(PANEL_ACTIVE,"FCTL_ENDSELECTION",0,NULL) pc(PANEL_ACTIVE,"FCTL_REDRAWPANEL",0,NULL) | пользователь по факту ничего не выигрывает (тут я немножко лукавлю, нужно определить сначала константы): Код: local ffi = require'ffi' local NULL = ffi.cast("void*",0) local PANEL_ACTIVE = ffi.cast("HANDLE",-1) local pBL0,pBL1 = ffi.cast("BOOL*",0),ffi.cast("BOOL*",1) | Совсем другое дело, если бы одной lua-функцией можно было бы заменить 4-е панельных - begin/select false/select true/end - был бы явный выигрыш, причём не только в строках, но и во времени выполнения выделения на панели, плюс никакой ломки существующих скриптов у пользователей - сплошной PROFIT! И всего-то было добавить 1 аргумент integer/array with not selection с copy-paste уже имеющегося цикла. Ну нет такой универсальной функции в FAR API, да и не обязано быть - API всё-таки в первую очередь мелкие, базовые "кирпичики". LUAFAR API в этом отношении мог быть бы и более продвинут - время вызова из плагина FAR API и из LUA скрипта различаются быстрее всего не в пользу последнего. Добавлено: Цитата: Спасибо за выявление проблемы. | Уже предчувствую анафему от пользователей в свой адрес за это | Всего записей: 3673 | Зарегистр. 16-06-2007 | Отправлено: 18:08 16-08-2019 | Исправлено: Alexyz21, 18:54 16-08-2019 |
|