Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top

Здесь обсуждается всё, что касается макросов.
Post Reply
citRiks
Posts: 1057
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 334 times
Been thanked: 52 times

Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top

Post by citRiks »

Скрипт для нумерации линий в редакторе,
больше как демонстрация необходимости нормального Always-on-Top,
или управления размером открытого редактора.

Скрипт неплох, например учитывает наличие/отсутствие скроллбара, отмечает текущую линию иным цветом.

Недостатки:
1.) Моргает при любом движении в редакторе (необходимость перерисовывать при каждом ЕЕ_Redraw)
2.) нумерация неизбежно изза far.Text(...) находится справа, что неудобно.
3.) Даже будучи справа, может заслонять текст

Пути решения через АПИ ФАРа (нет на данный момент):

1.) Изменение размера редактора на лету
Тогда уменьшаем редактор по ширине на нужную ширину полей, в полях рисуем фар.Текстом(..) все что нужно.
В полях - это за пределами редактора, поэтому не нужно никакого ЕЕ_Redraw, как нарисовали,
так и будет нарисовано, - моргать не будет, эпилептики спасены!

1.) Сделать Always-on-Top диалог с нумерацией, ну тут все понятно, диалог моргать не будет,
будет в форме бара высотой с редактор с нумерацией.
Attachments
Editor+EditorEvent_LineNum.@Xer0X.Lua.7z
(1.23 KiB) Downloaded 14 times
Last edited by citRiks on Tue 08 Sep, 2020 21:32, edited 4 times in total.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 1057
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 334 times
Been thanked: 52 times

Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top

Post by citRiks »

скрипт здесь
<вложения удалено, см. заголовок>
Last edited by citRiks on Sat 20 Jun, 2020 17:54, edited 3 times in total.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 1057
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 334 times
Been thanked: 52 times

Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top

Post by citRiks »

Отмечу вот что, моргание происходит изза Redraw().
A Redraw() создает колорер, даже при отсутствии телодвижений юзера или изменений ФАРа.
А создает он эти евенты, потому что на больших файлах не успевает прямо сразу все отрисовать,
и потом в фоне дорисовывает у себя то что остается за кадром.
Делать ему это надо, потому что там за кадром могут быть скобки, и прочее что надо просчитать для отисовки.
Так что это, в принципе, не баг.
И на открытом файле, через время в зависимости от размера файла, это моргание исчезает.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
Taciturn
Posts: 442
Joined: Thu 26 May, 2005 17:14
Location: Санкт-Петербург
Has thanked: 41 times
Been thanked: 15 times
Contact:

Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top

Post by Taciturn »

citRiks wrote: Fri 05 Jun, 2020 16:12 И на открытом файле, через время в зависимости от размера файла, это моргание исчезает.
А нельзя ли где-нибудь проценты готовности рисовать?
User avatar
ctapmex
Posts: 1131
Joined: Fri 11 Apr, 2008 07:53
Been thanked: 31 times

Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top

Post by ctapmex »

если 23 строку заменить на

Code: Select all

local line_num_final = math.min(ei.TopScreenLine + ei.WindowSizeY- (band(ei.Options, F.EOPT_SHOWTITLEBAR) == 0 and 0 or 1), ei.TotalLines)
то будет еще получше
citRiks
Posts: 1057
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 334 times
Been thanked: 52 times

Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top

Post by citRiks »

ctapmex, спасибо, принимается :) да, не моргает теперь даже на больших файлах, что вообще круто
поменял в заголовке с учетом предложенных изменений, плюс некоторая косметика
косметика в том что столбец с нумерацией не шире самого числа
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 1057
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 334 times
Been thanked: 52 times

Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top

Post by citRiks »

Taciturn wrote: Sat 06 Jun, 2020 12:48
citRiks wrote: Fri 05 Jun, 2020 16:12 И на открытом файле, через время в зависимости от размера файла, это моргание исчезает.
А нельзя ли где-нибудь проценты готовности рисовать?
Идея хорошая, это вопрос к Колореру
ctapmex, что скажете?
Т.е., нельзя ли получить какой-то API который дает статус готовности в процентах?
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 1057
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 334 times
Been thanked: 52 times

Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top

Post by citRiks »

Произведено несущественное обновление, в заголовке.
Больше как повод отметить, что оказывается что для уже открытого редактора нет никакого официального способа ни получить координаты редактора, ни тем более задать ее.
Поэтому рисование нумерации справа при любом "нестандартном" (с заданными координатами) открытии редактора неизбежно будет кривым.
У себя я это решил такими способами:
1.) См. приаттаченный здесь архив с макросом - частичное костыльное решение, но во многих сценариях прокатит.
2.) Скачал исходники ФАРа, сделал там editor.GetCoord(...) + editor.SеtCoord(...),
это полное решение рабочее решение, но только в своем личном билде
Attachments
EditorEvent+API_inject_and_retrieve_editor_coords.@Xer0X.Lua.7z
(819 Bytes) Downloaded 13 times
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
Post Reply

Return to “Обсуждение макросов”