Alt+F6 - тип ссылки по умолчанию

Здесь обсуждается всё, что касается макросов.
Pasha_ZZZ
Posts: 181
Joined: Mon 12 Jun, 2006 14:58
Been thanked: 4 times
Contact:

Alt+F6 - тип ссылки по умолчанию

Post by Pasha_ZZZ »

Latest post of the previous page:

buniak_a_h wrote: Fri 11 Sep, 2020 10:08назначил Event на DE_DLGPROCINIT
Это и хочу
buniak_a_h wrote: Fri 11 Sep, 2020 10:08в condition сделал проверку GUID-а диалога
Это легко. А по какому принципу работает condition? Что-то кудато надо вернуть или присвоить, чтобы action отработал (или не отработал)?

И уже чисто для спортивного интереса: как вызвать какой-нибудь диалог по GUID, а не через Keys?
Pasha_ZZZ
Posts: 181
Joined: Mon 12 Jun, 2006 14:58
Been thanked: 4 times
Contact:

Alt+F6 - тип ссылки по умолчанию

Post by Pasha_ZZZ »

Code: Select all

  action = function(Event, Param)
    local hDlg = Param.hDlg
    local Dlg = hDlg:send(F.DM_GETDIALOGINFO)
    if not Dlg == nil then
Внутрь if никогда не попадает, как будто Dlg всегда nil
buniak_a_h
Posts: 2854
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 154 times
Been thanked: 406 times
Contact:

Alt+F6 - тип ссылки по умолчанию

Post by buniak_a_h »

Pasha_ZZZ wrote: Fri 11 Sep, 2020 11:04 А по какому принципу работает condition?
Для макросов вернуть должен true / false или nil - выполнять или нет action; либо число - приоритет (вместо priority)
Для Event - про true/false аналогично, про число - не знаю. Вроде, нет смысла…
Pasha_ZZZ wrote: Fri 11 Sep, 2020 11:04 как вызвать какой-нибудь диалог по GUID
«Вызвать» диалог нельзя - это не программа. Можно вызвать программу, выводящую диалог. Если диалог выводится плагином - найти его и запустить соответствующий пункт. Если макросом - найти макрос и вызвать его action.
Для формирования внешне аналогичного диалога у меня есть макрос, выводящий все элементы диалога. Правда, хендлер диалога всё равно придётся писать самому
Pasha_ZZZ
Posts: 181
Joined: Mon 12 Jun, 2006 14:58
Been thanked: 4 times
Contact:

Alt+F6 - тип ссылки по умолчанию

Post by Pasha_ZZZ »

buniak_a_h wrote: Fri 11 Sep, 2020 13:16вернуть должен true / false или nil - выполнять или нет action
true = выполнять, в остальных случаях - не выполнять?
buniak_a_h wrote: Fri 11 Sep, 2020 13:16«Вызвать» диалог нельзя - это не программа
Живой пример - как из макроса запустить диалог, который показывается через Keys("AltF6"), нормальным образом?
Вызвать, запустить или отобразить - это неважно. Присутствующая функа DialogRun всем своим филологическим смыслом намекает, что можно.
User avatar
HaRT
Moderator
Posts: 9774
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 128 times
Been thanked: 267 times

Alt+F6 - тип ссылки по умолчанию

Post by HaRT »

Pasha_ZZZ wrote: Fri 11 Sep, 2020 18:01 как из макроса запустить диалог, который показывается через Keys("AltF6"), нормальным образом?
Только через Keys, но для решения вашей задачи это не требуется. Если вы всё же возьмёте на себя труд разобраться, как работает Dialog_Maximize.moon, а также что вам говорят искушённые скриптописатели, то сможете сделать несложный скрипт, который будет предвыбирать нужный тип ссылки. А разводить тут пустую говорильню незачем.
Фар есть инструмент, а не нянька. © 2009 DrKnS
buniak_a_h
Posts: 2854
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 154 times
Been thanked: 406 times
Contact:

Alt+F6 - тип ссылки по умолчанию

Post by buniak_a_h »

Pasha_ZZZ, Развёрнутый ответ в личке, т.к. здесь за обучение наказывают.
User avatar
HaRT
Moderator
Posts: 9774
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 128 times
Been thanked: 267 times

Alt+F6 - тип ссылки по умолчанию

Post by HaRT »

 ! Message from: HaRT
buniak_a_h wrote: Fri 11 Sep, 2020 19:08 здесь за обучение наказывают
Это ложь. Не надо так. Обсуждать тут тоже не надо.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Pasha_ZZZ
Posts: 181
Joined: Mon 12 Jun, 2006 14:58
Been thanked: 4 times
Contact:

Alt+F6 - тип ссылки по умолчанию

Post by Pasha_ZZZ »

HaRT wrote: Fri 11 Sep, 2020 18:27Если вы всё же возьмёте на себя труд разобраться
Скрипт уже давно работает, в своем первоначально опубликованном варианте.
Изначально он выглядел совсем убого, потом что-то подвинулось... но ненамного.
Хотелось бы нормального апи вместо блевотины с Keys, но такая тема, видимо, не предусмотрена...
Last edited by Pasha_ZZZ on Fri 11 Sep, 2020 20:38, edited 1 time in total.
User avatar
HaRT
Moderator
Posts: 9774
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 128 times
Been thanked: 267 times

Alt+F6 - тип ссылки по умолчанию

Post by HaRT »

Pasha_ZZZ wrote: Fri 11 Sep, 2020 20:38 Хотелось бы нормального апи вместо блевотины с Keys
Sapienti sat
Фар есть инструмент, а не нянька. © 2009 DrKnS
Pasha_ZZZ
Posts: 181
Joined: Mon 12 Jun, 2006 14:58
Been thanked: 4 times
Contact:

Alt+F6 - тип ссылки по умолчанию

Post by Pasha_ZZZ »

HaRT wrote: Fri 11 Sep, 2020 20:42Sapienti sat
Ну да, "умному достаточно" некоей эмуляции нажатия клавиш... Этот умный точно умом обладает?
Возможность инициировать что-либо только по некоей последовательности клавиш - безусловно умный придумал.
Ни в одной проге такого нет, там дураки придумывают какие-то интерфейсы, диспетчеры, маршаллинг. А надо было всего лишь хоткеями загрузиться!
buniak_a_h
Posts: 2854
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 154 times
Been thanked: 406 times
Contact:

Alt+F6 - тип ссылки по умолчанию

Post by buniak_a_h »

Pasha_ZZZ wrote: Fri 11 Sep, 2020 20:49 Ни в одной проге такого нет
Ни в одной проге нет "вызова" диалога без вызова процедуры, создающей и управляющей диалогом.
Pasha_ZZZ
Posts: 181
Joined: Mon 12 Jun, 2006 14:58
Been thanked: 4 times
Contact:

Alt+F6 - тип ссылки по умолчанию

Post by Pasha_ZZZ »

Pasha_ZZZ wrote: Fri 11 Sep, 2020 11:27

Code: Select all

  action = function(Event, Param)
    local hDlg = Param.hDlg
    local Dlg = hDlg:send(F.DM_GETDIALOGINFO)
    if not Dlg == nil then
Внутрь if никогда не попадает, как будто Dlg всегда nil
А почему все-таки Dlg всегда nil?
Замена hDlg:send на far.SendDlgMessage тоже не помогает.
User avatar
zg
zero-gravity
Posts: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 158 times
Contact:

Alt+F6 - тип ссылки по умолчанию

Post by zg »

Pasha_ZZZ wrote: Wed 23 Sep, 2020 13:19А почему все-таки Dlg всегда nil?
может быть, потому что приоритет not выше, чем у ==?
buniak_a_h
Posts: 2854
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 154 times
Been thanked: 406 times
Contact:

Alt+F6 - тип ссылки по умолчанию

Post by buniak_a_h »

Pasha_ZZZ, на самом деле в LUA часто вместо if not (Dlg == nil) (или if Dlg ~= nil) часто используется просто if Dlg. Рекомендую…
Last edited by buniak_a_h on Wed 23 Sep, 2020 14:46, edited 1 time in total.
Pasha_ZZZ
Posts: 181
Joined: Mon 12 Jun, 2006 14:58
Been thanked: 4 times
Contact:

Alt+F6 - тип ссылки по умолчанию

Post by Pasha_ZZZ »

buniak_a_h wrote: Wed 23 Sep, 2020 14:45часто используется просто if Dlg. Рекомендую…
Где-то встречал про эту проверку, и получающийся байткод после компиляции. if nil был в нем самым неэффективным.
Pasha_ZZZ
Posts: 181
Joined: Mon 12 Jun, 2006 14:58
Been thanked: 4 times
Contact:

Alt+F6 - тип ссылки по умолчанию

Post by Pasha_ZZZ »

zg wrote: Wed 23 Sep, 2020 14:03может быть, потому что приоритет not выше, чем у ==?
Именно, спасибо.
Почему-то в экшне по ивенту не работает if Dlg.Id == far.Guids.HardSymLinkId then, хотя по хоткею та же самая строчка работает.
far.Message вообще валит фар в ивенте
Post Reply

Return to “Обсуждение макросов”