Condensed View

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
John Doe
Бюрократ
Posts: 11048
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 10 times
Been thanked: 63 times

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

Postby John Doe » Sun 05 Jun, 2016 15:00

Latest post of the previous page:

buniak_a_h wrote:Source of the post Т.к. я не знаю, какое время жизни переменных
macroapi_manual.ru.chm
buniak_a_h wrote:Source of the post Эти переменные присваиваются в функциях condition.
Возможно, но в самом определении макроса этого не видно, а присваивания эти не находятся в одном месте, а встречаются неоднократно и в разных функциях.
И используются присвоенные значения тоже повсеместно, а не только в функциях action.
buniak_a_h wrote:Source of the post Не нашёл, где такое может быть описано.
А это тут при чём вообще.
Я описываю ситуацию, когда событие ProcessEditorEvent может придти для фонового редактора.
buniak_a_h wrote:Source of the post Но не представляю себе, как можно открыть новый редактор, а старый "спрятать" (чтоб на него нельзя было переключиться).
Открыть модальный редактор.
buniak_a_h wrote:Source of the post Если этого не сделать, то исходный текст возможно будет править,
Или просто запретить модификацию.

buniak_a_h
Posts: 256
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 31 times
Been thanked: 3 times
Contact:

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

Postby buniak_a_h » Sun 05 Jun, 2016 16:15

John Doe wrote:Source of the post buniak_a_h писал(а):
Источник цитаты Т.к. я не знаю, какое время жизни переменных
macroapi_manual.ru.chm
А если несколько экземпляров FAR - переменные общие, или нет? А editor.info.id - уникальный? Или всё в пределах одного экземпляра? Что как-то они между собой взаимодействуют - я понял. Во всяком случае, пока ВСЕ экземпляры не закроются, значение, занесённое в _G, остаётся доступным. Впрочем, начерно, _G.EditorsCondView можно заменить на local EditorsCondView - попробую.
John Doe wrote:Source of the post А это тут при чём вообще.
Тут это - ни при чём. Просто нужно же иметь механизм прерывания цепочки обработчиков события (типа done). Просто чтоб другой обработчик не вмешался в работу макроса.
John Doe wrote:Source of the post Я описываю ситуацию, когда событие ProcessEditorEvent может придти для фонового редактора.
1. Не знаю, что такое "фоновый редактор".
2. Если фоновый редактор в состоянии condenced, то обрабатывать надо независимо от того, фоновый он или нет. В начале функции ProcessEditorEvent я же проверяю if not _G.EditorsCondView[id] then return end - т.е. включен ли сжатый режим. И что тут не так?
John Doe wrote:Source of the post Открыть модальный редактор
И потерять возможность переключаться в другие окна??? Ну ничего себе! Нужно запретиь переход только на исходный редактор, а не вообще на любой!
John Doe wrote:Source of the post Или просто запретить модификацию.
Опять же не представляю, как запретить модификацию без перехвата нажатий клавиш. Собственно, я запретил модификацию в сжатом режиме.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

buniak_a_h
Posts: 256
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 31 times
Been thanked: 3 times
Contact:

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

Postby buniak_a_h » Sun 05 Jun, 2016 23:10

John Doe
Может, поможете с таким вопросом:
Я в документации (macroapi_manual.ru.chm, раздел "Обработчики событий") нашёл такую фразу:
Функции condition и action обработчика вызываются с теми же параметрами, с которыми вызывается соответствующая экспортируемая функция (см. мануал LuaFAR).
Что такое "соответствующая экспортируемая функция"? Поиск по condition ничего не дал, в разделе export.ProcessEditorEvent параметры абсолютно не соответствующие тем, что получают функции (первый параметр я получаю таблицу, а описан EditorID: integer.
Я использовал то, что подсмотрел в других макросах (в частности, LuaSpell.lua, EditWrap.lua). И почему-то работает. Чего-то я не понимаю... :(
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

buniak_a_h
Posts: 256
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 31 times
Been thanked: 3 times
Contact:

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

Postby buniak_a_h » Mon 06 Jun, 2016 00:47

О! Как-то мимо моего внимания Ваш пост проскочил...
John Doe wrote:Source of the post Я тут критикую избыточную область действия переменных ei, EID, объявленных в самом начале скрипта.
Утверждаю, что общие переменные необходимы только в макросах, для передачи значений из condition в action (поскольку других механизмов для этого не предусмотрено).
Так у меня именно так и делается (и именно для этого и используются)! В функции IsEditorActive эти переменные присваиваются, а используются в функциях action. Т.е. в точности то, что Вы написали...
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

Shmuel
Posts: 4997
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

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

Postby Shmuel » Mon 06 Jun, 2016 06:30

buniak_a_h wrote:в разделе export.ProcessEditorEvent параметры абсолютно не соответствующие тем, что получают функции (первый параметр я получаю таблицу, а описан EditorID: integer.
Довольно серьёзное заявление. Можете доказать на примере, чтобы не было голословно?

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

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

Postby John Doe » Mon 06 Jun, 2016 11:14

buniak_a_h wrote:Source of the post А если несколько экземпляров FAR - переменные общие, или нет?
Разные экземпляры никак между собой не взаимодействуют.
buniak_a_h wrote:Source of the post Тут это - ни при чём.
Значит и нечего мешать всё в кучу. Если что-то в Энциклипедии не ясно, значит надо спросить, но в соответствующей теме.
buniak_a_h wrote:Source of the post В начале функции ProcessEditorEvent я же проверяю if not _G.EditorsCondView[id] then return end - т.е. включен ли сжатый режим. И что тут не так?
А то, что id может оказаться не равным EID, если редактор фоновый (т.е. не является активным окном).
buniak_a_h wrote:Source of the post Нужно запретить переход только на исходный редактор, а не вообще на любой!
И так можно, всё в ваших руках.
buniak_a_h wrote:Source of the post Собственно, я запретил модификацию в сжатом режиме.
Оказывается умеете.
buniak_a_h wrote:Source of the post не представляю, как запретить модификацию без перехвата нажатий клавиш.
И перехватить можно, да.
buniak_a_h wrote:Source of the post Может, поможете с таким вопросом:
Разумеется. В соответствующей теме.

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

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

Postby John Doe » Mon 06 Jun, 2016 11:27

buniak_a_h wrote:Source of the post Т.е. в точности то, что Вы написали...
Нет же.
Пример:
Здесь область действия переменной ограничена двумя функциями, и это видно невооружённым глазом, соответственно откуда пришло значение очевидно, и также можно не беспокоиться о том, что переменная будет модифицирована где-то в другом месте.

А у вас:
1. Переменные общие для нескольких макросов (нормально, но уже надо быть внимательнее)
2. Визуально проконтроллировать сложно, поскольку используются переменные не в теле action/condition, а в ранее определённых функциях, которые откуда только не вызываются (не только из макросов).
3. Таких функций много, одна вызывается из другой и т.п. (ну можно же передавать значения параметрами, почему не пользуетесь)
4. Эти же переменные используется в обработчиках событий, и в этом случае мне уже совсем неясно, где предполагается их инициализация.

Я даже готов поверить, что вы свой код видите насквозь, и всё там предусмотрено.
Я только утверждаю, что практика эта плохая. Такой код сложно понимать, и модифицировать.

buniak_a_h
Posts: 256
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 31 times
Been thanked: 3 times
Contact:

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

Postby buniak_a_h » Mon 06 Jun, 2016 13:05

John Doe
Т.е. если я вместо вызова функций в каждом condition буду делать одно и то же (получение Editor.ID-а), то это будет хорошая практика, а объединение одинакового кода в функцию - для LUA считается плохой? Ну, перенести кусок текста - дело секундное. Видимо, я неправильно понимаю стиль и критерии эффективности LUA и FAR
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

User avatar
HaRT
Moderator
Posts: 7953
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 66 times
Been thanked: 97 times

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

Postby HaRT » Mon 06 Jun, 2016 13:11

buniak_a_h wrote:Source of the post объединение одинакового кода в функцию - для LUA считается плохой?
Ну зачем Вы передёргиваете? Ничего такого тут никто не утверждал. Впрочем, предлагаю придерживаться конструктивного русла.
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

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

Postby John Doe » Mon 06 Jun, 2016 13:35

buniak_a_h wrote:Source of the post то это будет хорошая практика
Хорошая вот:

Я не утверждаю что надо вот прям только так, но надо стремиться к ясности

User avatar
HaRT
Moderator
Posts: 7953
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 66 times
Been thanked: 97 times

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

Postby HaRT » Mon 06 Jun, 2016 13:44

John Doe wrote:Source of the post Хорошая вот
Заранее прошу прощения за нубский вопрос: а что мешает нам поместить переменную a прямо в „таблицу“ (?) Macro?
Где бы почитать, что эти Macro собой представляют с точки зрения виртуальной машины Lua?
Фар есть инструмент, а не нянька. © 2009 DrKnS

buniak_a_h
Posts: 256
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 31 times
Been thanked: 3 times
Contact:

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

Postby buniak_a_h » Mon 06 Jun, 2016 13:47

John Doe wrote:Source of the post Хорошая вот:
1. Насколько я понимаю, код в принципе нерабочий. condition должна возвращать или boolean, или число-приоритет. а a в Вашем примере - это (в моём контексте) пара (ei, EID).
2. Да я, вроде, практически так и написал. Замените f1 на IsEditorActive, f2 на CondViewOff (или CondViewOn) - получится тот же код
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

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

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

Postby John Doe » Mon 06 Jun, 2016 13:58

HaRT wrote:Source of the post Где бы почитать, что эти Macro собой представляют с точки зрения виртуальной машины Lua?
В определении макроса это всего лишь вызов функции с именем Macro и параметром-таблицей.
HaRT wrote:Source of the post в „таблицу“ (?) Macro?
Нет такой таблицы.

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

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

Postby John Doe » Mon 06 Jun, 2016 14:10

buniak_a_h wrote:Source of the post Насколько я понимаю, код в принципе нерабочий.
Не думал что вы буквально поймёте.
Да, в коде condition недостаёт return, добавьте самостоятельно.
buniak_a_h wrote:Source of the post Да я, вроде, практически так и написал.
Так, да совсем не так.

buniak_a_h
Posts: 256
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 31 times
Been thanked: 3 times
Contact:

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

Postby buniak_a_h » Mon 06 Jun, 2016 14:55

John Doe wrote:Source of the post а, в коде condition недостаёт return, добавьте самостоятельно.
Это я как раз понял. Не в этом ошибочка. return a не годится (a - пара ei, EID, а нужна или boolean, или number); видимо, под a имеется в виду внешняя (по отношению к функциям) local a; а тогда зачем передавать её в f2 параметром?
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

User avatar
HaRT
Moderator
Posts: 7953
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 66 times
Been thanked: 97 times

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

Postby HaRT » Mon 06 Jun, 2016 15:52

buniak_a_h wrote:Source of the post return a не годится (a - пара ei, EID, а нужна или boolean, или number)
Так вроде никто и не предлагал возвращать a.
buniak_a_h wrote:Source of the post тогда зачем передавать её в f2 параметром?
Чтобы уменьшить размер разделяемого состояния — чтобы было проще понимать и поддерживать (maintain) код.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Shmuel
Posts: 4997
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

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

Postby Shmuel » Mon 06 Jun, 2016 16:54



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

Who is online

Users browsing this forum: No registered users and 1 guest