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

Здесь обсуждается всё, что касается макросов.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post 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? Например, тот, что крайний справа. А если там один, то его.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

sToLp wrote: Tue 04 Dec, 2018 11:53А нельзя ли
Это ещё проще.
Подозреваю, регэксп вы и сами составите.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

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: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

sToLp wrote: Tue 04 Dec, 2018 12:19 все остальные тоже это умеют
Про всех не скажу, но вам это просто необходимо.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

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 56 times
Last edited by sToLp on Mon 10 Dec, 2018 15:44, edited 1 time in total.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

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

Ещё раз благодарю Вас за скрипт автоматического вывода ключей запуска макросов в их позиции в меню выбора макроса!
Мне удалось приспособить его для решения поставленной задачи и, вроде бы, получается весьма даже :
autokeys.png
Такое замечание по поводу картинки: а не правильней ли выделять в качестве быстрой клавиши последнюю букву комбинации? И красивее, и по смыслу точнее.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post 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.
Last edited by John Doe on Thu 06 Dec, 2018 09:43, edited 1 time in total.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

John Doe wrote: Thu 06 Dec, 2018 08:25У вас реально присутствуют макросы, где явно задана строка "none"?
Нету, просто обдумывал нужна ли запись if ... then ... end, а потом забыл убрать.
странный он у вас, не знаю даже как работает
Я его понимаю как "слова после первого пробела", т.е. в данном случае после первого ключа. И если вставить лишние ключи, в т.ч. невалидные, то они выводятся в меню. Полагаю это полезным.
в данном случае фаровские функции не нужны кстати, задача совсем простая: local rkey = m.key:match"%S+$"
Большое спасибо за подсказку с пояснением! Заменю.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

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

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

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

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

Но, м.б., Вы могли бы в этом подсобить?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

sToLp wrote: Thu 06 Dec, 2018 10:07 Я его понимаю как "слова после первого пробела", т.е. в данном случае после первого ключа.
Точно, пробел-то я и не заметил.
sToLp wrote: Thu 06 Dec, 2018 10:07 Полагаю это полезным.
Возможно, но в этом случае не работает другое ваше условие: "А если там один, то его."
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post 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 не вызывало ошибку.
Last edited by IgorZ on Thu 06 Dec, 2018 11:39, edited 1 time in total.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

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

Но теперь ведь это противоречие успешно преодолено Вашим вариантом регекса: local rkey = m.key:match"%S+$". Ещё раз благодарю Вас за помощь!
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

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: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post 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 выводить в меню этот ключ.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post 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", что нехорошо.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

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

Code: Select all

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

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