Приложение поиска - один из самых важных инструментов, которое только может стоять на вашем компьютере. Большинство из них медленно индексируют вашу систему и находят результаты. Однако сегодня мы рассмотрим приложение, которое отображает результаты, не дожидаясь окончания ввода. Сегодня мы будем изучать ANGRYsearch.

Все вокруг, кажется, чертовски довольны существующими поискам. Одни из них медленны и заполняют результаты по ходу дела; другие основаны на cli, что затрудняет комфортное использование результатов, следующие сильно интегрированы с файловым менеджером и часто ограничивают поиск домашней директорией, или пытаются быть всем, с поиском содержимого полнотекстового файла.

Еще один с подобным функционалом, заслуживающий отдельного внимания – Fsearch

ANGRYsearch — это приложение на основе Python, которое выдает результаты при вводе поискового запроса. Общая идея и дизайн приложения основаны на инструменте поиска для Windows «Everything».

ANGRYsearch может отображать результаты поиска так быстро, потому что он только индексирует имена файлов. После установки ANGRYsearch вы создаете базу данных имен файлов путем индексации вашей системы. Затем ANGRYsearch быстро фильтрует имена файлов при вводе запроса.

Что выбрать: лайт версию или фул-мод?

Angrysearch может быть установлен в двух разных режимах конфигурации и по умолчанию это lite версия.

  • Лайт версия показывает только имя и путь;
  • Полный режим показывает, помимо прочего, размер и дату последней модификации. Недостатком является то, что поиск занимает примерно вдвое больше времени, так как каждый файл и каталог получают дополнительные вызовы статистики;

Зайдя в ~ / .config / angrysearch / angrysearch.conf вы можете управлять режимом, для которого angrysearch_lite возвращает значение true или false.

Режимы поиска:

В angrysearch есть 3 режима поиска, по умолчанию выбран «быстрый»

  • быстрый режим - включается, когда установлен флажок рядом с полем ввода. Очень быстрый, но без подстрок, то есть он не найдет «Пираты» или «Кнут», но найдет «Пираты» или «Пятый»;
  • медленный режим - включен, когда флажок снят, он немного медленнее, но может найти подстроки даже с нестандартными символами;
  • regex mode или режим регулярных выражений - активируется клавишей F8, обозначается оранжевым цветом фона, самый медленный поиск, подходит для очень точного поиска с использованием регулярных выражений, с учетом регистра или без него, в отличие от предыдущих режимов поиска, здесь ищется не весь путь, а только имена файлов или каталогов;

Пример поиска в режиме регулярных выражений:

То, что вы должны знать:

  • база данных находится в ~ / .cache / angrysearch / angry_database.db,
  • файл конфигурации находится в ~ / .config / angrysearch / angrysearch.conf;
  • Индексирование файлов может занять ~ 1  ~ 2 минуты, в зависимости от того, какой жесткий диск вы используете, hdd или ssd, а также файловой системы, ntfs в linux намного медленнее. База данных может весить ~ 200 МБ;
  • Не рекомендуется запускать с правами суперпользователя, во-первых, для этого нет никаких причин, во-вторых, с такими правами поиск может начать сканировать там, где не требуется, например у пользователей Btrfs часто сканируются снимки;
  • xdg-open используется для открытия файлов в зависимости от их mime-типа, приложения по умолчанию могут быть установлены в ~ / .local / share / Applications / mimeapps.list или ~ / .config / mimeapps.list;

Установка:

Ручная установка проста, так как нет компиляции с python, процесс состоит из наличия зависимостей, копирования файлов куда-то и разрешения на выполнение.

Зависимости: - python3-pyqt5, xdg-utils

Вам понадобится PyQt5 для python3, например дистрибутивы на основе Ubuntu:

sudo apt install python3-pyqt5

Не волнуйтесь, большинство дистрибутивов имеют xdg-utils из коробки.

Теперь, когда у вас есть зависимости, загрузите последний выпуск angrysearch и распакуйте его куда-нибудь. Вдобавок к остальным файлам есть файл с именем install.sh, он копирует файлы туда, где им стоит располагаться, и устанавливает правильные права доступа.

  • откройте терминал в каталоге с распакованными файлами.
  • установите install.sh в качестве исполняемого файла и запустите его:
chmod +x install.sh
sudo ./install.sh

Опциональные зависимости:

  • python3-gobject - десктопные уведомления для автоматического обновления, большинство сред рабочего стола и так это умеют;
  • xdotool - необходим при использовании Thunar или PCmanFM и использовании опции конфигурации fm_path_doubleclick_selects;

Автоматическое обновление в фоновом режиме.

Среди файлов вы найдете angrysearch_update_database.py

Этот файл запускает angrysearch без интерфейса и в фоновом режиме сканирует диски, а также обновляет базу данных.

Используя crontab, вы можете запускать этот файл через определенные промежутки времени, постоянно обновляя angrysearch в соответствии с изменениями в вашей системе.

  • crontab -l - список cronjobs
  • crontab -e - открыть текстовый редактор, чтобы вы могли ввести новый cronjob

этот cronjob будет выполнять обновление каждые 6 часов

0 */6 * * * /usr/share/angrysearch/angrysearch_update_database.py

crontab не будет пытаться выполнить задание, если компьютер выключен в запланированное время.

notifications включает и выключает уведомления на рабочем столе, информирующие о завершении автоматического обновления.

conditional_mounts_for_autoupdate может предотвратить запуск автообновления, если отсутствуют установленные точки монтирования.

Только имейте ввиду, что уведомления на рабочем столе от cronjob работают не во всех дистрибутивах, возможно, это именно ваш случай.

Как это работает и всякие дополнительные детали:

  • В базе данных есть столбец, содержащий полный путь к каждому найденному файлу и каталогу, другой столбец указывает, ведет этот путь к файлу или каталогу. В полной версии есть также столбцы для даты последнего изменения и для размера файлов в байтах;
  • При вводе в строку поиска в столбце пути выполняется поиск вхождений напечатанного текста и отображаются строки, содержащие их. В отличие от других поисков, которые обычно просматривают только имена файлов и каталогов, angrysearch проверяет полный путь. Это означает, что при поиске книг будут отображаться все элементы с термином «книги» в их пути, а не только в названии. При типичных медленных поисках это было бы слишком широким поиском со слишком большим количеством результатов, но мгновенная природа angrysearch позволяет продолжать печатать, пока поиск не станет достаточно узким;
  • База данных использует расширение FTS sqlite для индексации, чтобы значительно повысить скорость поиска и создать ощущение мгновенности получения результатов по мере ввода -- в fast mode. Недостатком fast mode является невозможность поиска по подстроке, но флажок в правом верхнем углу может изменить это. Если этот флажок снят, поиск не будет использовать таблицы FTS, а будет просто выполнять обычный более медленный поисковый запрос к базе данных -- в slow mode;
  • В режиме fast mode кавычки могут использоваться для точного поиска: запрос ‘торрент’ не будет включать «торренты» в результаты;
  • Для функциональности вам нужен только файл angrysearch.py, но не ждите специальных иконок или темной темы;
  • Наведите указатель мыши на кнопку обновления, чтобы увидеть, насколько стара база данных;
  • дважды щелкните по элементам в результатах поиска:
  • Name - первый столбец, открывает файл в приложении, связанном с его mime-типом, используя xdg-open;
  • Path - второй столбец, открывает расположение элемента в файловом менеджере;
  • Результаты можно отсортировать, нажав на заголовки столбцов, будут отсортированы только представленные результаты, то есть по умолчанию максимум 500 элементов. Чтобы вернуться к сортировке по умолчанию, сортируйте по столбцу пути;
  • Горячие клавиши:

¨       F6 ctrl+L alt+D – фокус на строке поиска.

¨       Enter – от строки поиска перейти к результатам.

¨       Enter – в результатах поиска открыть выбранный элемент в связанном приложении.

¨       shift+Enter – открыть локацию элемента.

¨   Tab – в цикле устанавливает фокус на элементы пользовательского интерфейса.

¨   shift-Tab – делает тоже что и кнопка табуляции, но в обратном порядке.

¨   arrow up, arrow down -   перемещаться по результатам поиска.

¨   Esc, ctrl+Q – выйти из приложения.

  • FTS5 — это новая версия индексационного расширения sqlite, у большинства дистрибутивов его пока нет, и они находятся на FTS4. Системы, которые имеют FTS5, получают два дополнительных преимущества в быстром режиме:

¨   возможность исключить из результатов поиска с помощью знака минус:  wav -home покажет все пути, содержащие слово wav, кроме тех, которые также содержат home;

¨   игнорирование диакритических знаков, поиск oko также будет показывать такие результаты как ôko ókö Okǒ;

Чтобы проверить, доступен ли FTS5 в вашей системе - в диалоговом окне обновления наведите указатель мыши на текст «создайте новую базу данных».

Конфигурация:

  • расположение файла конфигурации: ~ / .config / angrysearch / angrysearch.conf. Не переживайте, если вы случайно удалите файл конфигурации, при следующем запуске или закрытии программы, будет создан новый файл со значениями по умолчанию;
  • angrysearch_lite -   По умолчанию установлено значение true. В облегченном режиме поиск находит только имя файла и путь, без размера файла и без даты последнего изменения. Меньше информации – меньше время поиска;
  • close_on_execute -  По умолчанию установлено значение false. Закрывает angrysearch после открытия файла или пути в файловом менеджере;
  • conditional_mounts_for_autoupdate  -  По умолчанию пусто. Сюда можно добавить точки монтирования для обновления базы данных. Без них не будет происходить автоматическое обновление через crontab. Вместо обновления crontab запустит системное диалоговое окно с сообщением, что пути, заданные в этих настройках, не смонтированы. Это предотвратит перезапись базы данных, когда присутствуют не все диски. Для значений используйте точки монтирования системы, разделенные пробелами;
  • darktheme  -  По умолчанию установлено значение false. Это значение можно переопределить на true в qdarkstylesheet.qss, в resource_file.py есть значки для темной темы;
  • directories_excluded - По умолчанию пусто. Сюда можно записать какие каталоги следует игнорировать. Если написать просто имя каталога, поиск будет игнорировать каждый каталог с таким именем, если указать полный путь, например / var / cache / pacman / pkg /, проигнорированной будет именно эта конкретная папку, еще можно использовать связку родитель / цель для более простого нацеливания на конкретную папку, например pacman / pkg. Можно настроить через интерфейс программы, в окне обновления. Директория / proc жестко запрограммирована, чтобы ее игнорировать;
  • fast_search_but_no_substring  -  По умолчанию установлено значение true. Содержит последнее установленное значение флажка, влияющего на скорость поиска и подстроки, см. FTS4 в разделе выше;
  • file_manager - По умолчанию пусто. Независимо от того, какое приложение или сценарий записан туда, каждый раз, когда вы дважды щелкаете по столбцу пути, приложение получает путь. Если оставить это поле пустым, angrysearch попытается автоматически определить дефолтный файловый менеджер с помощью xdg-utils. Если один из следующих файловых менеджеров установлен и обнаружен: ['dolphin', 'nemo', 'nautilus', 'doublecmd'], поведение angrysearch немного изменится. Он пошлет этим файловым менеджерам полный путь к файлу, подсветив целевой файл в открытом окне файлового менеджера;
  • fm_path_doubleclick_selects  - По умолчанию установлено значение false. Требуется пакет xdotool, и желательно вручную установленный файловый менеджер в конфиге. Если установлено значение true, файловые менеджеры Thunar, PCmanFM и SpaceFM смогут открывать каталог, содержащий выбранный файл;
  • icon_theme -  По умолчанию установлено значение adwaita. Сменить тему значков можно из интерфейса программы в окне обновления. Существует 6 типов значков - папка, файл, аудио, изображение, видео, текст. Но я пока не выяснил, как получить тему дистрибутива и надежную иконку из mime-типа файла, так что устанавливать значков с помощью angrysearch – это решение;
  • notifications  -  По умолчанию установлено значение true. Автоматические периодические обновления, запускаемые в фоновом режиме с использованием crontab, будут использовать систему уведомлений на рабочем столе, чтобы сообщать, когда сканирование выполнено или если оно было прервано из-за отсутствия точек монтирования;
  • number_of_results  -  По умолчанию установлено значение 500. Ограничение установлено для поиска в базе данных. Меньшее число означает, что результаты поиска будут приходить быстрее;
  • regex_mode  -  По умолчанию установлено значение false. Включает режим поиска регулярных выражений. Переключить значение с false на true можно с помощью клавиши F8;
  • row_height  -  По умолчанию установлено 0, что означает системную высоту по умолчанию. Устанавливает высоту строк в пикселях;
  • typing_delay  -  По умолчанию установлено значение false. Если изменить значение на true, включится 0,2-секундная задержка между набором текста в строке поиска и обращением к базе данных. Это предотвратит ненужные запросы к базе данных, если пользователь печатает быстро, так как поисковик ожидает завершения ввода, чтобы начать поиск. Эта функция может улучшить производительность на медленных машинах, но на современных может негативно повлиять на ощущение мгновенного реагирования;
  • [Last_Run]  --  Свойства приложения на момент его закрытия - размер окна, положение, состояние  и т.п.

Послесловие.

Поскольку ANGRYsearch, по большому счету, является портом одного из моих любимых Windows приложений на Linux, я очень доволен им и планирую установить его на все мои системы в будущем.

Я помню, как в пух и прах разнес другие приложения Linux, за то, что они не были просты в установке, чего я не могу сказать про ANGRYsearch. Процесс установки настолько прост и ясен, что я определенно рекомендовал бы его любому линукс-нубу.

Вы когда-нибудь использовали ANGRYsearch? Если нет, какое ваше любимое поисковое приложение для Linux? Дайте нам знать в комментариях ниже.