@glaucidium

Линукс. Есть ли способ заполнять пути в консоли из файлового менеджера?

Доброго дня.

Есть ли способ заполнять пути в консоли из файлового менеджера?
Проблема — когда пишешь путь вручную, то не хочется вспоминать все названия папок. Tab и ls — покажут, но загромоздят экран списком файлов.
А вот бы сделать, чтобы для вставки пути, жмёшь хоткей, открывается ФМ. Выбираешь в нём путь, и этот путь остаётся в команде.
64198fec00a7f720043645.png
  • Вопрос задан
  • 447 просмотров
Решения вопроса 1
@glaucidium Автор вопроса
Получилось!

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"'

Работает независимо от наличия Иксов. И вместо ФМ, можно подключить иную дополняшку для других задач.
Либо можно сразу работать в проге, которая позволит удобно работать с путями.

Всем спасибо!
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
3vi1_0n3
@3vi1_0n3
Если я правильно понимаю задачу, может быть можно обойтись без файлового менеджера?
Вот так, например:
alias get='dialog --erase-on-exit --fselect $PWD 30 100 --stdout'
cp $(get) $(get)

Тут для каждого вызова $(get) будет отдельный выбор файла в текстовом, гуй с иксами не нужен. По пробелу выбор директории из списка, при наборе символов установка курсора на директорию, которая подпадает под введенный текст.
Но есть нюансы.
1. Интерфейс слегка своеобразный, надо попривыкнуть.
2. Очистка экрана, если --erase-on-exit есть, и остатки текстовых окон на экране, если --erase-on-exit нет.
3. Сразу вставит в команду, без помещения в командную строку значения
Ответ написан
Комментировать
SerGeniyRus
@SerGeniyRus
Одно изучаю, другое преподаю
Так настрой файловый менеджер на отображения полного пути и копируй от туда
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Стоит ознакомиться с документацией, в которой вам нужна комбинация Ctrl+x,p. Правда работает, когда команда пишется в командной строке самого MC. Но можно мышкой скопировать текст, если терминальная программа позволяет.
Ответ написан
leahch
@leahch Куратор тега Linux
3D специалист. Dолго, Dорого, Dерьмово.
Рекомендую попробовать fish в качестве шелла. Решает вашу проблему на раз https://fishshell.com/
Сижу на нем уже года три, сплошной восторг.
Ответ написан
@falconandy
far2l
txrju1xw1ooen65immx9y1oud5w.png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы