Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top
Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top
Скрипт для нумерации линий в редакторе,
больше как демонстрация необходимости нормального Always-on-Top,
или управления размером открытого редактора.
Скрипт неплох, например учитывает наличие/отсутствие скроллбара, отмечает текущую линию иным цветом.
Недостатки:
1.) Моргает при любом движении в редакторе (необходимость перерисовывать при каждом ЕЕ_Redraw)
2.) нумерация неизбежно изза far.Text(...) находится справа, что неудобно.
3.) Даже будучи справа, может заслонять текст
Пути решения через АПИ ФАРа (нет на данный момент):
1.) Изменение размера редактора на лету
Тогда уменьшаем редактор по ширине на нужную ширину полей, в полях рисуем фар.Текстом(..) все что нужно.
В полях - это за пределами редактора, поэтому не нужно никакого ЕЕ_Redraw, как нарисовали,
так и будет нарисовано, - моргать не будет, эпилептики спасены!
1.) Сделать Always-on-Top диалог с нумерацией, ну тут все понятно, диалог моргать не будет,
будет в форме бара высотой с редактор с нумерацией.
ЗДЕСь:
https://github.com/dr-dba/far-lua-edito ... t-edit-pos
больше как демонстрация необходимости нормального Always-on-Top,
или управления размером открытого редактора.
Скрипт неплох, например учитывает наличие/отсутствие скроллбара, отмечает текущую линию иным цветом.
Недостатки:
1.) Моргает при любом движении в редакторе (необходимость перерисовывать при каждом ЕЕ_Redraw)
2.) нумерация неизбежно изза far.Text(...) находится справа, что неудобно.
3.) Даже будучи справа, может заслонять текст
Пути решения через АПИ ФАРа (нет на данный момент):
1.) Изменение размера редактора на лету
Тогда уменьшаем редактор по ширине на нужную ширину полей, в полях рисуем фар.Текстом(..) все что нужно.
В полях - это за пределами редактора, поэтому не нужно никакого ЕЕ_Redraw, как нарисовали,
так и будет нарисовано, - моргать не будет, эпилептики спасены!
1.) Сделать Always-on-Top диалог с нумерацией, ну тут все понятно, диалог моргать не будет,
будет в форме бара высотой с редактор с нумерацией.
ЗДЕСь:
https://github.com/dr-dba/far-lua-edito ... t-edit-pos
Last edited by citRiks on Sat 08 May, 2021 21:17, edited 5 times in total.
Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top
скрипт здесь
<вложения удалено, см. заголовок>
<вложения удалено, см. заголовок>
Last edited by citRiks on Sat 20 Jun, 2020 17:54, edited 3 times in total.
Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top
Отмечу вот что, моргание происходит изза Redraw().
A Redraw() создает колорер, даже при отсутствии телодвижений юзера или изменений ФАРа.
А создает он эти евенты, потому что на больших файлах не успевает прямо сразу все отрисовать,
и потом в фоне дорисовывает у себя то что остается за кадром.
Делать ему это надо, потому что там за кадром могут быть скобки, и прочее что надо просчитать для отисовки.
Так что это, в принципе, не баг.
И на открытом файле, через время в зависимости от размера файла, это моргание исчезает.
A Redraw() создает колорер, даже при отсутствии телодвижений юзера или изменений ФАРа.
А создает он эти евенты, потому что на больших файлах не успевает прямо сразу все отрисовать,
и потом в фоне дорисовывает у себя то что остается за кадром.
Делать ему это надо, потому что там за кадром могут быть скобки, и прочее что надо просчитать для отисовки.
Так что это, в принципе, не баг.
И на открытом файле, через время в зависимости от размера файла, это моргание исчезает.
- Taciturn
- Posts: 603
- Joined: Thu 26 May, 2005 17:14
- Location: Санкт-Петербург
- Has thanked: 89 times
- Been thanked: 31 times
- Contact:
Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top
А нельзя ли где-нибудь проценты готовности рисовать?
Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top
убрал лишние Redraw. проверьте в ночной сборке
Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top
если 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)
Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top
ctapmex, спасибо, принимается да, не моргает теперь даже на больших файлах, что вообще круто
поменял в заголовке с учетом предложенных изменений, плюс некоторая косметика
косметика в том что столбец с нумерацией не шире самого числа
поменял в заголовке с учетом предложенных изменений, плюс некоторая косметика
косметика в том что столбец с нумерацией не шире самого числа
Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top
Идея хорошая, это вопрос к Колореру
ctapmex, что скажете?
Т.е., нельзя ли получить какой-то API который дает статус готовности в процентах?
Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top
Произведено несущественное обновление, в заголовке.
Больше как повод отметить, что оказывается что для уже открытого редактора нет никакого официального способа ни получить координаты редактора, ни тем более задать ее.
Поэтому рисование нумерации справа при любом "нестандартном" (с заданными координатами) открытии редактора неизбежно будет кривым.
У себя я это решил такими способами:
1.) См. приаттаченный здесь архив с макросом - частичное костыльное решение, но во многих сценариях прокатит.
ЗДЕСь:
https://github.com/dr-dba/far-lua-edito ... t-edit-pos
2.) Скачал исходники ФАРа, сделал там editor.GetCoord(...) + editor.SеtCoord(...),
это полное решение рабочее решение, но только в своем личном билде
Больше как повод отметить, что оказывается что для уже открытого редактора нет никакого официального способа ни получить координаты редактора, ни тем более задать ее.
Поэтому рисование нумерации справа при любом "нестандартном" (с заданными координатами) открытии редактора неизбежно будет кривым.
У себя я это решил такими способами:
1.) См. приаттаченный здесь архив с макросом - частичное костыльное решение, но во многих сценариях прокатит.
ЗДЕСь:
https://github.com/dr-dba/far-lua-edito ... t-edit-pos
2.) Скачал исходники ФАРа, сделал там editor.GetCoord(...) + editor.SеtCoord(...),
это полное решение рабочее решение, но только в своем личном билде
Last edited by citRiks on Sat 08 May, 2021 21:18, edited 2 times in total.
Скрипт для нумерации линий в редакторе, больше как демонстрация необходимости нормального Always-on-Top
На самом деле можно, отталкиваясь от
ACTL_GETCURSORPOS
, несколько окольным путем получаем координату и геометрию окна редактора:
Code: Select all
function Xer0X.fnc_cons_edit_curs_geomtr(editor_id, edit_info, curs_pstn, cons_rect)
edit_info = edit_info or editor_GetInfo(editor_id)
if not edit_info then return end
curs_pstn = curs_pstn or far_AdvControl(ACTL_GETCURSORPOS)
cons_rect = cons_rect or far_AdvControl(ACTL_GETFARRECT)
local tbl_rtvl = {
cons_rect = cons_rect,
curs_pstn = curs_pstn,
edit_info = edit_info,
DPosX = math_max(curs_pstn.X - (edit_info.CurTabPos + 0 - edit_info.LeftPos ), 0),
DPosY = math_max(curs_pstn.Y - (edit_info.CurLine + 0 - edit_info.TopScreenLine ), 0),
DSizeX = math_max(cons_rect.Right - cons_rect.Left+ 1 - edit_info.WindowSizeX, 0),
DSizeY = math_max(cons_rect.Bottom - cons_rect.Top + 1 - edit_info.WindowSizeY, 0),
}
tbl_rtvl.EPosX = math_max(tbl_rtvl.DSizeX - tbl_rtvl.DPosX, 0)
tbl_rtvl.EPosY = math_max(tbl_rtvl.DSizeY - tbl_rtvl.DPosY, 0)
tbl_rtvl.EPosX1= tbl_rtvl.DPosX
tbl_rtvl.EPosY1= tbl_rtvl.DPosY - (bit64_band(edit_info.Options, EOPT_SHOWTITLEBAR)== EOPT_SHOWTITLEBAR and 1 or 0)
tbl_rtvl.EPosX2= tbl_rtvl.EPosX1 + edit_info.WindowSizeX - 1 + (bit64_band(edit_info.Options, EOPT_SHOWSCROLLBAR)==EOPT_SHOWSCROLLBAR and 1 or 0)
tbl_rtvl.EPosY2= tbl_rtvl.EPosY1 + edit_info.WindowSizeY - 1 + (bit64_band(edit_info.Options, EOPT_SHOWKEYBAR ) == EOPT_SHOWKEYBAR and 1 or 0)
return tbl_rtvl
end
https://github.com/dr-dba/far-lua-general-utils
В этом скрипте рисования нумерации линий уже используется.
Кстати, в том же скрипте есть полезный макрос возвращения к месту последнего редактривания.