Page 2 of 8

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Posted: Tue 04 Dec, 2018 11:57
by John Doe

Latest post of the previous page:

sToLp wrote: Tue 04 Dec, 2018 11:53А нельзя ли
Это ещё проще.
Подозреваю, регэксп вы и сами составите.

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Posted: Tue 04 Dec, 2018 12:19
by sToLp
John Doe wrote: Tue 04 Dec, 2018 11:57Подозреваю, регэксп вы и сами составите.
Ой, е-ёй! Вы полагаете, что то, что сами умеете, все остальные тоже это умеют? Так, вот, нет. К сожалению, но нет, не справлюсь я с такой задачей.

А сейчас пока на некоторое неопределённое время перерыв. Работные дела призвали.

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Posted: Tue 04 Dec, 2018 12:26
by John Doe
sToLp wrote: Tue 04 Dec, 2018 12:19 все остальные тоже это умеют
Про всех не скажу, но вам это просто необходимо.

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Posted: Wed 05 Dec, 2018 20:00
by sToLp
John Doe wrote: Tue 04 Dec, 2018 12:26вам это просто необходимо
В принципе — да, безусловно. Но для меня составление регексов это то же самое, что разгадка головоломок. Увлекательно, но напряжно и времязатратно. Но на сей раз мне свезло, и я взял почти готовый из своего недавнего макроса.

Ещё раз благодарю Вас за скрипт автоматического вывода ключей запуска макросов в их позиции в меню выбора макроса!
Мне удалось приспособить его для решения поставленной задачи и, вроде бы, получается весьма даже :
autokeys.png
upd: исправлена , обнаруженная IgorZ.

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Posted: Thu 06 Dec, 2018 06:44
by IgorZ
sToLp wrote: Wed 05 Dec, 2018 20:00
John Doe wrote: Tue 04 Dec, 2018 12:26вам это просто необходимо
В принципе — да, безусловно. Но для меня составление регексов это то же самое, что разгадка головоломок. Увлекательно, но напряжно и времязатратно. Но на сей раз мне свезло, и я взял почти готовый из своего недавнего макроса.

Ещё раз благодарю Вас за скрипт автоматического вывода ключей запуска макросов в их позиции в меню выбора макроса!
Мне удалось приспособить его для решения поставленной задачи и, вроде бы, получается весьма даже :
autokeys.png
Такое замечание по поводу картинки: а не правильней ли выделять в качестве быстрой клавиши последнюю букву комбинации? И красивее, и по смыслу точнее.

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Posted: Thu 06 Dec, 2018 08:25
by John Doe
sToLp wrote: Wed 05 Dec, 2018 20:00

Code: Select all

local cas_re = regex.new" (.+)?$"
---
local cas = cas_re:match(m.key)
Смысл регэксп изменился, стоит и имя привести в соответствие.
Но странный он у вас, не знаю даже как работает.
И в данном случае фаровские функции не нужны кстати, задача совсем простая: local rkey = m.key:match"%S+$"
sToLp wrote: Wed 05 Dec, 2018 20:00

Code: Select all

if key~="none" then
У вас реально присутствуют макросы, где явно задана строка "none"?
Даже если так, то достаточно не использовать для них MMacro.

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Posted: Thu 06 Dec, 2018 10:07
by sToLp
John Doe wrote: Thu 06 Dec, 2018 08:25У вас реально присутствуют макросы, где явно задана строка "none"?
Нету, просто обдумывал нужна ли запись if ... then ... end, а потом забыл убрать.
странный он у вас, не знаю даже как работает
Я его понимаю как "слова после первого пробела", т.е. в данном случае после первого ключа. И если вставить лишние ключи, в т.ч. невалидные, то они выводятся в меню. Полагаю это полезным.
в данном случае фаровские функции не нужны кстати, задача совсем простая: local rkey = m.key:match"%S+$"
Большое спасибо за подсказку с пояснением! Заменю.

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Posted: Thu 06 Dec, 2018 10:14
by sToLp
IgorZ wrote: Thu 06 Dec, 2018 06:44замечание по поводу картинки: а не правильней ли выделять в качестве быстрой клавиши последнюю букву комбинации? И красивее, и по смыслу точнее.
Да, желательно бы это сделать. НО:

Во-первых, нужен регекс, который вставлял бы перед знаковыми буквами в ключи правой колонки амперсанты "&".

Во-вторых, и это ещё более существенно и трудно осуществимо, нужен гораздо более сложный регекс для сабжевого макроса. Который распознавал бы ключи со вставленными в них амперсантами.

И эти проблемы, как Вы уже могли заметить, для меня непосильны. По крайней мере, в ближайшем обозримом времени.

Но, м.б., Вы могли бы в этом подсобить?

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Posted: Thu 06 Dec, 2018 10:17
by John Doe
sToLp wrote: Thu 06 Dec, 2018 10:07 Я его понимаю как "слова после первого пробела", т.е. в данном случае после первого ключа.
Точно, пробел-то я и не заметил.
sToLp wrote: Thu 06 Dec, 2018 10:07 Полагаю это полезным.
Возможно, но в этом случае не работает другое ваше условие: "А если там один, то его."

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Posted: Thu 06 Dec, 2018 11:34
by IgorZ
sToLp wrote: Thu 06 Dec, 2018 10:14
IgorZ wrote: Thu 06 Dec, 2018 06:44замечание по поводу картинки: а не правильней ли выделять в качестве быстрой клавиши последнюю букву комбинации? И красивее, и по смыслу точнее.
Да, желательно бы это сделать. НО:

Во-первых, нужен регекс, который вставлял бы перед знаковыми буквами в ключи правой колонки амперсанты "&".

Во-вторых, и это ещё более существенно и трудно осуществимо, нужен гораздо более сложный регекс для сабжевого макроса. Который распознавал бы ключи со вставленными в них амперсантами.

И эти проблемы, как Вы уже могли заметить, для меня непосильны. По крайней мере, в ближайшем обозримом времени.

Но, м.б., Вы могли бы в этом подсобить?
Пожалуйста. Простенько - примерно так:

Code: Select all

local function MMacro(m)
--  local cas = m.key:match("^%S+ (.+)$")
  local cas = type(m.key)=="string" and m.key:match("^%S+ (.+)$")
  if cas then
    m.description = ("%-"..width.."s %s&%s"):format(m.description:gsub("&",""),cas:sub(1,-2),cas:sub(-1))
  end
  return Macro(m)
end
  1. если второй комбинации клавиш нет, не падает, как предыдущий вариант, просто ничего не делает;
  2. если вторая комбинация клавиш есть, выкидывает акселератор из базового описания и делает им последнюю букву второй комбинации клавиш.
P. S. Поправил (старый вариант закомментирован), чтобы отсутствие key не вызывало ошибку.

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Posted: Thu 06 Dec, 2018 11:36
by sToLp
John Doe wrote: Thu 06 Dec, 2018 10:17но в этом случае не работает другое ваше условие: "А если там один, то его."
Да, и это противоречие в выше приведённом примере в макросе вызова меню плагина решено повтором ключа. А можно было бы и одним ключом, но с пробелом перед ним — но это уже и вовсе вычурно было бы.

Но теперь ведь это противоречие успешно преодолено Вашим вариантом регекса: local rkey = m.key:match"%S+$". Ещё раз благодарю Вас за помощь!

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Posted: Thu 06 Dec, 2018 11:43
by John Doe
sToLp wrote: Thu 06 Dec, 2018 11:36 Но теперь ведь это противоречие успешно преодолено Вашим вариантом регекса:
Этот регэксп захватывает только последнюю клавишу, поэтому вероятно надо скомбинировать.

Code: Select all

local rkey = m.key:match" (.+)$" or m.key:match"%S+$"

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Posted: Thu 06 Dec, 2018 11:57
by sToLp
IgorZ wrote: Thu 06 Dec, 2018 11:34

Code: Select all

local function MMacro(m)
  local cas = type(m.key)=="string" and m.key:match("^%S+ (.+)$")
  if cas then
    m.description = ("%-"..width.."s %s&%s"):format(m.description:gsub("&",""),cas:sub(1,-2),cas:sub(-1))
  end
  return Macro(m)
end
Очень хорошо! Большое спасибо!

И, если можно, то ещё бы при наличии лишь одного ключа в поле key выводить в меню этот ключ.

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Posted: Thu 06 Dec, 2018 12:05
by IgorZ
sToLp wrote: Thu 06 Dec, 2018 11:57
IgorZ wrote: Thu 06 Dec, 2018 11:34

Code: Select all

local function MMacro(m)
  local cas = type(m.key)=="string" and m.key:match("^%S+ (.+)$")
  if cas then
    m.description = ("%-"..width.."s %s&%s"):format(m.description:gsub("&",""),cas:sub(1,-2),cas:sub(-1))
  end
  return Macro(m)
end
Очень хорошо! Большое спасибо!

И, если можно, то ещё бы при наличии лишь одного ключа в поле key выводить в меню этот ключ.
А зачем? Ведь очевидно, что это тот ключ, которым вызвано меню. К тому же, получается пересечение с пунктом "внутренняя команда Far", что нехорошо.

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Posted: Thu 06 Dec, 2018 20:50
by sToLp
John Doe wrote: Thu 06 Dec, 2018 11:43 [предыдущий] регэксп захватывает только последнюю клавишу, поэтому вероятно надо скомбинировать.

Code: Select all

local rkey = m.key:match" (.+)$" or m.key:match"%S+$"
Спасибо большое! Испытал и этот вариант регекса и пришёл к выводу, что усложнять, пожалуй, и не стоит, раз уже есть решение точно соответствующее изначально поставленной задаче вывода на показ только последнего ключа. Но в загашник на случай потребности в отладке сборок макросов по набору ключей этот вариант себе отложил.

Запуск макросов кнопкосочетаниями, нажатыми в меню выбора макроса.

Posted: Thu 06 Dec, 2018 21:18
by sToLp
IgorZ wrote: Thu 06 Dec, 2018 12:05
sToLp wrote: Thu 06 Dec, 2018 11:57 И, если можно, то ещё бы при наличии лишь одного ключа в поле key выводить в меню этот ключ.
А зачем? Ведь очевидно, что это тот ключ, которым вызвано меню.
Да, а далее этим же самым ключом из меню выбора макроса вызывается меню плагина.

Такой способ очень удобен. Ведь если надо просто вызвать меню плагина, то достаточно дважды подряд нажать ключ. Меню выбора проскочит незаметно и практически сразу же будет вызвано меню плагина. Я этот способ практикую во множестве случаев и он вполне себя оправдывает, по моему убеждению.
К тому же, получается пересечение с пунктом "внутренняя команда Far"
В данном конкретном случае это совсем особый вариант, относящийся к особой крупной теме. И этот пункт сделан вполне преднамеренно. Указанный в нём ключ выводится конкретно для подсказки, а не для запуска этой позиции в меню выбора. И он не случайно совпадает с базовым ключом. Тем более, что базовым ключом (в данном случае это AltShiftS) при его повторном нажатии сработает вызов меню плагина, а не данного пункта. Т.е. в данном конкретном случае можно просто не обращать внимания на наличие противоречия в ключах. Оно есть, но оно целенаправленно эксплуатируется по особому назначению.