LINUX.ORG.RU

Вывести результат fzf в bash prompt

 ,


0

1

По дефолту fzf печатает результат в stdout, т.е. он выводится в отдельной строке:

$ cat /mnt/e/Tmp/test/* | fzf
foo

Подскажите, как сделать так, чтобы результат выводился в prompt, т.е. как уже готовая ко вводу команда, также как это происходит при CTRL+R?

Цель: быстро выбрать в шпаргалке нужную команду и подставить ее в prompt.


$(fzf)

? Я им не пользовался, может есть и более стандартный способ, но должно работать.

xaizek ★★★★★
()
Ответ на: комментарий от emcode

Ой, туплю. Как-то так (не проверял):

function _fzfcmdline() {
    READLINE_LINE=$(echo "$READLINE_LINE" | fzf)
    READLINE_POINT=${#READLINE_LINE}
}
# bind to Ctrl-X+f combination
bind -x '"\C-Xf": _fzfcmdline'
xaizek ★★★★★
()
Последнее исправление: xaizek (всего исправлений: 1)
Ответ на: комментарий от xaizek

Не особо понятно как это должно работать, если функция не принимает ни одного аргумента? И, насколько я понял, ломать пальцы об биндинги это единственный способ заставить bash подставить что-то в командную строку…

emcode
() автор топика
Ответ на: комментарий от emcode

Дошло. Но это получается, что реально только через биндинг, никакой аргумент не засунешь.

function _fzfcmdline() {
    READLINE_LINE=$(cat /mnt/e/Tmp/test/* | fzf)
    READLINE_POINT=${#READLINE_LINE}
}
# bind to Ctrl-X+e combination
bind -x '"\C-Xe": fzfcmdline'
emcode
() автор топика
Последнее исправление: emcode (всего исправлений: 1)
Ответ на: комментарий от xaizek

Да, я покурил маны и разобрался. READLINE_LINE прибит гвоздями к bind, а другого способа эмулировать этот функционал в bash похоже нет. Спасибо за помощь.

emcode
() автор топика
Ответ на: комментарий от anonymous

Это лончер, а мне надо именно в bash.

emcode
() автор топика

Прочли README и ни фига не поняли: зачем вообще нужен этот FZF? Для интерактивной фильтрации переданного в stdin списка? А как это связано с задачей вывода одной (!) команды в промпт?

mertvoprog
()
Ответ на: комментарий от mertvoprog

fzf мне нужен затем, что он заменяет убогий history reverse search в баше. А еще, нечеткий поиск в интерактивной менюшке это очень удобно. Грепать осточертело.

emcode
() автор топика
Ответ на: комментарий от mertvoprog

Я просто никогда не интересовался как в баше сам терминал устроен (escape-последовательности и вот это все). Мне даже PS1 кастомизировать лень. Думал, что в prompt можно через какой-нибудь builtin любую строку нарисовать. Мне алиасы удобнее чем биндинги, легче запоминаются.

emcode
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.