#1 03.02.2015 12:20:36

1000Mhz
Administrator
Зарегистрирован: 17.08.2014
Сообщений: 816
IP-адрес

"fuzzy search" на bash

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

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

#2 03.02.2015 13:21:19

Vascom
Administrator
Зарегистрирован: 02.04.2010
Сообщений: 4 019
IP-адрес

"fuzzy search" на bash

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

#3 03.02.2015 13:42:31

1000Mhz
Administrator
Зарегистрирован: 17.08.2014
Сообщений: 816
IP-адрес

"fuzzy search" на bash

Quote by Vascom
Вместо ! -n лучше использовать -z.

Да я handbook куда-то пролюбил, лепил по памяти.
Quote by Vascom
Может добавишь комментариев?

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

#4 03.02.2015 13:59:47

drBatty
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 17 053
IP-адрес

"fuzzy search" на bash

Quote by 1000Mhz
Как в скрипте обрабатывать нажатие Backspace не знаю,

[console]$ echo -e "ABCDE\b\bXYZ"
ABCXYZ
[/console]
Quote by 1000Mhz
let n=${#P}-2 P=${P:0:$n}

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

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

#5 03.02.2015 14:07:27

1000Mhz
Administrator
Зарегистрирован: 17.08.2014
Сообщений: 816
IP-адрес

"fuzzy search" на bash

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

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

#6 03.02.2015 16:39:10

1000Mhz
Administrator
Зарегистрирован: 17.08.2014
Сообщений: 816
IP-адрес

"fuzzy search" на bash

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

#7 05.02.2015 07:14:47

drBatty
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 17 053
IP-адрес

"fuzzy search" на bash

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

#8 07.02.2015 10:27:07

1000Mhz
Administrator
Зарегистрирован: 17.08.2014
Сообщений: 816
IP-адрес

"fuzzy search" на bash

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

Board footer