Программный вызов макроса, назначенного на кнопкосочетание

Здесь обсуждается всё, что касается макросов.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Предложение: команда $CALL

Post by Smitis »

Предлагаю добавить в макроязык:

1. Команду $CALL, позволяющую вызывать другие макросы.
Например, для текущей области: $call "AltQ
А так для другой области: $call "shell\\CtrlShiftT"

2. Завести раздел для макросов-подпрограмм. Причем имена этих макросов необязательно делать совпадающими с именами клавиш. И поведение команды $call сделать такое, что если макрос не найден, просмотреть эту область. Впрочем, команду можно назвать по другому, например $SCALL. Пример: $SCALL "shell_delete_file"
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Программный вызов макроса, назначенного на кнопкосочетание

Post by SUSim »

zg wrote:это не меню.
а выглядит как меню :) ну да ладно...

вопрос не по теме а макрос из макроса можно запустить??? (про eval(%%чтото_записанное_в_реестре_в_варс) я знаю, а хотелось бы: если есть макрос повешенный на пример на F1 и чтото типа eval(F1)) если есть ткните в ртфм только плиз поконкретнее...
Last edited by SUSim on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Добавлена ссылка на исходную тему
SimSU ··· ·· -- ··· ··-
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: gethotkey(0)

Post by zg »

SUSim wrote:а выглядит как меню :) ну да ладно...
ctrlf5.
вопрос не по теме а макрос из макроса можно запустить??? (про eval(%%чтото_записанное_в_реестре_в_варс) я знаю, а хотелось бы: если есть макрос повешенный на пример на F1 и чтото типа eval(F1)) если есть ткните в ртфм только плиз поконкретнее...
повесить на f1 eval(%%чтото_записанное_в_реестре_в_варс) чем не устраивает?
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: gethotkey(0)

Post by SUSim »

zg wrote:
SUSim wrote:а выглядит как меню :) ну да ладно...
ctrlf5.
прикольно :)
вопрос не по теме а макрос из макроса можно запустить??? (про eval(%%чтото_записанное_в_реестре_в_варс) я знаю, а хотелось бы: если есть макрос повешенный на пример на F1 и чтото типа eval(F1)) если есть ткните в ртфм только плиз поконкретнее...
повесить на f1 eval(%%чтото_записанное_в_реестре_в_варс) чем не устраивает?
таких макросов у меня много, но неудобно :( если что-то надо поправить: из макровью не долезешь... и приходится запоминать переменную заходить в реестр и искать там...
SimSU ··· ·· -- ··· ··-
User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 2 times

Re: gethotkey(0)

Post by Centaur »

zg wrote:
вопрос не по теме а макрос из макроса можно запустить??? (про eval(%%чтото_записанное_в_реестре_в_варс) я знаю, а хотелось бы: если есть макрос повешенный на пример на F1 и чтото типа eval(F1)) если есть ткните в ртфм только плиз поконкретнее...
повесить на f1 eval(%%чтото_записанное_в_реестре_в_варс) чем не устраивает?
Я вот хочу тоже чего-то такого, with a twist of lemon. А именно — заранее неизвестно, какой макрос будем вызывать, и соответственно нельзя вырефакторить из них всех тела в глобальные переменные.

Задумка следующая. Пишем макрос для инкрементального поиска. Ядро макроса — цикл опроса waitkey().

Юз-кейс примерно следующий. Жмём Ctrl/ (вызываем макрос инкрементального поиска). Вводим первые несколько букв, какую-нибудь специальную клавишу и последние несколько букв искомого. Оно находится и выделяется как блок, при этом макрос ждёт ввода дальнейших искомых символов.

Хочется, не нажимая никаких явных завершающих макрос клавиш, мочь на это выделение сразу действовать другими макросами.

Выходов вижу три.
  • Либо надо уметь сделать ungetkey, чтобы она поставилась в начало очереди и её бы выбрал цикл обработки сообщений на следующей итерации.
  • Либо надо аналог eval, но с обработкой макросов.
  • Либо уметь читать макросы и выполнять их через обычный eval.
Также интересует, справится ли с этим ECTL_PROCESSINPUT, или он действует уже после разворота макросов.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: gethotkey(0)

Post by Skirda »

уф... много читал, много думал, нишиша не понял...
We are the Borg. You will be assimilated.
So Say We All!
User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 2 times

Re: gethotkey(0)

Post by Centaur »

OK, разворачиваю.

Макрос крутит цикл выборки waitkey(). Когда нажата очередная клавиша:
  • Если это печатный символ, добавляем его к паттерну, находим и выделяем ближайшее вхождение паттерна. Продолжаем крутить цикл.
  • Если это BS, удаляем из паттерна последний символ, находим и выделяем ближайшее к начальной точке вхождение паттерна, продолжаем крутить цикл.
  • Если это Esc, восстанавливаем состояние на начало исполнения макроса и завершаем цикл.
  • Если Enter, завершаем цикл.
  • Если же нажата любая другая комбинация клавиш, то нужно завершить цикл и выполнить действие, которое было бы выполнено, если бы она была нажата вне цикла выборки клавиш в макросе.
Как сделать?
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: gethotkey(0)

Post by SUSim »

я почти понял :) лучше макрос бы привел с комментариями :)
говори конкретно как я :)
Хочу вызвать макрос из макроса, а не из переменной...
кстати а почему сразу так не сделали? придумали переменные... логично же было бы:
1) есть одна комбинация что-то делающая
2) есть другая делающая тоже самое + еще что-то
повесить первую комбинацию на клавишу Клавиша1
а на клавишу Клавиша2 повесить запуск Клавиша1 и еще нужные действия
разьве не логичней чем - сделать пременную с комбинацией повесить на Клавиша1 запуск переменной с комбинацией, на Клавиша2 повесить запуск переменной с комбинацией и выполнить еще нужные действия ???

ладно это лирика... нет так нет... все в переменные запишем, хоть и менее удобно и менее логично...
а сделать что-то типа $CtrlAltF1 или eval(CtrlAltF1) котрый бы запускал макрос висящий на CtrlAltF1, я думаю, не то чтобы очень тяжело, но подумать придется...
SimSU ··· ·· -- ··· ··-
User avatar
HaRT
Moderator
Posts: 10863
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: gethotkey(0)

Post by HaRT »

SUSim wrote:сделать что-то типа $CtrlAltF1 или eval(CtrlAltF1) котрый бы запускал макрос висящий на CtrlAltF1, я думаю, не то чтобы очень тяжело, но подумать придется...
Вроде ничему не противоречит, если добавить ещё одно значение для второго аргумента: eval("CtrlAltF1",2) — выполнить макрос, назначенный в текущей области на CtrlAltF1.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: gethotkey(0)

Post by SUSim »

HaRT wrote:
SUSim wrote:сделать что-то типа $CtrlAltF1 или eval(CtrlAltF1) котрый бы запускал макрос висящий на CtrlAltF1, я думаю, не то чтобы очень тяжело, но подумать придется...
Вроде ничему не противоречит, если добавить ещё одно значение для второго аргумента: eval("CtrlAltF1",2) — выполнить макрос, назначенный в текущей области на CtrlAltF1.
Вот... говорю же подумать придется :) только лучше не из текущей, а конкретно задавать из какой области макрос...
SimSU ··· ·· -- ··· ··-
User avatar
HaRT
Moderator
Posts: 10863
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: gethotkey(0)

Post by HaRT »

SUSim wrote:
HaRT wrote:Вроде ничему не противоречит, если добавить ещё одно значение для второго аргумента: eval("CtrlAltF1",2) — выполнить макрос, назначенный в текущей области на CtrlAltF1.
только лучше не из текущей, а конкретно задавать из какой области макрос...
eval("Other/CtrlAltF1",2)
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Программный вызов макроса, назначенного на кнопкосочетан

Post by SUSim »

ИМХО: лучше отдельную функцию а не eval,
а что-то типа meval("MacroKey","MacroArea")
SimSU ··· ·· -- ··· ··-
User avatar
HaRT
Moderator
Posts: 10863
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Программный вызов макроса, назначенного на кнопкосочетан

Post by HaRT »

SUSim wrote:ИМХО: лучше отдельную функцию а не eval,
а что-то типа meval("MacroKey","MacroArea")
Я не согласен, ведь eval для того и создан, чтобы выполнять макро-код. А второй параметр для того и есть, чтобы при запуске была гибкость.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Программный вызов макроса, назначенного на кнопкосочетан

Post by SUSim »

Ладно пусть будет eval() :) , но только без всяких "Other/CtrlAltF1" составных частей... :no:
Лучше уж eval("CtrlAltF1",2) кстати а почему второй параметр 2??? по мне так вторым параметром должно быть имя макрообласти желаемого макроса! (хотя лучше второй параметр это модификатор...)
SimSU ··· ·· -- ··· ··-
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Программный вызов макроса, назначенного на кнопкосочетан

Post by SUSim »

Я так понимаю не будет возможности вызвать макрос из макроса :( ?
а ведь так заманчиво... :)
а если бы еще и имя макросу было можно давать любое, а не только кнопочное... :)
ммм, сказка!
SimSU ··· ·· -- ··· ··-
Post Reply

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