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

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 12072
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 28 times
Been thanked: 152 times

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

Post by John Doe » Tue 04 Dec, 2018 11:57

Latest post of the previous page:

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

User avatar
sToLp
Posts: 921
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 105 times
Been thanked: 8 times

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

Post by sToLp » Tue 04 Dec, 2018 12:19

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

А сейчас пока на некоторое неопределённое время перерыв. Работные дела призвали.
Last edited by sToLp on Tue 04 Dec, 2018 12:20, edited 1 time in total.

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

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

Post by John Doe » Tue 04 Dec, 2018 12:26

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

User avatar
sToLp
Posts: 921
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 105 times
Been thanked: 8 times

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

Post by sToLp » Wed 05 Dec, 2018 20:00

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

Ещё раз благодарю Вас за скрипт автоматического вывода ключей запуска макросов в их позиции в меню выбора макроса!
Мне удалось приспособить его для решения поставленной задачи и, вроде бы, получается весьма даже :
autokeys.png
upd: исправлена , обнаруженная IgorZ.
Attachments
lfsearch_e ({S поискИзаменаВредакторе[lfsearch](smuel)(сАвтовыводомКлючейПоJD)pluEdi.lua.7z
(3.45 KiB) Downloaded 3 times
Last edited by sToLp on Mon 10 Dec, 2018 15:44, edited 1 time in total.

IgorZ
Posts: 566
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 31 times

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

Post by IgorZ » Thu 06 Dec, 2018 06:44

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

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

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

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

Post by John Doe » Thu 06 Dec, 2018 08:25

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.
Last edited by John Doe on Thu 06 Dec, 2018 09:43, edited 1 time in total.

User avatar
sToLp
Posts: 921
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 105 times
Been thanked: 8 times

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

Post by sToLp » Thu 06 Dec, 2018 10:07

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

User avatar
sToLp
Posts: 921
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 105 times
Been thanked: 8 times

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

Post by sToLp » Thu 06 Dec, 2018 10:14

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

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

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

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

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

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

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

Post by John Doe » Thu 06 Dec, 2018 10:17

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

IgorZ
Posts: 566
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 31 times

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

Post by IgorZ » Thu 06 Dec, 2018 11:34

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 не вызывало ошибку.
Last edited by IgorZ on Thu 06 Dec, 2018 11:39, edited 1 time in total.

User avatar
sToLp
Posts: 921
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 105 times
Been thanked: 8 times

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

Post by sToLp » Thu 06 Dec, 2018 11:36

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

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

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

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

Post by John Doe » Thu 06 Dec, 2018 11:43

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

Code: Select all

local rkey = m.key:match" (.+)$" or m.key:match"%S+$"
Last edited by John Doe on Thu 06 Dec, 2018 11:43, edited 1 time in total.

User avatar
sToLp
Posts: 921
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 105 times
Been thanked: 8 times

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

Post by sToLp » 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 выводить в меню этот ключ.

IgorZ
Posts: 566
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 31 times

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

Post by IgorZ » Thu 06 Dec, 2018 12:05

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", что нехорошо.

User avatar
sToLp
Posts: 921
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 105 times
Been thanked: 8 times

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

Post by sToLp » Thu 06 Dec, 2018 20:50

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

Code: Select all

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

User avatar
sToLp
Posts: 921
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 105 times
Been thanked: 8 times

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

Post by sToLp » Thu 06 Dec, 2018 21:18

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

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

User avatar
sToLp
Posts: 921
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 105 times
Been thanked: 8 times

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

Post by sToLp » Thu 06 Dec, 2018 23:05

На текущий момент сделал так:

Code: Select all

local function MMacro(m)
  local cas = type(m.key)=="string" and m.key:match("%S+$")
    m.description = ("%-"..width.."s %s&%s"):format(m.description:gsub("&",""),cas:sub(1,-2),cas:sub(-1))
  return Macro(m)
end
И, во избежание нахлёста хоткеев, во втором случае применения ключа AltShiftS вернулся к его ручному вводу. И получилась следующая картинка меню выбора макроса:
kartinka.png
А нельзя ли в тех строках, в которых запись в description начинается именно на амперсант &, замену предустановленного хоткея не производить и букву в комбинации в правом столбце не подсвечивать? Если только это не слишком усложнило бы функцию.

Post Reply

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