Автофильтр вместо быстрого поиска

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

Автофильтр вместо быстрого поиска

Post by John Doe »

Предлагаемый набор макросов реализует в панелях автофильтр, применяющийся динамически, по мере набора текста.
В качестве поля ввода используется панель Быстрого поиска (Search).
Автофильтр может использоваться как вместо Быстрого поиска, так и независимо от него.

Использование:
  • Клавиша активации: Alt (одиночное нажатие) в панелях — открывает панельку автофильтра.
    — Если в активной панели в настоящий момент не установлен фильтр, то подставляется маска *.
    — Если панель уже отфильтрована, то подставляется строка активного фильтра (по возможности: ).
  • По умолчанию действия левой и правой клавиши несколько отличаются:
    • LAlt запускает автофильтр в "немодальном" режиме, удобном для использования вместо Быстрого поиска:
      NB! При закрытии панельки (по Esc, или после выполнения какого-либо действия) фильтр панели сразу снимается.
    • RAlt запускает автофильтр в "постоянном" режиме, т.е. фильтр панели панели не сбросится до тех пор, пока пользователь не снимет его явно.
      NB! Для быстрого снятия фильтра достаточно нажать Esc в панелях.
    • Любое из действий (или оба) можно переназначить на другую комбинацию клавиш:
  • В панельке автофильтра действуют те же клавиши, что и при Быстром поиске, в частности:
    Большинство остальных клавиш передаются в панели, выполняя соответствующие действия в панелях, при этом панелька автофильтра закрывается.
    NB: есть возможность в options задать список клавиш, которые не будут закрывать автофильтр:
Дополнительно:

Credits:

Требования: FAR 3.0 build >= 5416
Attachments
PanelAutoFilter.lua
v2.9.3
(10.76 KiB) Downloaded 481 times
Last edited by John Doe on Wed 10 Jul, 2019 08:50, edited 1 time in total.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Автофильтр вместо быстрого поиска

Post by IgorZ »

Latest post of the previous page:

Попробовал. Интересная и полезная штука, беру на вооружение. Но обнаружена бага: у меня цвет панелей Фара - синий с белыми рамками. После снятия фильтра цвет рамок изменяется на голубой, а не восстанавливается белый.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Автофильтр вместо быстрого поиска

Post by John Doe »

Бага в том, что функция изменения цвета должна быть в релизе закомментирована, т.к. нет надёжного способа изменить цвет временно.
При нестандартной цветовой схеме единственное приемлемое решение — это вручную вписать нужные константы цветов.
Определить нужное значение можно например запустив из командной строки lua:=far.AdvControl("ACTL_GETCOLOR",far.Colors.COL_PANELBOX).ForegroundColor
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Автофильтр вместо быстрого поиска

Post by IgorZ »

Кто мешает в начале работы запомнить цвет, а вместо установки голубого восстанавливать запомненный?
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Автофильтр вместо быстрого поиска

Post by John Doe »

IgorZ wrote: Кто мешает в начале работы запомнить цвет, а вместо установки голубого восстанавливать запомненный?
Сначала именно так и сделал, оказалось ненадёжно, т.к. при сохранении настроек сохраняется и цветовая схема.

Можно записывать значение в базу, и предоставить пользователю возможность изменять его интерактивно.
Возможно добавлю, вместе с прочими настройками (это если вообще буду развивать скрипт: идеи есть, но где ж взять столько времени...)
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

Автофильтр вместо быстрого поиска

Post by HaRT »

LuaCheck пишет “accessing undefined variable 'TransitKeys'”, но если я в начало добавляю local TransitKeys, то рапортует “variable 'TransitKeys' is never set”. Приходится писать local TransitKeys = nil. Есть ли более элегантный способ?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Автофильтр вместо быстрого поиска

Post by John Doe »

HaRT wrote: Есть ли более элегантный способ?

Code: Select all

local TransitKeys
или

Code: Select all

local TransitKeys --= "Ins Up Down PgUp PgDn CtrlMultiply"
Но мне кажется вы не в ту тему пишите (есть и другие способы убрать ненужные предупреждения, например добавив в конец "проблемной" строки комментарий --luacheck: ignore TransitKeys, и т.п.).
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

Автофильтр вместо быстрого поиска

Post by DV »

Нашёл пару странных "багов" в этом замечательном скрипте. Как воспроизвести:
1. Заходим в папку Addons (которая в папке с FAR3)
2. Нажимаем Alt, вводим фильтр "co" (остаётся видна только папка "Colors")
3. Не закрывая панель Search, нажимаем F1
4. Нажимаем Esc для скрытия окна помощи - в результате панель файлов перерисовалась не полностью:


Второй "баг" связан с тем, что иногда после закрытия панели Search (нажатием Esc) фильтр остаётся активным (то есть на файловой панели видны только отфильтрованные элементы), а иногда - нет (на файловой панели видны все элементы). С чем это связано, так и не понял.
- (обновлено) сорри, это не баг! Это разная реакция на активацию нажатием LAlt и RAlt.

Версия макроса - из "шапки" темы, FAR 3.0 build 4391 x86.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Автофильтр вместо быстрого поиска

Post by John Doe »

DV wrote: Как воспроизвести:
http://bugs.farmanager.com/view.php?id=3014
Но в макросе тоже баг: не надо обрабатывать F1 (добавил исключение в condition).
User avatar
goran
Posts: 11
Joined: Thu 19 May, 2016 23:07
Location: Odessa
Has thanked: 1 time
Been thanked: 1 time

Автофильтр вместо быстрого поиска

Post by goran »

Скажите пожалуйста, решение для пропуска комбинации AltTab вы в макрос так и не добавили, или в шапке не последняя версия?
Я имею ввиду вот это: http://forum.farmanager.com/viewtopic.p ... 52#p128252

И может подскажете, как заставить заработать такое условие:

Code: Select all

  condition=function() return APanel.Visible and APanel.FilePanel and SkipAltTab() end;
А то у меня не получилось, много времени на разбирательства не тратил, сделал по быстрому без функции SkipAltTab:

Code: Select all

  condition=function()
    LostFocus = false
    mf.waitkey(1)
    return APanel.Visible and APanel.FilePanel and (not LostFocus)
  end;
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Автофильтр вместо быстрого поиска

Post by John Doe »

goran wrote: решение для пропуска комбинации AltTab вы в макрос так и не добавили, или в шапке не последняя версия?
Угу, в шапке нет. А надо? У вас XP?
goran wrote: И может подскажете, как заставить заработать такое условие:
Может и подскажу, если объясните в чём именно проблема.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

Автофильтр вместо быстрого поиска

Post by DV »

Версия макроса в шапке конфликтует с гашением панелей, назначенным на Esc :(
Как воспроизвести:
1) Добавляем макрос

Code: Select all

Macro {
  description="Use Esc to toggle panels on/off";
  area="Shell Info QView Tree";
  key="Esc";
  action = function() Keys('CtrlO') end;
}
2) Добавляем макрос PanelAutoFilter.lua
3) В любой файловой панели нажимаем Ctrl+I, активируем любой фильтр, Enter
4) В панели с активным фильтром нажимаем Esc - ожидается гашение панелей - в реальности ничего не происходит
5) Убираем макрос PanelAutoFilter.lua, перезапускаем FAR, повторяем пункты 3 и 4 - панели гасятся
Last edited by DV on Sat 22 Jul, 2017 00:43, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Автофильтр вместо быстрого поиска

Post by John Doe »

Замените функцию clearFilter на эту:

Code: Select all

local function clearFilter() --Очистка автофильтра активной панели
  Color("COL_PANELBOX","Normal")
  local done
  for filter in AllFilters(filtername) do
    if band(Menu.ItemStatus(),0x2)~=0 then
      Keys"BS"; done = true
    else
      Keys"Down"
    end
  end
  return done
end;
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

Автофильтр вместо быстрого поиска

Post by HaRT »

John Doe wrote: Mon 24 Jun, 2019 12:40

Code: Select all

drkns 21.06.2019 20:40:14 +0100 - build 5416
...
2. Атрибуты в диалогах фильтров & групп раскраски/сортировки вынесены в отдельный диалог, т.к. в основной пихать уже некуда.
...
Атрибут Directory теперь труднодоступен, при том что с ним и так нелегко.
(почему нелегко см. выше по теме, и viewtopic.php?p=153831#p153831)
Нет ли у вас соответствующего изменения для PanelAutoFilter? А то теперь он ломается на Dlg.GetValue(DirsPos,0))%3. :(
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Автофильтр вместо быстрого поиска

Post by John Doe »

HaRT wrote: Tue 09 Jul, 2019 21:32 Нет ли у вас соответствующего изменения
В шапке.
DimTim
Posts: 12
Joined: Fri 25 Jan, 2013 06:42

Автофильтр вместо быстрого поиска

Post by DimTim »

Дико удобный плагин, спасибо! :)
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Автофильтр вместо быстрого поиска

Post by Xerox »

Я так понял тут эмулируeтся "Folder Panel Filter"
Неплохо, но это как лечить зубы с другого конца туловища, имхо .
T.е. - круто, и за неимением лучшего выбора - очень даже круто.

А может быть лучшим выбором могло бы быть:

1.) запоминание элементов панели, как тупо визуальных элементов, - DlgItems or whatever
2.) при задании/изменении фильтра - выводим список соответствующих элементов
3.) При отмене фильтра - вернуть то что было изначально на место, или просто обновить панель

предыстория вопроса -
Я хотел найти что-то подобное стандартному замечательному Ctrl+Alt+F для файловых панелей,
и/или любых другиих панелей где нет Ctrl+Alt+F.
Cтал искать и нашел этот скрипт.
по функционалу кажется что близко, но реализация, как мне кажется какая-то грустная,
- ломает другую функциональность, имеет ограничения.

А хотелось бы что-то до ужаса простое и удобное как Ctrl+Alt+F для файловых панелей
Который есть кажется что везде, кроме, почему-то, файловых панелей.

Кто-нибудь может обьяснить в чем причина вышеизложенного, и/или в чем я не прав?
Last edited by Xerox on Mon 02 Dec, 2019 18:39, edited 2 times in total.
Post Reply

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