Получилось!
https://github.com/gokcehan/lf/wiki/Tutorial#worki...
Потомковый процесс не может изменить путь родительского, но он может записать путь в переменную среды. И можно забиндить на клавишу функцию, которая будет извлекать это значение.
Как вставить значение в редактируемую строку терминала — man bash описывает это в секции bind. Это переменные READLINE_LINE, READLINE_POINT, READLINE_MARK.
Итого:
# Подключаем вставку путей по хоткею Ctrl-o
PushToShell() {
# Делим строку на: до курсора и после и вставляем путь между ними.
befCurs="${READLINE_LINE:0:READLINE_POINT}"
aftCurs="${READLINE_LINE:READLINE_POINT}"
READLINE_LINE="$befCurs$1$aftCurs"
# Сдвигаем курсор на длину пути
READLINE_POINT=$(($READLINE_POINT+$(echo -n "$1" | wc -m)))
}
FM_PastePath() {
dir="$(mktemp -t "FM_Dir.XXXXXXXXXX")"
file="$(mktemp -t "FM_File.XXXXXXXXXX")"
ranger --choosedir="$dir" --choosefile="$file" "${@:-$PWD}" #тут можно подключить любой другой ФМ.
PushToShell "$([ -s "$file" ] && cat "$file" || cat "$dir")"
rm -f "$dir"
rm -f "$file"
}
bind -x '"\C-o":"FM_PastePath"'
Работает независимо от наличия Иксов. И вместо ФМ, можно подключить иную дополняшку для других задач.
Либо можно сразу работать в проге, которая позволит удобно работать с путями.
Всем спасибо!