Поведение, когда нужно сделать выбор из нескольких макросов

Здесь обсуждается всё, что касается макросов.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: Поведение, когда нужно сделать выбор из нескольких макро

Post by Smitis »

Latest post of the previous page:

Теоретически, левый и правый Shift то же можно различать.
А что бы не возится с битами - именованные константы. Или даже внутренняя функция, возвращаяющая логическое значение. Извращатся можно любым безумным способом
key="CtrlAltShiftA"; condition=shifts(RCtrl,LCtrl,LAlt)
- одновременно нажаты два Ctrl, левый Alt, любой Shift и A. :)
Разум когда-нибудь победит.
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Поведение, когда нужно сделать выбор из нескольких макро

Post by SUSim »

И всё таки, при нескольких макросах на одну клавишу, для которой есть стандартное действие FARа, при появлении меню (макросы с одинаковым приоритетом), надо добавить в меню стандартную клавишу FARа и ничего не делать при отмене меню!
SimSU ··· ·· -- ··· ··-
EGez
Posts: 145
Joined: Thu 04 Oct, 2012 13:53
Location: Hamburg, DE
Has thanked: 2 times
Been thanked: 2 times

Re: Поведение, когда нужно сделать выбор из нескольких макро

Post by EGez »

John Doe wrote:Недовольные говорите?
Не знаю кто тут недоволен, а я лично искренне и глубоко недоумеваю.

Действительно ли будет хорошим решением, если "/RAlt/" не перекроет "Alt"??
Может я просто чего-то не понимаю?
Объясните хоть кто-нибудь, раз автор обиделся.
Данное перекрывание, на старый лад, реализованно в самом Фаре, если же вы хотите использовать регулярные выражения, тогда, по моему, придется вообще все клавиши делить на LAlt/RAlt, LCtrl/RCtrl и выкинуть при этом Alt (как AnyAlt) и Ctrl (как AnyCtrl). В таком случае AnyAlt придется задавать регулярным выражением /.Alt/, а конкретные как /LAlt/ и /RAlt/.

Если же клавиши не разделить, то как вы думаете, Фар угадает, что было нажато, Alt (как AnyAlt) или Alt (как LAlt/RAlt)?? И правильно вам сказали, у регулярных выражений есть только "да, подходит" и "нет, не подходит", и нет таких понятий как "это подходит больше чем то". А дальше, сформировав один раз название клавиш и передав его на поиск по регулярным выражениям мы получаем ровно то, что нам скажут эти регулярные выражения. И менять это поведение на ДАННОМ УРОВНЕ никакого смысла нет, ибо тогда оно уже будет называться извращением.

И получается, все еще на старый лад, что /R?Alt/ вовсе не обязан перекрыть /.Alt/ или "Alt", т.к. "да, подходит" действительно для двоих, а там уже либо кто вперед, либо приоритет.

EDIT:
Либо, еще вариант, перебирать все возможности, сначала искать по старому и по регулярным выражениям для клавиш с модификаторами как есть и повторять поиск постепенно вынимая все модификаторы по одному.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Поведение, когда нужно сделать выбор из нескольких макро

Post by Max Rusov »

EGez wrote:...много букв...
Вам не кажется, что все эти теоретические рассуждения опровергаются практикой?

И все работает.
baldr
Posts: 16
Joined: Wed 07 Mar, 2012 11:10

Re: Поведение, когда нужно сделать выбор из нескольких макро

Post by baldr »

Max Rusov wrote:Вам не кажется, что все эти теоретические рассуждения опровергаются практикой?

И все работает.
Это работает в стоковом Far? "Сомненья смутные меня терзают." ;-)

Идея ведь не в том, что MacroLib (честь ей и хвала) работает так, а в том, что в оригинале так не удаётся.

Вкратце (как неоднократно уже сказано было): просто "Alt" или "Ctrl" или "Shift" -- это любой из них, а при конкретном указании -- конкретный (c "Shift", если верно помню, всё непросто). Ну и как с селекторами в CSS -- более специфицированный бьёт.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Поведение, когда нужно сделать выбор из нескольких макро

Post by Shmuel »

baldr wrote:Идея ведь не в том, что MacroLib (честь ей и хвала) работает так, а в том, что в оригинале так не удаётся.
Ну почему не удаётся? Просто "о вкусах не спорят". Макролибовское решение вполне нормальное и рабочее, но это не значит, что оно единственное или самое лучшее. То, что сделано сейчас в Фаре, это было первое приближение (и прошла всего неделя). Будут внесены коррекции, но по всей вероятности решение будет отличаться от макролибовского.
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Поведение, когда нужно сделать выбор из нескольких макро

Post by SUSim »

Что-то надо делать с коммон:
есть макрос в Shell с приоритетом 0,
есть макрос в Common с приоритетом 50.
Ожидал что Common макрос перекроет Shellовский, ан нет...
Что посоветуете?
SimSU ··· ·· -- ··· ··-
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Поведение, когда нужно сделать выбор из нескольких макро

Post by SUSim »

Придумал - в Common макросе добавил область Shell :)
SimSU ··· ·· -- ··· ··-
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Поведение, когда нужно сделать выбор из нескольких макро

Post by zg »

а нужна ли в текущей ситуации область common?
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Поведение, когда нужно сделать выбор из нескольких макро

Post by SUSim »

лучше оставить, а то перечислять очень много...
SimSU ··· ·· -- ··· ··-
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Поведение, когда нужно сделать выбор из нескольких макро

Post by zg »

SUSim wrote:лучше оставить, а то перечислять очень много...
внутри фара. при задании области коммон просто раскрывать макрос на все области.
User avatar
Aidar
Posts: 541
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 7 times
Contact:

Re: Поведение, когда нужно сделать выбор из нескольких макро

Post by Aidar »

zg wrote:
SUSim wrote:лучше оставить, а то перечислять очень много...
внутри фара. при задании области коммон просто раскрывать макрос на все области.
По-моему, не нужно.
Текущее поведение позволяет перекрыть общий макрос в Common специальным для конкретной области (напр., Shell).
Кроме того, в текущем варианте для области Shell выберется Shell-макрос, а при раскрытии (и равенстве приоритетов) будет меню из двух макросов - из Common-Shell и из Shell.
Кому нужно второе поведение, тот впишет дополнительно к Common область Shell - как это сделал SUSim.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Поведение, когда нужно сделать выбор из нескольких макро

Post by John Doe »

shmuel 13.01.2013 11:40:40 +0200 - build 3078 wrote:

Code: Select all

1.4. Спецификации ключей не имеют приоритетов друг перед другом.
     Если есть макросы 1 (key="RCtrlX"), 2 (key="CtrlX") и 3 (key="/.CtrlX/"), то при нажатии RCtrlX все они
     будут рассматриваться на одинаковых основаниях, а выбор будет производиться по совокупности заданных полей:
     flags (включая возможный вызов callback для макросов MCTL_ADDMACRO), condition и priority.
Т.е. просто "перегрузить" обобщённое значение точным (как раньше) теперь нельзя.
Нет больше такого механизма.
Надо использовать приоритеты (или условия).

Но что такое этот callback?
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Поведение, когда нужно сделать выбор из нескольких макро

Post by Shmuel »

John Doe wrote:Т.е. просто "перегрузить" обобщённое значение точным (как раньше) теперь нельзя.
Нет больше такого механизма.
Надо использовать приоритеты (или условия).
Этот механизм убран, потому что получалось слишком много механизмов, а условия или приоритеты успешно решают эту же задачу.
John Doe wrote:Но что такое этот callback?
Это актуально только для плагинописателей. Плагин может добавить макросы во время своей работы (см. MCTL_ADDMACRO), а callback в этом случае является аналогом condition (только он не на Lua, а на C, Pascal и т.п.).
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Поведение, когда нужно сделать выбор из нескольких макро

Post by John Doe »

shmuel 13.01.2013 11:40:40 +0200 - build 3078 wrote:

Code: Select all

1.6. Макросы, назначенные на область "Common", имеют приоритет по умолчанию = 40.
Т.е. поведение по умолчанию не изменилось, и например макрос из Shell перекроет Common.
Но при необходимости можно поднять приоритет макроса из Common, и тогда он будет иметь приоритет.

Стало гибче. Имхо слишком гибко.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Поведение, когда нужно сделать выбор из нескольких макро

Post by John Doe »

Возвращаясь к прошлому обсуждению:
Shmuel wrote:
John Doe wrote:Зачем множить сущности?
Я вижу только усложнение.
Со стороны это может показаться так. Детально объяснять сейчас нет времени. Когда что-то живое появится, можно будет говорить конкретнее.
Живое появилось, и хотелось бы поговорить конкретнее.


Т.е. появилась новая сущность, да ещё и с собственным форматом.
1) Почему бы не продолжать хранить их как раньше и в прежнем формате?
2) Почему вообще понадобилось отдельная сущность?
Post Reply

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