HaRT wrote: Mon 13 May, 2013 17:45
А на Home/End назначить умное (smart) поведение наподобие того, как Home ведёт себя в программерских редакторах, когда в начале строки есть незначащие (пробельные) символы.
Что-то меня торкнуло, и я реализовал нечто подобное для Home применительно к пометке элементов:
-- See https://forum.farmanager.com/viewtopic.php?p=179724#p179724
F = far.Flags
Macro
area:'Menu' -- especially useful in dialogs' text edit history lists
key:'Home'
description:"Smart Home: jump to the topmost regular non-/checked item"
action: ->
hDlg = actl.GetWindowInfo!.Id
listInfo = hDlg\ListInfo 1
idx = listInfo.SelectPos
getFlags = -> hDlg\ListGetItem( 1, idx ).Flags
flags = getFlags!
upper = idx
if flags == F.LIF_CHECKED + F.LIF_SELECTED -- regular, selected and checked
upper = listInfo.ItemsNumber
elseif flags == F.LIF_SELECTED -- regular, selected and non-checked
idx = 0
-- Not a binary search due to hidden, grayed, disabled, and separator items
while idx < upper and flags ~= F.LIF_NONE -- regular, unselected, unchecked?
idx += 1
flags = getFlags!
if idx ~= listInfo.SelectPos then
hDlg\ListSetCurPos 1, SelectPos: idx, TopPos: listInfo.TopPos
else
Keys'AKey'
Наибольшая польза ожидается в историях полей ввода, где ряд элементов помечен и поэтому сгруппирован вверху.
В меню с нестандартными пометками элементов (например, меню фильтров панели) может вести себя неожиданно.
Если я чего-то не учёл или есть предложения по улучшению, прошу высказываться.
Last edited by HaRT on Fri 07 Feb, 2025 15:56, edited 1 time in total.
Reason:Код немного упрощён с использованием «скорописи» LuaFAR