Condensed View

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

Реализация CondView

Post by John Doe »

Latest post of the previous page:

buniak_a_h wrote: В статусной строке (сверху) отображать не номер сжатой строки, а исходный номер.
Есть апи для изменения статусной строки, но только левой части, где отображается имя файла.
Не исключаю, что можно "рисовать" что-то и в правой части вручную (far.Text), но мне кажется игра не стоит свеч.
buniak_a_h wrote: При включенном сжатом режиме отмечать цветом всю текущую строку
Есть апи раскраски, есть примеры несложных скриптов на форуме, см. например "Cross" в подфоруме полезных скриптов.
buniak_a_h wrote: Не устанавливать признак изменения файла
Вряд ли это возможно...
buniak_a_h wrote: Во всяком случае, возникает переполнение стэка.
Покажите код, посмотрим что не так.
Но для начала оформите первый пост темы.

P.S.
Находить ошибки в коде неплохо помогает luacheck.
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: Есть апи для изменения статусной строки, но только левой части, где отображается имя файла
Я это и имел в виду. Сейчас я вывожу вместо имени файла «<Имя_файла> Condenced». Туда же после двоеточия можно было бы писать номер исходной строки. Проблема в том, как отследить перемещение по файлу.
John Doe wrote: Есть апи раскраски
Это я тоже уже видел. Проблема та же: как обнаружить перемещение по файлу, чтобы отменить раскраску предыдущей строки и раскрасить нынешнюю.
John Doe wrote: buniak_a_h писал(а):
Источник цитаты Не устанавливать признак изменения файла
Вряд ли это возможно...
Возможно, есть способ не удалять строки, а просто делать их как-то невидимыми... Это решило бы многие проблемы.
John Doe wrote: Покажите код,
В тексте макроса закомментировано Event {...} и подписка.
И главное
John Doe wrote: для начала оформите первый пост темы
Я никогда не имел дело с форумами. Что значить "оформить первый пост"? Закачать в него исходный текст макроса? Все почти 200 строк? "Добавить файл" - не пускают (неверно расширение). Где хоть прочитать, какие можно, какие нельзя?
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

John Doe, я таки добавил через какой-то "spoiler" текст макро в первый пост. Тега [codebox] не знаю...Не нашёл :-(
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

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.)
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: Во-вторых, оформить пост с тем расчётом, что он будет повторяться на каждой странице.
А как это сделать?
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

buniak_a_h wrote: А как это сделать?
От вас требуется подготовить, а закрепит кто-либо из модераторов.
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

Всем спасибо, макрос работает практически как задуман. Если кто знает, как выключить курсор - это был бы последний штрих. Но это уже эстетство.
Мои сотрудники по программистскому цеху уже вовсю используют его, явных ошибок не выявлено. Если кто знает, как это сделать - прошу закачать на Plug Ring.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

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: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

Ещё по багам: похоже макрос не учитывает, что
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 открывать новый?
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

Про luacheck: Вы уверены, что он правильно анализирует? Получаю ошибку mutating read-only global variable ... . На самом деле (а) я не понимаю, почему эта переменная read-only; (б) она в этом месте прекрасно инициализируется; если б этот оператор не работал, вообще ничего не работало бы.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

Список рекомендаций только что дополнил.
По luackeck я отвечу в соответствующей теме.
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

Я извиняюсь за мой Lua=нский, никогда не сталкивался с этим языком. Не знаю таких основополагающих понятий, как "глобальная" переменная, область видимости и т.п. . Знаком с двумя подходами: (а) как в почти всех языках (область видимости - блок и вложенные); (б) переменная видна всем с момента создания и до момента уничтожения, если явно не указано, что она локальная (как в Clippere и некоторых скриптовых языках с общим пространством имён). Очень надеюсь, Вы не будете смеяться или ругаться.
John Doe wrote: похоже макрос не учитывает, что (...) на момент его загрузки уже могут быть открытые редакторы
На самом деле я думал, что тем, что я получаю editor.GetInfo().EditorID, и в дальнейшем использую полученный EID, тем самым я ограничиваю влияние макроса на один этот редактор (ограничиваю контекст). На всякий случай я проверил : если в момент запуска макроса было запущено несколько редакторов, то "сжатый режим" распространяется только на текущий. Или это - не то?
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: 2) в CondViewOff вместо EditorsCondView[EID].Ends = true; cтоит сделать EditorsCondView[EID] = nil
Так и сделано. Я не понял, почему после EditorsCondView[EID] = nil Event вызывается ещё раз, хотя в condition условие указано. В результате после окончания макроса последняя строка оставалась раскрашенной.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

buniak_a_h wrote: Не знаю таких основополагающих понятий, как "глобальная" переменная, область видимости и т.п. .
Всё что вы описали далее в полной мере относится к lua, хотя реализация в фаре имеет и некоторые особенности
buniak_a_h wrote: На всякий случай я проверил : если в момент запуска макроса было запущено несколько редакторов, то "сжатый режим" распространяется только на текущий. Или это - не то?
Да, всё то, в вашем случае действительно не надо учитывать уже открытые редакторы.
buniak_a_h wrote: Я не понял, почему после EditorsCondView[EID] = nil Event вызывается ещё раз, хотя в condition условие указано.
Не знаю что там у вас за проблема, но condition можно убрать, он сейчас не нужен.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

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

Т.е. имеет ли это какой-то особый смысл в свёрнутом виде (т.е. после применения скрипта к собственному коду)?
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

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

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