Дисклеймер.
----------------------------
Код написан в соавторстве с GPT4
----------------------------
Причины
Желание реализовать быстрый поиск в mc , так-то встроеный тоже хороший, но поиск от peco меня очаровал.
---------------------------
добавил команду sleep 3 , в конце скрипта, чтоб дать интерпретатору командной строки для открытия файла, без этой команды скрипт иногда отрабатывал не стабильно
---------------------------
изменена инструкция
вместо .bashrc используется создание пункта меню, в user menu, mc, так удобнее
---------------------------
дополнил код на опрос после открытия файла с xdg-open
для продолжения поиска работы в peco
или прекращения работы
а также добавлена возможность помещения полного пути в буфер обмена
----------------------------
в шапке скрипт--3_Imp.Исправлен и улучшен. Следует брать этот скрипт.
----------------------------
скрипт--4_Dobrov. Добавлена возможность по нажатию клавиши 'C' помещения полного пути до файла в буфер обмена, то есть помещения полного пути по требованию. Можно брать, либо скрипт--3, либо скрипт--4.
---------------------------
Итак необходимо вот этот:
--------------------------
Скрипт--1
--------------------------
#!/bin/bash
while true; do
# Получаем текущую директорию из Midnight Commander
dir="$PWD"
# Используем ls для получения списка файлов в директории
files=$(ls -1 "$dir")
# Используем peco для выбора файла
selected=$(echo "$files" | peco --prompt 'Выберите файл > ')
# Если пользователь нажал Ctrl-C, выход из peco , далее запрос на продолжение
if [[ $? -ne 0 ]]; then
exit
fi
# Получаем полный путь к выбранному файлу
path=$(readlink -f "$dir/$selected")
# Открываем файл
xdg-open "$path"
sleep 3
# Запрашиваем продолжение работы программы
echo "Хотите продолжить? (y/n)"
read answer
if [ "$answer" != "${answer#[Yy]}" ]; then
# Пользователь хочет продолжить работу, продолжаем цикл
continue
else
# Пользователь хочет завершить работу, выходим из цикла
break
fi
done
-----------------
Скрипт--3 от Imp , улучшенный и исправленый. Следует брать этот скрипт.
#!/bin/bash
while [ 1 ]
do
selected=$(ls -1 $(pwd) | peco --prompt 'Выберите файл > ')
[[ $selected = '' ]] && exit
echo "$(pwd)/$selected" | xsel -ib
echo "Полный путь до файла скопирован в буфер обмена"
echo "Выполнить файл? (Enter/ESC)"
read -n 1 answer
[[ $answer = '' ]] && xdg-open "$(pwd)/$selected"
echo "Хотите продолжить? (Enter/ESC)"
read -s -n1 answer
[[ $answer == $'\x1b' ]] && break
done
----------------
скрипт-4_Dobrov Можете выбрать этот скрипт если желаете получить полный путь по нажатию клавиши 'C'
----------------
#!/bin/bash
while sel=$(ls -1 | peco --prompt 'Esc: выход, Фильтр имени >') && [[ -n $sel ]]; do
echo -e "\e[45mEsc выход, Enter запуск файла, «C» путь в буфер\e[0m"
read -t9 -sn1 key && p="$(pwd)/$sel" || break
case ${key,} in
$'\x1b') break;;
c) xsel -ib<<<"$p"
echo -e "Полный путь файла в буфере обмена: \n$p"
sleep 1;;
'') xdg-open "$p";;
esac
done
сохранить его в скрипт с именем mcps.sh имя не важно, для удобства я выбрал наиболее короткое чтоб запомнилось. Сохраняем его в ~/.local/bin , присваиваем ему права на исполнение, потом
открываем терминал и в нём открываем командой
sudo nano /etc/mc/mc.menu
конфигурационный файл формирующий user menu mc
далее идем в конец этого файла и в секции
+ x /usr/bin/open | x /usr/local/bin/open & x /bin/sh
после строки
добавляем строки
s Search with Peco
/bin/bash /home/<user>/.local/bin/mcps.sh
не забываем вместо <user> вписать имя вашего пользователя
перед s ,не должно быть пробелов
сохраняем файл , закрываем текущую сесию mc в терминале если она открыта,
запускаем заново mc , и теперь навигацией по mc выбираем каталог, заходим в него жмем F2 потом жмем s
и получаем вход в Peco, способ добавления пользовательского скрипта с Peco,
может быть полезен и для запуска других скриптов в любой директории mc.
каталог будет открыт в peco , и задав в строку в 'Выберите файл > ' набрав нужные вам критерии для поиска, то что ищите вы получите строки вхождения этого поиска. После этого из полученых строк, можете курсором клавиш выбрать ту строку что вы искали либо в 'Выберите файл > ' уточнить что ищите, дальше, после выбора строки нажимаем ввод. файл откроется с помощью xdg-open.