Condensed View

Здесь выкладываются готовые к использованию макросы и скрипты.
Post Reply
buniak_a_h
Posts: 2044
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

Реализация Condensed View

Post by buniak_a_h »

Latest post of the previous page:

John Doe wrote: Хорошая вот:
1. Насколько я понимаю, код в принципе нерабочий. condition должна возвращать или boolean, или число-приоритет. а a в Вашем примере - это (в моём контексте) пара (ei, EID).
2. Да я, вроде, практически так и написал. Замените f1 на IsEditorActive, f2 на CondViewOff (или CondViewOn) - получится тот же код
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
John Doe
Бюрократ
Posts: 12872
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

Реализация Condensed View

Post by John Doe »

HaRT wrote: Где бы почитать, что эти Macro собой представляют с точки зрения виртуальной машины Lua?
В определении макроса это всего лишь вызов функции с именем Macro и параметром-таблицей.
HaRT wrote: в „таблицу“ (?) Macro?
Нет такой таблицы.
User avatar
John Doe
Бюрократ
Posts: 12872
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

Реализация Condensed View

Post by John Doe »

buniak_a_h wrote: Насколько я понимаю, код в принципе нерабочий.
Не думал что вы буквально поймёте.
Да, в коде condition недостаёт return, добавьте самостоятельно.
buniak_a_h wrote: Да я, вроде, практически так и написал.
Так, да совсем не так.
buniak_a_h
Posts: 2044
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

Реализация Condensed View

Post by buniak_a_h »

John Doe wrote: а, в коде condition недостаёт return, добавьте самостоятельно.
Это я как раз понял. Не в этом ошибочка. return a не годится (a - пара ei, EID, а нужна или boolean, или number); видимо, под [b]a[/b] имеется в виду внешняя (по отношению к функциям) local a; а тогда зачем передавать её в f2 параметром?
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
HaRT
Moderator
Posts: 9527
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 109 times
Been thanked: 228 times

Реализация Condensed View

Post by HaRT »

buniak_a_h wrote: return a не годится (a - пара ei, EID, а нужна или boolean, или number)
Так вроде никто и не предлагал возвращать a.
buniak_a_h wrote: тогда зачем передавать её в f2 параметром?
Чтобы уменьшить размер разделяемого состояния — чтобы было проще понимать и поддерживать (maintain) код.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Shmuel
Posts: 6166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 329 times

Реализация Condensed View

Post by Shmuel »

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

Реализация Condensed View

Post by John Doe »

Небольшое дополнение е сказанному HaRT'ом:
buniak_a_h wrote: return a не годится
В общем случае годится:
Boolean is the type of the values false and true. Both nil and false make a condition false; any other value makes it true.
Та же f1 может легко возвращать и boolean, наряду с прочими значениями.
buniak_a_h
Posts: 2044
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

Реализация Condensed View

Post by buniak_a_h »

John Doe wrote:Небольшое дополнение е сказанному HaRT'ом:
<...>В общем случае годится <...> Та же f1 может легко возвращать и boolean, наряду с прочими значениями.
Я сейчас не буду искать, но где-то было написано такое: если condition возвращает числовое значение, то оно используется как приоритет. Надо точно знать, что a - не число (EditorID - как раз число). Или что такой приоритет не помешает остальному. А что будет, если приоритет = 0?
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
John Doe
Бюрократ
Posts: 12872
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

Реализация Condensed View

Post by John Doe »

buniak_a_h wrote: если condition возвращает числовое значение, то оно используется как приоритет.
Что ж вы так упорно хотите число вернуть.
Даже если на входе число, всегда можно превратить его в то что вам надо.
buniak_a_h
Posts: 2044
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

Реализация Condensed View

Post by buniak_a_h »

John Doe wrote: Что ж вы так упорно хотите число вернуть. <...>
Так нужно передать идентификатор редактора. Не я придумал, что это - число. Ну или передавать через внешнюю переменную. Тогда получится всё тоже самое, против чего Вы протестуете. Третьего варианта я не вижу.
Перепишите, на это у Вас времени уйдёт меньше, чем на переписку. Сами же признавали, что макрос полезный. На авторских правах я не зациклен, у меня и без этого имеется достаточно продуктов, достаточно широко распространённых. Просто хотелось поделиться. Тем более, что за более чем полгода эксплуатации ошибок в функционале не выявлено. Остальное - дело вкуса.
Правильной считается программа, выполняющая ожидаемые от неё действия за приемлемое время Н. Вирт, "введение в структурное программирование"©
:)
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
John Doe
Бюрократ
Posts: 12872
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

Реализация Condensed View

Post by John Doe »

buniak_a_h wrote: Третьего варианта я не вижу.
А он есть. И не один.
buniak_a_h wrote: Ну или передавать через внешнюю переменную. Тогда получится всё тоже самое, против чего Вы протестуете.
Вот честно, не стал бы затевать этот разговор, если бы эти переменные использовались только для передачи из condition в action.
buniak_a_h wrote: Просто хотелось поделиться.
Ок. Спасибо.
buniak_a_h
Posts: 2044
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

Реализация Condensed View

Post by buniak_a_h »

John Doe
Кардинально переделал макрос (эффективность в угоду "замкнутости" кода). Если будет времечко - гляньте...
John Doe wrote: А он есть. И не один.
Убрал передачу информации о редакторе через внешние переменные. Теперь функция action сама вызывает editor.GetInfo().
John Doe wrote: Вот честно, не стал бы затевать этот разговор, если бы эти переменные использовались только для передачи из condition в action.
Они и используются только для этого. Или Вы имеете в виду, что в теле функции action их надо присвоить внутренней переменной функции, чтоб за время выполнения на них не повлияло изменение внешних ei, EID? Есть в этом сермяга, просто делал по образцу других макросов, т.к. язык и среда совершенно незнакомы.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
buniak_a_h
Posts: 2044
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

Реализация Condensed View

Post by buniak_a_h »

Shmuel wrote: Macro - это функция, загружающая макрос,
Родилось несколько вопросов:
1. Можно ли вызвать эту функцию RunTime из локальной функции (тем самым при начале некоего процесса загружать макрос, а по окончании как-то выгружать)? Кстати, а как выгружать?
2. Про Event не расскажете? Например, было бы полезно включать и выключать обработчик (не через condition, а именно как в языках ООП: OnEvent:=func();
ОnEvent:=nil;

Может, подскажете, где это описано?
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
Shmuel
Posts: 6166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 329 times

Реализация Condensed View

Post by Shmuel »

buniak_a_h wrote: 1. Можно ли вызвать эту функцию RunTime из локальной функции (тем самым при начале некоего процесса загружать макрос, а по окончании как-то выгружать)? Кстати, а как выгружать?
Есть far.MacroAdd / far.MacroDelete, но их функциональность несколько неполная.
buniak_a_h wrote: 2. Про Event не расскажете? [...] Может, подскажете, где это описано?
Encyclopedia\macroapi_manual.ru.chm.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 12 times

Реализация Condensed View

Post by sToLp »

Win10x64entRu Far b4699 x64.
При попытке перезагрузки макросов из редактора после установки сабжевого макроса Фар повисает.
При перезагрузке макросов из панелей вылезает ошибка:

Code: Select all

LuaMacro
C:\Far\Profile\Macros\scripts\edi_lua\CondView.lua:279: bad argument #1 to 'maxn' (table expected, got nil)
И после этого всякая попытка загрузить любой текстовый файл в редактор вешает Фар.
User avatar
John Doe
Бюрократ
Posts: 12872
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

Реализация Condensed View

Post by John Doe »

buniak_a_h wrote: Может, подскажете, где это описано?
У нас тут чётко заданная тема, я прошу не использовать её как какой-то общий чат.
Post Reply

Return to “Полезные макросы и скрипты”