John Doe wrote: Tue 01 Apr, 2025 21:15Но внутреннюю логику придётся вывернуть не совсем естественным образом.
не очень понимаю, что значит «вывернуть» (интуитивно догадываюсь, что что-то типа внешние циклы стали внутренними и наоборот, либо порядок выполнения поменялся на обратный, но как-то это с реальностью не стыкуется) и что значит «естественным»? не могли бы вы более формально это всё объяснить? чтобы вам проще было, я написал простой пример показа содержимого буфера обмена для индивидуальных aot (работает на последней сборке):
Code: Select all
F=far.Flags
items={{"DI_TEXT",0,0,9,0,0,0,0,0,""}}
dialogs={}
timer=far.Timer 5000,->for _,dialog in pairs dialogs do far.SendDlgMessage dialog,F.DM_SETTEXT,1,(mf.clip 0)
Event
group:'ExitFAR'
action:->timer\Close!
Event
group:"EditorEvent"
action:(id,Event)->
if Event==F.EE_CLOSE
far.DialogFree dialogs[id]
dialogs[id]=nil
elseif Event==F.EE_GOTFOCUS and not dialogs[id]
einfo=editor.GetInfo id
dialogs[id]=far.DialogInit win.Uuid'c83affff-a10f-4dce-896b-087593f7e69d',einfo.WindowSizeX-10,einfo.WindowSizeY,einfo.WindowSizeX-1,einfo.WindowSizeY,nil,items,(bit64.bor F.FDLG_NODRAWSHADOW,F.FDLG_STAY_ON_TOP)
и пример, который мог бы работать, если бы в фаре была реализованы глобальные aot:
Code: Select all
F=far.Flags
items={{"DI_TEXT",0,0,9,0,0,0,0,0,""}}
dialog=far.DialogInit win.Uuid'c83affff-a10f-4dce-896b-087593f7e69d',0,0,0,10,nil,items,(bit64.bor F.FDLG_NODRAWSHADOW,F.FDLG_STAY_ON_TOP_GLOBAL)
far.SendDlgMessage dialog,F.DM_SHOWDIALOG,0
timer=far.Timer 5000,->far.SendDlgMessage dialog,F.DM_SETTEXT,1,(mf.clip 0)
Event
group:'ExitFAR'
action:->
timer\Close!
far.DialogFree dialog
Event
group:"EditorEvent"
action:(id,Event)->
if Event==F.EE_GOTFOCUS and not dialogs[id]
einfo=editor.GetInfo id
far.SendDlgMessage dlg,F.DM_MOVEDIALOG,1,{X:einfo.WindowSizeX-10,Y:einfo.WindowSizeY}
far.SendDlgMessage dialog,F.DM_SHOWDIALOG,1
elseif Event==F.EE_KILLFOCUS
far.SendDlgMessage dialog,F.DM_SHOWDIALOG,0
хотелось бы понять, какой код из второго примера неестественно вывернулся в какой код из первого примера.
John Doe wrote: Tue 01 Apr, 2025 21:15Я не предлагаю убирать персональные оверлеи в пользу общих.
не предлагаете.
John Doe wrote: Tue 01 Apr, 2025 21:15Я исходил из того что возможны оба варианта одновременно.
так и есть. более того, они практически независимы.
John Doe wrote: Tue 01 Apr, 2025 21:15Это что наезд такой?
нет.
John Doe wrote: Tue 01 Apr, 2025 21:15Я оба варианта сам придумал.
второй вариант очевиден, если из первого примера кода убрать таймер, получится код, которым я тестировал работу будущего 6454 в редакторе. а первый пример — эмуляция глобального окна одним локальным. и естественно он во всём проигрывает глобальному варианту.
John Doe wrote: Tue 01 Apr, 2025 21:15Ответ "Зачем" второй пример уже есть в обрезанной части цитаты.
вы про этот кусок:
John Doe wrote: Tue 01 Apr, 2025 10:10
Да, он изначально приведён "для веса", с целью демонстрации того что может понадобиться не просто показывать оверлей "всегда", а управлять видимостью динамически.
? если да, то тут два утверждения:
- пример — для веса. любой пример, приведённый для веса — манипуляция.
- необходимость управления видимостью. аот — это диалог. там есть DM_SHOWDIALOG уже 20+ лет, управляйте сколько влезет, не понимаю, зачем на этом вообще внимание заострять?