Лево-/правосторонние модификаторы в макросах

Здесь обсуждается всё, что касается макросов.
User avatar
HaRT
Moderator
Posts: 7988
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 66 times
Been thanked: 99 times

Re: Far 3: Как теперь работать с макросами?

Post by HaRT » Wed 05 Dec, 2012 12:55

Latest post of the previous page:

2useven10 wrote:нет нейтральных модификаторов, то что без R - левый (shift это отдельная история)
Понятное дело, что если клавиша-модификатор нажимается, то она либо левая, либо правая; я и не предлагаю ввести какую-то ещё нейтральную. Речь идёт о привязке макросов к комбинациям с клавишами-модификаторами. Тут-то и было бы удобно иметь нейтральную привязку (binding), которая бы срабатывала и для левых, и для правых, если для них не прописаны специализированные собственные привязки. Нечто вроде наследования и перегрузки.
Фар есть инструмент, а не нянька. © 2009 DrKnS

2useven10
Posts: 2956
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 78 times

Re: Far 3: Как теперь работать с макросами?

Post by 2useven10 » Wed 05 Dec, 2012 13:08

HaRT
Слишком много возни.
Придётся таки вводить понятие левых и нейтральных модификаторов (для привязки).
Перелопатить много кода, чтобы это отрабатывать, потом привнесённые баги править...
В итоге получим почти то, что есть сейчас есть, хотя конечно в более 'чистом' виде.

User avatar
SUSim
Posts: 1471
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 4 times
Been thanked: 3 times

Re: Far 3: Как теперь работать с макросами?

Post by SUSim » Wed 05 Dec, 2012 18:57

Если это сложно то фик с ними... но исполнить макрос с Ctrl при нажатии Rctrl необходимо! (раньше вроде было, почему потерялось?)
а приоритет Lctrl над Ctrl это задача фара, ни кто не просит различать левый/правый Shift - ЭТО ДЕЙСТВИТЕЛЬНО одна клавиша.
повторюсь, в идеале:
нажали левый констроль и если есть макрос именно на Lctrl то исполняем его, если макроса на Lctrl нет, то исполняем макрос на ctrl,
нажали правый констроль и если есть макрос именно на Rctrl то исполняем его, если макроса на Rctrl нет, то исполняем макрос на ctrl...
(под ctrl я понимаю клавиши Ctrl, Alt, Win)

Но если это очень трудоёмко, то пусть будет как раньше = при нажатии Rctrl срабатывает макрос на Rctrl или макрос на Ctrl - если макроса на Rctrl нет...
SimSU ··· ·· -- ··· ··-

Smitis
Posts: 1441
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 12 times
Been thanked: 23 times
Contact:

Re: Названия клавиш и InputRecordToName

Post by Smitis » Wed 27 Feb, 2013 07:46

В 3078 произошло разделение модификаторов на точные и обобщённые. InputRecordToName по прежнему возвращает для левых модификаторов Ctrl Alt Shift без L. Но иногда точные модификаторы и не нужны, что бы не плодить "лишних" условий.
Наверное, надо сделать что-то типа
KeyComb=far.InputRecordToName(Input) или KeyComb=far.InputRecordToName(Input,nil) - возвращать с обобщенными модификаторами
KeyComb=far.InputRecordToName(Input,false) - возвращать с точными модификаторами
Ctrl,Alt,Shift,Key = far.InputRecordToName(Input,true) - всегда точные модификаторы
Ну, или ещё как поиграть со вторым параметром.
Разум когда-нибудь победит.

Shmuel
Posts: 5049
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

Re: Названия клавиш и InputRecordToName

Post by Shmuel » Wed 27 Feb, 2013 11:45

Smitis wrote:В 3078 произошло разделение модификаторов на точные и обобщённые. InputRecordToName по прежнему возвращает для левых модификаторов Ctrl Alt Shift без L.
Обобщённые модификаторы существуют только в спецификациях макросов.
Функция far.InputRecordToName не возвращает обобщённые модификаторы. Просто она представляет LCtrl в виде Ctrl и LAlt в виде Alt.

Smitis
Posts: 1441
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 12 times
Been thanked: 23 times
Contact:

Re: Названия клавиш и InputRecordToName

Post by Smitis » Wed 27 Feb, 2013 12:21

Shmuel wrote:Обобщённые модификаторы существуют только в спецификациях макросов.
Функция far.InputRecordToName не возвращает обобщённые модификаторы. Просто она представляет LCtrl в виде Ctrl и LAlt в виде Alt.
Да, но InputRecordToName существует, что бы получать символьное представление клавиш в тех же макросах. В результате получается несоответствие названий.
Разум когда-нибудь победит.

Shmuel
Posts: 5049
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

Re: Названия клавиш и InputRecordToName

Post by Shmuel » Wed 27 Feb, 2013 12:31

Smitis wrote:Да, но InputRecordToName существует, что бы получать символьное представление клавиш в тех же макросах. В результате получается несоответствие названий.
Действительно, есть несоответствие. Но реально, если учитывать эту особенность функции, оно не мешает. Я не хочу изменять поведение функции, чтобы не ломать существующие скрипты. А второй параметр, на мой взгляд, только внесёт путаницу.

Существуют бОльшие проблемы с именами и кодами клавиш в Фаре, поэтому данная проблема пока подождёт.

User avatar
John Doe
Бюрократ
Posts: 11086
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 65 times

Re: Названия клавиш и InputRecordToName

Post by John Doe » Wed 27 Feb, 2013 12:44

Возможно не в тему, но
Shmuel wrote:Действительно, есть несоответствие. Но реально, если учитывать эту особенность функции, оно не мешает.
Есть несоответствие между тем, как представлена клавиша, заданная "снаружи", и "внутри" макроса.
- В определении: key="/[LR]Ctrl/"
- Но akey(1) возвращает Ctrl или RCtrl (т.е. получается "/R?Ctrl/")
Shmuel wrote:Я не хочу изменять поведение функции, чтобы не ломать существующие скрипты.
Лучше раз поломать, чем всю жизнь путаться.

User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

Re: Названия клавиш и InputRecordToName

Post by Max Rusov » Wed 27 Feb, 2013 12:49

John Doe wrote:- Но akey(1) возвращает Ctrl или RCtrl
И это правильно - не надо это менять.

User avatar
John Doe
Бюрократ
Posts: 11086
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 65 times

Re: Названия клавиш и InputRecordToName

Post by John Doe » Wed 27 Feb, 2013 12:56

Были уже споры о том как правильно, а как нет, но автор остался при своём мнении.
Но вне зависимости от того "как правильнее" - должно быть одинаково в разных функциях.

Что касается вопросов совместимости.
Можно оставить для совместимости старые средства.
А нормальную реализацию сделать новыми.

User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

Re: Названия клавиш и InputRecordToName

Post by Max Rusov » Wed 27 Feb, 2013 13:14

John Doe wrote:Были уже споры о том как правильно, а как нет, но автор остался при своём мнении
Ну так, вроде, если привязка без регэкспов - то все осталось по прежнему, просто Ctrl работает на обоих контролах. А регэкспы, это все-таки экзотика.

User avatar
John Doe
Бюрократ
Posts: 11086
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 65 times

Re: Названия клавиш и InputRecordToName

Post by John Doe » Wed 27 Feb, 2013 13:35

Регэкспы экзотика только для того, кто ещё не умеет их использовать.

Несоответствие обычных обозначений и обозначений-регэкспов это конечно печально.
Но пока оно есть - akey(1) конечно трогать бессмысленно...

А обойти проблему несоответствия регэкспов я предлагал таким способом: http://bugs.farmanager.com/view.php?id=2310

Smitis
Posts: 1441
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 12 times
Been thanked: 23 times
Contact:

Re: Названия клавиш и InputRecordToName

Post by Smitis » Wed 27 Feb, 2013 13:38

Shmuel wrote:А второй параметр, на мой взгляд, только внесёт путаницу.
Так второй параметр уже есть.

То, что akey(1) тоже не соотвествует, пропустил. Видимо, там используется тот же алгоритм.

И если выполнить Keys или eval с получеными "неправильными" кодами, может получится совсем не то, что требовалось.
Разум когда-нибудь победит.

Shmuel
Posts: 5049
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

Re: Названия клавиш и InputRecordToName

Post by Shmuel » Wed 27 Feb, 2013 13:41

Помещайте на мантис, где точно опишите желаемое поведение, с обоснованием. Ибо в ближайшее время изменений не будет.

User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

Re: Названия клавиш и InputRecordToName

Post by Max Rusov » Wed 27 Feb, 2013 14:02

John Doe wrote:Регэкспы экзотика только для того, кто ещё не умеет их использовать
Регэкспы экзотика потому, что в 99% случаев они не нужны. Обычно макрос привязан к одной клавише.

Smitis
Posts: 1441
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 12 times
Been thanked: 23 times
Contact:

Re: Названия клавиш и InputRecordToName

Post by Smitis » Wed 27 Feb, 2013 14:12

Shmuel wrote:с обоснованием.
У меня уже и пример есть http://forum.farmanager.com/viewtopic.p ... 15#p104752
Надо отправить необработаные клавиши "дальше". Что бы быть точным, надо менять обобщённые модификаторы на левые (в том макросе я не менял).
Разум когда-нибудь победит.

User avatar
John Doe
Бюрократ
Posts: 11086
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 65 times

Re: Названия клавиш и InputRecordToName

Post by John Doe » Wed 27 Feb, 2013 14:21

Max Rusov wrote:Регэкспы экзотика потому, что в 99% случаев они не нужны. Обычно макрос привязан к одной клавише.
У меня другая статистика.
Возьмём к примеру ваш набор макросов для Console Control

2 макроса с регэкспами
6 макросов без, из них 3 привязаны не "к одной клавише", и их можно привязать к регекспу.

Тогда получится 5 "с" и 3 "без"

Post Reply

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

Who is online

Users browsing this forum: No registered users and 1 guest