LinuxForum.Fans
Тема

"fuzzy search" на bash

Автор: 1000Mhz 8 сообщений 2528 просмотров
03.02.2015 15:20 #412852

Поиск по файлопомойке :)
Как в скрипте обрабатывать нажатие Backspace не знаю, поэтому за нее "-" (минус, дефис).

text
P=""
if [ ! -n "$1" ]
then dr=~
else dr="$1"
fi
while read -n 1 -p "$P" -e IN
do
    P=$P$IN
    if [ "$IN" = '-' ]
    then 
        let n=${#P}-2
        P=${P:0:$n}
    fi
    clear
    ls  "$dr" | grep -i --color $P 2>/dev/null || ( ls  "$dr"
    echo --- 0 Matches -----------------------------------)
done
03.02.2015 16:21 · отредактировано #412881

Может добавишь комментариев?
Вместо ! -n лучше использовать -z.

03.02.2015 16:42 · отредактировано #412888
"Vascom" написал:
Вместо ! -n лучше использовать -z.

Да я handbook куда-то пролюбил, лепил по памяти.

"Vascom" написал:
Может добавишь комментариев?

*занудным голосом* читаем символ со stdin, добавляем в переменную P, фильтруем вывод ls по переменной P, идем читать следующий, если "-" то удаляем последний символ. Т. е. классический поиск по мере набора. На Гитхабе такое есть (на python аж несколько проектов), но меня не устроило т. к. на python то кириллицу не отображает, то еще что-то через жо.

03.02.2015 16:59 #412889
"1000Mhz" написал:
Как в скрипте обрабатывать нажатие Backspace не знаю,

[console]$ echo -e "ABCDE\b\bXYZ"
ABCXYZ
[/console]

"1000Mhz" написал:
let n=${#P}-2 P=${P:0:$n}

[console]$ S="ABCDEF"; echo "${S::-2}"
ABCD
[/console]

PS: годно, но к fuzzy отношения не имеет.

03.02.2015 17:07 #412891

Косячок нашел:
read -n 1 -p "$P" -e IN
с опцией "-е" русский ввод игнорируется. Осталось вспомнить, на кой я ее туда зафигачил :D

drBatty, благодарю, на досуге подправлю. А fuzzy это не я, это гитхабовские умельцы так назвали))

03.02.2015 19:39 #412915

Короче, рано наводить красоту. Чтобы это стало юзабельным, нужно:
1. когда число вариантов сократится до разумного минимума добавить нумерацию результатов (это легко)
2. заставить скрипт обрабатывать комбинацию клавиш Alt+цифра для быстрого открытия файла по номеру.
А вот чтобы реализовать п. 2 нужно как-то записать в переменную нажатие Alt+цифра, чтобы его можно было отловить далее. Тут я ффтупике.. впрочем, для "порыться побыстрому" в файлопомойке меня и так устраивает :)

05.02.2015 10:14 #413140

"1000Mhz" написал:
А вот чтобы реализовать п. 2 нужно как-то записать в переменную нажатие Alt+цифра, чтобы его можно было отловить далее. Тут я ффтупике.. впрочем, для "порыться побыстрому" в файлопомойке меня и так устраивает
я думаю, возможностей read(1) вам не хватит.
07.02.2015 13:27 #413481

Добавлю еще вариант:
[console]xdg-open "$(ls ~/files/ | rofi -dmenu)"[/console]
ну или само dmenu, но оно мне не очень нравится.
https://davedavenport.github.io/rofi/

Войдите или зарегистрируйтесь, чтобы ответить.