Программный вызов макроса, назначенного на кнопкосочетание
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Предложение: команда $CALL
Предлагаю добавить в макроязык:
1. Команду $CALL, позволяющую вызывать другие макросы.
Например, для текущей области: $call "AltQ
А так для другой области: $call "shell\\CtrlShiftT"
2. Завести раздел для макросов-подпрограмм. Причем имена этих макросов необязательно делать совпадающими с именами клавиш. И поведение команды $call сделать такое, что если макрос не найден, просмотреть эту область. Впрочем, команду можно назвать по другому, например $SCALL. Пример: $SCALL "shell_delete_file"
1. Команду $CALL, позволяющую вызывать другие макросы.
Например, для текущей области: $call "AltQ
А так для другой области: $call "shell\\CtrlShiftT"
2. Завести раздел для макросов-подпрограмм. Причем имена этих макросов необязательно делать совпадающими с именами клавиш. И поведение команды $call сделать такое, что если макрос не найден, просмотреть эту область. Впрочем, команду можно назвать по другому, например $SCALL. Пример: $SCALL "shell_delete_file"
Программный вызов макроса, назначенного на кнопкосочетание
а выглядит как меню ну да ладно...zg wrote:это не меню.
вопрос не по теме а макрос из макроса можно запустить??? (про eval(%%чтото_записанное_в_реестре_в_варс) я знаю, а хотелось бы: если есть макрос повешенный на пример на F1 и чтото типа eval(F1)) если есть ткните в ртфм только плиз поконкретнее...
Last edited by SUSim on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Добавлена ссылка на исходную тему
Reason: Добавлена ссылка на исходную тему
SimSU ··· ·· -- ··· ··-
- zg
- zero-gravity
- Posts: 6035
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: gethotkey(0)
ctrlf5.SUSim wrote:а выглядит как меню ну да ладно...
повесить на f1 eval(%%чтото_записанное_в_реестре_в_варс) чем не устраивает?вопрос не по теме а макрос из макроса можно запустить??? (про eval(%%чтото_записанное_в_реестре_в_варс) я знаю, а хотелось бы: если есть макрос повешенный на пример на F1 и чтото типа eval(F1)) если есть ткните в ртфм только плиз поконкретнее...
Re: gethotkey(0)
прикольноzg wrote:ctrlf5.SUSim wrote:а выглядит как меню ну да ладно...
таких макросов у меня много, но неудобно если что-то надо поправить: из макровью не долезешь... и приходится запоминать переменную заходить в реестр и искать там...повесить на f1 eval(%%чтото_записанное_в_реестре_в_варс) чем не устраивает?вопрос не по теме а макрос из макроса можно запустить??? (про eval(%%чтото_записанное_в_реестре_в_варс) я знаю, а хотелось бы: если есть макрос повешенный на пример на F1 и чтото типа eval(F1)) если есть ткните в ртфм только плиз поконкретнее...
SimSU ··· ·· -- ··· ··-
- Centaur
- Posts: 1083
- Joined: Tue 05 Apr, 2005 20:09
- Location: Novosibirsk, Russia
- Been thanked: 2 times
Re: gethotkey(0)
Я вот хочу тоже чего-то такого, with a twist of lemon. А именно — заранее неизвестно, какой макрос будем вызывать, и соответственно нельзя вырефакторить из них всех тела в глобальные переменные.zg wrote:повесить на f1 eval(%%чтото_записанное_в_реестре_в_варс) чем не устраивает?вопрос не по теме а макрос из макроса можно запустить??? (про eval(%%чтото_записанное_в_реестре_в_варс) я знаю, а хотелось бы: если есть макрос повешенный на пример на F1 и чтото типа eval(F1)) если есть ткните в ртфм только плиз поконкретнее...
Задумка следующая. Пишем макрос для инкрементального поиска. Ядро макроса — цикл опроса waitkey().
Юз-кейс примерно следующий. Жмём Ctrl/ (вызываем макрос инкрементального поиска). Вводим первые несколько букв, какую-нибудь специальную клавишу и последние несколько букв искомого. Оно находится и выделяется как блок, при этом макрос ждёт ввода дальнейших искомых символов.
Хочется, не нажимая никаких явных завершающих макрос клавиш, мочь на это выделение сразу действовать другими макросами.
Выходов вижу три.
- Либо надо уметь сделать ungetkey, чтобы она поставилась в начало очереди и её бы выбрал цикл обработки сообщений на следующей итерации.
- Либо надо аналог eval, но с обработкой макросов.
- Либо уметь читать макросы и выполнять их через обычный eval.
Re: gethotkey(0)
уф... много читал, много думал, нишиша не понял...
We are the Borg. You will be assimilated.
So Say We All!
So Say We All!
- Centaur
- Posts: 1083
- Joined: Tue 05 Apr, 2005 20:09
- Location: Novosibirsk, Russia
- Been thanked: 2 times
Re: gethotkey(0)
OK, разворачиваю.
Макрос крутит цикл выборки waitkey(). Когда нажата очередная клавиша:
Макрос крутит цикл выборки waitkey(). Когда нажата очередная клавиша:
- Если это печатный символ, добавляем его к паттерну, находим и выделяем ближайшее вхождение паттерна. Продолжаем крутить цикл.
- Если это BS, удаляем из паттерна последний символ, находим и выделяем ближайшее к начальной точке вхождение паттерна, продолжаем крутить цикл.
- Если это Esc, восстанавливаем состояние на начало исполнения макроса и завершаем цикл.
- Если Enter, завершаем цикл.
- Если же нажата любая другая комбинация клавиш, то нужно завершить цикл и выполнить действие, которое было бы выполнено, если бы она была нажата вне цикла выборки клавиш в макросе.
Re: gethotkey(0)
я почти понял лучше макрос бы привел с комментариями
говори конкретно как я
Хочу вызвать макрос из макроса, а не из переменной...
кстати а почему сразу так не сделали? придумали переменные... логично же было бы:
1) есть одна комбинация что-то делающая
2) есть другая делающая тоже самое + еще что-то
повесить первую комбинацию на клавишу Клавиша1
а на клавишу Клавиша2 повесить запуск Клавиша1 и еще нужные действия
разьве не логичней чем - сделать пременную с комбинацией повесить на Клавиша1 запуск переменной с комбинацией, на Клавиша2 повесить запуск переменной с комбинацией и выполнить еще нужные действия ???
ладно это лирика... нет так нет... все в переменные запишем, хоть и менее удобно и менее логично...
а сделать что-то типа $CtrlAltF1 или eval(CtrlAltF1) котрый бы запускал макрос висящий на CtrlAltF1, я думаю, не то чтобы очень тяжело, но подумать придется...
говори конкретно как я
Хочу вызвать макрос из макроса, а не из переменной...
кстати а почему сразу так не сделали? придумали переменные... логично же было бы:
1) есть одна комбинация что-то делающая
2) есть другая делающая тоже самое + еще что-то
повесить первую комбинацию на клавишу Клавиша1
а на клавишу Клавиша2 повесить запуск Клавиша1 и еще нужные действия
разьве не логичней чем - сделать пременную с комбинацией повесить на Клавиша1 запуск переменной с комбинацией, на Клавиша2 повесить запуск переменной с комбинацией и выполнить еще нужные действия ???
ладно это лирика... нет так нет... все в переменные запишем, хоть и менее удобно и менее логично...
а сделать что-то типа $CtrlAltF1 или eval(CtrlAltF1) котрый бы запускал макрос висящий на CtrlAltF1, я думаю, не то чтобы очень тяжело, но подумать придется...
SimSU ··· ·· -- ··· ··-
- HaRT
- Moderator
- Posts: 10863
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: gethotkey(0)
Вроде ничему не противоречит, если добавить ещё одно значение для второго аргумента: eval("CtrlAltF1",2) — выполнить макрос, назначенный в текущей области на CtrlAltF1.SUSim wrote:сделать что-то типа $CtrlAltF1 или eval(CtrlAltF1) котрый бы запускал макрос висящий на CtrlAltF1, я думаю, не то чтобы очень тяжело, но подумать придется...
Фар есть инструмент, а не нянька. © 2009 DrKnS
Re: gethotkey(0)
Вот... говорю же подумать придется только лучше не из текущей, а конкретно задавать из какой области макрос...HaRT wrote:Вроде ничему не противоречит, если добавить ещё одно значение для второго аргумента: eval("CtrlAltF1",2) — выполнить макрос, назначенный в текущей области на CtrlAltF1.SUSim wrote:сделать что-то типа $CtrlAltF1 или eval(CtrlAltF1) котрый бы запускал макрос висящий на CtrlAltF1, я думаю, не то чтобы очень тяжело, но подумать придется...
SimSU ··· ·· -- ··· ··-
- HaRT
- Moderator
- Posts: 10863
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: gethotkey(0)
eval("Other/CtrlAltF1",2)SUSim wrote:только лучше не из текущей, а конкретно задавать из какой области макрос...HaRT wrote:Вроде ничему не противоречит, если добавить ещё одно значение для второго аргумента: eval("CtrlAltF1",2) — выполнить макрос, назначенный в текущей области на CtrlAltF1.
Фар есть инструмент, а не нянька. © 2009 DrKnS
- HaRT
- Moderator
- Posts: 10863
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: Программный вызов макроса, назначенного на кнопкосочетан
Я не согласен, ведь eval для того и создан, чтобы выполнять макро-код. А второй параметр для того и есть, чтобы при запуске была гибкость.SUSim wrote:ИМХО: лучше отдельную функцию а не eval,
а что-то типа meval("MacroKey","MacroArea")
Фар есть инструмент, а не нянька. © 2009 DrKnS
Re: Программный вызов макроса, назначенного на кнопкосочетан
Ладно пусть будет eval() , но только без всяких "Other/CtrlAltF1" составных частей...
Лучше уж eval("CtrlAltF1",2) кстати а почему второй параметр 2??? по мне так вторым параметром должно быть имя макрообласти желаемого макроса! (хотя лучше второй параметр это модификатор...)
Лучше уж eval("CtrlAltF1",2) кстати а почему второй параметр 2??? по мне так вторым параметром должно быть имя макрообласти желаемого макроса! (хотя лучше второй параметр это модификатор...)
SimSU ··· ·· -- ··· ··-
Re: Программный вызов макроса, назначенного на кнопкосочетан
Я так понимаю не будет возможности вызвать макрос из макроса ?
а ведь так заманчиво...
а если бы еще и имя макросу было можно давать любое, а не только кнопочное...
ммм, сказка!
а ведь так заманчиво...
а если бы еще и имя макросу было можно давать любое, а не только кнопочное...
ммм, сказка!
SimSU ··· ·· -- ··· ··-