Latest post of the previous page:
Огромное спасибо Shmuel и John Doe, макрос работает!Макрос возвращающий поиску прежнее поведение
- PaperbackWriter
- Posts: 121
- Joined: Mon 21 Jan, 2013 10:24
- Location: РФ, Южный Федеральный Округ
- Has thanked: 14 times
- Been thanked: 1 time
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Re: Макрос возвращающий поиску прежнее поведение
Обновил.
С автодополнением приходится бороться.
А именно, добавить ещё одну макрообласть (это с недавних пор, а раньше вообще нужен был отдельный макрос)
И предусмотреть код для закрытия автодополнение при его наличии
Довольно бредово это - в каждый (!!!) макрос пихать такие workarounds.
Полагаю надо что-то менять в консерватории.
P.S.
Ранее с этим не сталкивался, потому что давно отключил автодополнение.
С автодополнением приходится бороться.
А именно, добавить ещё одну макрообласть (это с недавних пор, а раньше вообще нужен был отдельный макрос)
Code: Select all
area="Dialog DialogAutoCompletion"
Code: Select all
if Area.DialogAutoCompletion then Keys("Esc") end
Полагаю надо что-то менять в консерватории.
P.S.
Ранее с этим не сталкивался, потому что давно отключил автодополнение.
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Re: Макрос возвращающий поиску прежнее поведение
Тот же макрос но на основе событий.
Update
Продолжение в теме http://forum.farmanager.com/viewtopic.php?f=15&t=8435
Code: Select all
local UUID_DLG_FindFile = win.Uuid("8C9EAD29-910F-4B24-A669-EDAFBA6ED964")
-- Это надо бы вычислять
local inputBoxPos = 2 -- 2 - индекс строки ввода
local defButtonPos = 22 -- индекс кнопки { Find }
Event{
group="DialogEvent";
condition=function(Event,param)
return Event==far.Flags.DE_DLGPROCINIT
and param.Msg==far.Flags.DN_CLOSE
and param.Param1==defButtonPos
and far.SendDlgMessage (param.hDlg, far.Flags.DM_GETDIALOGINFO).Id
==UUID_DLG_FindFile
end;
action=function(Event,param)
local s = far.SendDlgMessage (param.hDlg, far.Flags.DM_GETTEXT, inputBoxPos)
if s:sub(1,1)~="/" then
if not s:find("[%.*?]") then s=s.."*" end
else
if not s:find("/",2) then s=s.."/i" end
end
far.SendDlgMessage (param.hDlg, far.Flags.DM_SETTEXT, inputBoxPos, s)
end;
}
Продолжение в теме http://forum.farmanager.com/viewtopic.php?f=15&t=8435
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Re: Макрос возвращающий поиску прежнее поведение
Вариант макроса, хоть и не на основе событий, но добавлена фича - в историю попадает то, что ввёл пользователь (т.е., без добавленых * и пр.)
П.С.
В моём варианте добавляется * как в конец маски, так и в начало
П.С.
В моём варианте добавляется * как в конец маски, так и в начало
Разум когда-нибудь победит.
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Re: Макрос возвращающий поиску прежнее поведение
Разве ж Dlg.SetFocus заменить на SendDlgMessage.John Doe wrote:Аццкая смесь "апи 1" и "апи 2"
А, вообще, есть ли какие аргументы против такого смешивания (кроме того, что не кошерно выглядит)?
Разум когда-нибудь победит.
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Re: Макрос возвращающий поиску прежнее поведение
http://api.farmanager.com/ru/dialogapi/ ... focus.htmlSmitis wrote:Разве ж Dlg.SetFocus заменить на SendDlgMessage.
В данном случае 3й элемент сразу активен, я не понял зачем у вас дополнительные действия.
А выглядит некошерно?Smitis wrote:А, вообще, есть ли какие аргументы против такого смешивания (кроме того, что не кошерно выглядит)?
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Re: Макрос возвращающий поиску прежнее поведение
Некоторые паттерны сразу дают понять, что человек ещё не разобрался в Lua.
Если бы разобрался - то такое сразу убрал бы if mf.index(mask,".") < 0 and mf.index(mask,"*") < 0 and mf.index(mask,"?") < 0 then
А смешение апи как правило означает, что человек плохо себе представляет как работает фар изнутри.
(это нормально, не все ведь плагинописатели)
Хотя действительно, в macro api есть некоторые уникальные возможности.
А множество "неуникальных" - значительно компактней чем аналоги из luafar api.
Только надо отдавать себе отчёт, что эта внешняя компактность может выливаться во внутреннюю неоптимальность кода.
(Раньше производительность была не критична, но теперь у нас есть доступ к событиям, а значит скрипт может вызываться 100 раз в секунду.)
На месте автора LuaMacro я бы удалил (со временем) всё такое дублирование.
А вместо него можно сделать себе шорткаты типа Dlg.Id=function(hDlg) return far.SendDlgMessage(hDlg,far.Flags.DM_GETDIALOGINFO).Id end
Если бы разобрался - то такое сразу убрал бы if mf.index(mask,".") < 0 and mf.index(mask,"*") < 0 and mf.index(mask,"?") < 0 then
А смешение апи как правило означает, что человек плохо себе представляет как работает фар изнутри.
(это нормально, не все ведь плагинописатели)
Хотя действительно, в macro api есть некоторые уникальные возможности.
А множество "неуникальных" - значительно компактней чем аналоги из luafar api.
Только надо отдавать себе отчёт, что эта внешняя компактность может выливаться во внутреннюю неоптимальность кода.
(Раньше производительность была не критична, но теперь у нас есть доступ к событиям, а значит скрипт может вызываться 100 раз в секунду.)
На месте автора LuaMacro я бы удалил (со временем) всё такое дублирование.
А вместо него можно сделать себе шорткаты типа Dlg.Id=function(hDlg) return far.SendDlgMessage(hDlg,far.Flags.DM_GETDIALOGINFO).Id end
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Re: Макрос возвращающий поиску прежнее поведение
Да, пока изучаю, как Lua так и FAR api. Приходится много экспериментировать. SetFocus остался от более полного макроса, где устанавливались чекбоксы.
Разум когда-нибудь победит.