Condensed View

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

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

Post by buniak_a_h » Fri 24 Jul, 2015 17:19

Latest post of the previous page:

John Doe wrote: Есть апи для изменения статусной строки, но только левой части, где отображается имя файла
Я это и имел в виду. Сейчас я вывожу вместо имени файла «<Имя_файла> Condenced». Туда же после двоеточия можно было бы писать номер исходной строки. Проблема в том, как отследить перемещение по файлу.
John Doe wrote: Есть апи раскраски
Это я тоже уже видел. Проблема та же: как обнаружить перемещение по файлу, чтобы отменить раскраску предыдущей строки и раскрасить нынешнюю.
John Doe wrote: buniak_a_h писал(а):
Источник цитаты Не устанавливать признак изменения файла
Вряд ли это возможно...
Возможно, есть способ не удалять строки, а просто делать их как-то невидимыми... Это решило бы многие проблемы.
John Doe wrote: Покажите код,
В тексте макроса закомментировано Event {...} и подписка.
И главное
John Doe wrote: для начала оформите первый пост темы
Я никогда не имел дело с форумами. Что значить "оформить первый пост"? Закачать в него исходный текст макроса? Все почти 200 строк? "Добавить файл" - не пускают (неверно расширение). Где хоть прочитать, какие можно, какие нельзя?
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

buniak_a_h
Posts: 1268
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 90 times
Been thanked: 81 times
Contact:

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

Post by buniak_a_h » Fri 24 Jul, 2015 17:23

John Doe, я таки добавил через какой-то "spoiler" текст макро в первый пост. Тега [codebox] не знаю...Не нашёл :-(
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

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

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

Post by John Doe » Fri 24 Jul, 2015 17:30

buniak_a_h wrote: Проблема та же: как обнаружить перемещение по файлу, чтобы отменить раскраску предыдущей строки и раскрасить нынешнюю.
Где лежит пример рабочего кода я вроде написал
buniak_a_h wrote: не удалять строки, а просто делать их как-то невидимыми...
Этого к сожалению нету. Оформите пожелание на багтрекере.
buniak_a_h wrote: Что значить "оформит первый пост"
Во-первых исправить заголовок (но это уже сделал за вас кто-то из модераторов).
Во-вторых, оформить пост с тем расчётом, что он будет повторяться на каждой странице.
В-третьих, поддерживать там актуальную версию макроса.
(это на будущее)
buniak_a_h wrote: "Добавить файл" - не пускают (неверно расширение).
Да, есть такое ограничение, вероятно администраторам трудно добавить lua в список разрешённых расширений.
Упакуйте в архив.
buniak_a_h wrote: Тега [codebox] не знаю...Не нашёл
Если нажать большую кнопку Ответить, то в открывшейся форме вы его увидите (выпадающий список с надписью Select code).
(Вместо того, чтобы спрашивать, можно было поискать на форуме по слову codebox.)

buniak_a_h
Posts: 1268
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 90 times
Been thanked: 81 times
Contact:

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

Post by buniak_a_h » Fri 24 Jul, 2015 18:00

John Doe wrote: Во-вторых, оформить пост с тем расчётом, что он будет повторяться на каждой странице.
А как это сделать?
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

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

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

Post by John Doe » Fri 24 Jul, 2015 18:13

buniak_a_h wrote: А как это сделать?
От вас требуется подготовить, а закрепит кто-либо из модераторов.

buniak_a_h
Posts: 1268
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 90 times
Been thanked: 81 times
Contact:

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

Post by buniak_a_h » Sat 25 Jul, 2015 03:11

Всем спасибо, макрос работает практически как задуман. Если кто знает, как выключить курсор - это был бы последний штрих. Но это уже эстетство.
Мои сотрудники по программистскому цеху уже вовсю используют его, явных ошибок не выявлено. Если кто знает, как это сделать - прошу закачать на Plug Ring.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

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

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

Post by John Doe » Sat 25 Jul, 2015 10:53

buniak_a_h wrote: явных ошибок не выявлено.
Зато luacheck в шоке от злоупотребления неинициализированными глобальными переменными.
В частности:
buniak_a_h wrote: Если кто знает, как это сделать - прошу закачать на Plug Ring.
Это авторы делают самостоятельно: http://forum.farmanager.com/viewtopic.php?f=11&t=1018

Но что касается полезных макросов, то для них есть специальный раздел (см. http://forum.farmanager.com/viewtopic.php?f=60&t=7851), а заливать на плагринг их у нас не очень принято (но не запрещается конечно).

Нсчёт шапки темы, отображаясь на каждой странице она сейчас смотрится странновато: я бы на вашем месте оставил бы из имеющегося там только первый абзац, но подробнее остановился на функциях макроса.

P.S.
Макрос на яндексе отличается, и неясно какой же новее.
Или приведите в соответствие, или удалите ссылку.

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

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

Post by John Doe » Sat 25 Jul, 2015 11:14

Ещё по багам: похоже макрос не учитывает, что
1) на момент его загрузки уже могут быть открытые редакторы
2) в момент его выгрузки редакторы могут быть ещё открыты (подозреваю в этом их надо "расконденсировать")
3) editor.GetInfo() может вернуться с ошибкой
4) Конденсированный файл можно сохранить, т.к. EE_SAVE не обрабатывается.
5) Отступы табуляциями не обрабатываются

Не баги, но
1) в Event condition не нужен, т.к. соответствующая проверка дублируется в ProcessEditorInput
2) в CondViewOff вместо EditorsCondView[EID].Ends = true; cтоит сделать EditorsCondView[EID] = nil
3) Там же: один раз получив EditorsCondView[EID] стоит записать в локальную переменную, это улучшит читаемость кода
4) ";" в конце строк не нужна
5) Поле .RO_Curr нигде не используется.
6) Вместо ProcessEditorInput не лучше ли привязаться к EE_REDRAW?
7) Вместо можно использовать а ещё короче и нагляднее return EditorsCondView[editor.GetInfo().EditorID].
8) OnProcess может быть не таблицей, а простой логической переменной, ведь одновременный ввод в разных редакторах не предполагается обрабатывать?
9) Что если вместо модификации активного редактора для Condenced View открывать новый?

buniak_a_h
Posts: 1268
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 90 times
Been thanked: 81 times
Contact:

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

Post by buniak_a_h » Sat 25 Jul, 2015 11:37

Про luacheck: Вы уверены, что он правильно анализирует? Получаю ошибку mutating read-only global variable ... . На самом деле (а) я не понимаю, почему эта переменная read-only; (б) она в этом месте прекрасно инициализируется; если б этот оператор не работал, вообще ничего не работало бы.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

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

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

Post by John Doe » Sat 25 Jul, 2015 11:46

Список рекомендаций только что дополнил.
По luackeck я отвечу в соответствующей теме.

buniak_a_h
Posts: 1268
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 90 times
Been thanked: 81 times
Contact:

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

Post by buniak_a_h » Sat 25 Jul, 2015 11:57

Я извиняюсь за мой Lua=нский, никогда не сталкивался с этим языком. Не знаю таких основополагающих понятий, как "глобальная" переменная, область видимости и т.п. . Знаком с двумя подходами: (а) как в почти всех языках (область видимости - блок и вложенные); (б) переменная видна всем с момента создания и до момента уничтожения, если явно не указано, что она локальная (как в Clippere и некоторых скриптовых языках с общим пространством имён). Очень надеюсь, Вы не будете смеяться или ругаться.
John Doe wrote: похоже макрос не учитывает, что (...) на момент его загрузки уже могут быть открытые редакторы
На самом деле я думал, что тем, что я получаю editor.GetInfo().EditorID, и в дальнейшем использую полученный EID, тем самым я ограничиваю влияние макроса на один этот редактор (ограничиваю контекст). На всякий случай я проверил : если в момент запуска макроса было запущено несколько редакторов, то "сжатый режим" распространяется только на текущий. Или это - не то?
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

buniak_a_h
Posts: 1268
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 90 times
Been thanked: 81 times
Contact:

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

Post by buniak_a_h » Sat 25 Jul, 2015 12:00

John Doe wrote: 2) в CondViewOff вместо EditorsCondView[EID].Ends = true; cтоит сделать EditorsCondView[EID] = nil
Так и сделано. Я не понял, почему после EditorsCondView[EID] = nil Event вызывается ещё раз, хотя в condition условие указано. В результате после окончания макроса последняя строка оставалась раскрашенной.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

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

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

Post by John Doe » Sat 25 Jul, 2015 12:16

buniak_a_h wrote: Не знаю таких основополагающих понятий, как "глобальная" переменная, область видимости и т.п. .
Всё что вы описали далее в полной мере относится к lua, хотя реализация в фаре имеет и некоторые особенности
buniak_a_h wrote: На всякий случай я проверил : если в момент запуска макроса было запущено несколько редакторов, то "сжатый режим" распространяется только на текущий. Или это - не то?
Да, всё то, в вашем случае действительно не надо учитывать уже открытые редакторы.
buniak_a_h wrote: Я не понял, почему после EditorsCondView[EID] = nil Event вызывается ещё раз, хотя в condition условие указано.
Не знаю что там у вас за проблема, но condition можно убрать, он сейчас не нужен.

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

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

Post by John Doe » Sat 25 Jul, 2015 12:36

Вопросы по форматированию самого CondView.lua.
В некоторых случая в качестве отступа используется один пробел, в некоторых два. Это намеренно?
В декларациях Macro функция codition почему-то оформлена без отступов, т.е. как бы вынесена на самый верхний уровень. Для чего так?
Почему первые 5 строк функции CondViewOn идут без отступа?

Т.е. имеет ли это какой-то особый смысл в свёрнутом виде (т.е. после применения скрипта к собственному коду)?

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

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

Post by John Doe » Sat 25 Jul, 2015 13:35

Добавил пункты 5..9 к замечаниям.
И пункты 4..5 к багам.

buniak_a_h
Posts: 1268
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 90 times
Been thanked: 81 times
Contact:

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

Post by buniak_a_h » Sat 25 Jul, 2015 19:26

John Doe, о багах.
John Doe wrote: 2) в момент его выгрузки редакторы могут быть ещё открыты (подозреваю в этом их надо "расконденсировать")
Как это может быть на практике? Ввели из командной строи нечто типа macro:load ? Ну да, такого я не рассматривал. Как-то это нежизненно. Да и не знаю, как сделать. А разбираться ради какой-то нереальной ситуации - ну это ж не моя работа. Просто сделал удобное, решил поделиться.
John Doe wrote: 3) editor.GetInfo() может вернуться с ошибкой
И что делать? Типа если не получилось, так и не выполнять ничего?
А на самом деле, почему это может произойти, если макрос вызывается в редакторе (area="Editor")? Из-за ошибки в самом FAR-е? На это, думаю, закладываться не стОит: если оболочка не работает, то вообще ничего нельзя делать...
John Doe wrote: 4) Конденсированный файл можно сохранить, т.к. EE_SAVE не обрабатывается.
Да, я знаю. Я писал среди того, что не сделано, но хотелось бы - блокировку сохранения. Как это сделать, я не знаю. Знаю, правда, где смотреть, но дело опять упирается в то, что мне долго... А Вы можете сделать это быстро: наверняка есть опыт...
John Doe wrote: 5) Отступы табуляциями не обрабатываются
Спасибо, посмотрю. Там что-то про editor.RealToTab, кажется.
---
Вопрос по форуму: как Вы делаете, что куси кода встраиваются прямо в текст поста (то, что у Вас зелёным по белому в рамке)?
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

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

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

Post by John Doe » Sat 25 Jul, 2015 19:34

buniak_a_h wrote: нечто типа macro:load ? Ну да, такого я не рассматривал. Как-то это нежизненно.
Очень даже жизненно. И для этого есть event: ExitFAR.
buniak_a_h wrote: И что делать? Типа если не получилось, так и не выполнять ничего?
Что-то типа этого:

Code: Select all

local ei=editor.GetInfo()
if not ei then return end
buniak_a_h wrote: но хотелось бы - блокировку сохранения. Как это сделать, я не знаю.
Сказано же: EE_SAVE
buniak_a_h wrote: Вопрос по форуму: как Вы делаете,[...]
Нажмите кнопку с кавычкой, и узнаете.

Post Reply

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