Page 2 of 8

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

Posted: Tue 04 Dec, 2018 11:53
by sToLp

Latest post of the previous page:

John Doe wrote: Tue 04 Dec, 2018 10:59
Скрипт я ещё не пробовал, но обязательно попробую. Заранее благодарю Вас за него!
John Doe wrote: Tue 04 Dec, 2018 10:59А можно от обратного пойти, и задавать дополнительный в таблице макроса явно, дополнительным полем.
А нельзя ли как ни будь в качестве ключа, указываемого затем в меню выбора макроса в позиции макроса вслед за содержанием поля description, брать ключ из поля key? Например, тот, что крайний справа. А если там один, то его.

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

Posted: Tue 04 Dec, 2018 11:57
by John Doe
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+$"
Спасибо большое! Испытал и этот вариант регекса и пришёл к выводу, что усложнять, пожалуй, и не стоит, раз уже есть решение точно соответствующее изначально поставленной задаче вывода на показ только последнего ключа. Но в загашник на случай потребности в отладке сборок макросов по набору ключей этот вариант себе отложил.