LINUX.ORG.RU
ФорумTalks

оцените скрипт.


0

1
#!/bin/bash

D_CONF="-fn "-xos4-terminus-medium-r-normal--12-120-72-72-c-60-*-*"  -nb "#cccccc" -nf "#111111" -sb "#111111" -sf "#cccccc""
DMENU="dmenu ${D_CONF}"
H_FILE="$HOME/.config/dfm.last"

function is_type {    
    if file --mime "$1" | grep "$2" &> /dev/null
    then
	return 0
    fi
    return 1
}

function cd_dir {
    cd "$1"
    echo "`pwd`" > "$H_FILE"
}

function open_file {
    eval "${1} \"${2}\" &> /dev/null"
}

if [ -e "$H_FILE" ]; then
    y_n=`echo -e "Yes\nNo" | $DMENU -p "Open last dir?"`
    if [ "$y_n" = "Yes" ]; then
	cd_dir "`cat "$H_FILE"`"
	var=`ls`
    else
	var=`ls`
    fi
else
    var=`ls`
fi

while [ true ]; do
    if [ "$var" ]; then
	var=`echo -e "../\n$var" | $DMENU -p "dfm"`
    else
	var=`echo "../" | $DMENU -p "dfm"`
    fi

    if [ -d "$var" ]; then
	cd_dir "$var"
    elif is_type "$var" "image/*"
    then
	open_file "feh" "$var"
    elif is_type "$var" "video/*"
    then
	open_file "mplayer" "$var"
    elif is_type "$var" "text/*"
    then
	open_file "urxvt -e emacs -nw" "$var"
    else
	exit 0
    fi

    var=`ls`
done

Ответ на: комментарий от tn1

>ля хождения по ФС из dmenu.

а, это не для меня, не оценю.

dib2 ★★★★★
()

>file

text/*

Предупреждаю: оно сломается на UTF-8. Потому, что девелоперы file/libmagic — мудаки и пытаются:
— Матчить бинарные типы перед текстом
— Матчить DOS'овые COM-файлы (!!!) Среди тестов есть и однобайтные. Да, их несколько, чтобы было больше шансов сработать и на UTF-8. Убивать.

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

Как быть?(хотелось бы стандартного)

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

Изврат, конечно. Чем тебя не устраивают остальные файловые менеджеры? Но в целом скрипт как скрипт. С окошками.

Нет опции для хождения по скрытым каталогам.

> D_CONF="-fn "-xos4-terminus-medium-r-normal--12-120-72-72-c-60-*-*" -nb «#cccccc» -nf «#111111» -sb «#111111» -sf «#cccccc»"

каждая чётная кавычка закрывает каждую нечётную

echo «`pwd`» > «$H_FILE»

просто pwd > «$H_FILE»

   if [ "$y_n" = "Yes" ]; then
   cd_dir "`cat "$H_FILE"`"
   var=`ls`
    else
   var=`ls`
    fi
else
    var=`ls`
fi

var=`ls` в каждой ветке есть. Можно вынести из условия.

else
   exit 0

Ну это жесть, конечно. Неужели удобно?

Ещё замечание:
var=`echo "../" | $DMENU -p «dfm»`
var=`ls`

Для разных вещей надо использовать разные переменные. Ты что, имя для переменной пожадничал, что ли?

Кстати, сколько раз ты вызовешь file для текстового файла? А когда у тебя появится поддержка действий для 100500 типов файлов?

y_n=`echo -e «Yes\nNo» | $DMENU -p «Open last dir?»`

на мой взгляд, это лишнее. Если скрипту передали в параметре имя каталога — открываемся в нём, если нет — открываемся в последнем открытом. Я видел много отзывов о том, что подобные запросы бывают часто неуместны и раздражают, особенно, когда торопишься.

Вот это так, на первый взгляд. Я ещё насчёт eval сомневаюсь.

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

> Матчить DOS'овые COM-файлы (!!!)

Совсем головушкой тронулись. :(

geekless ★★
()

Говно. //скрипт не смотрел

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

>Ммм... я боюсь уточнять, но всё-таки... как они вообще это делают?
http://paste.pocoo.org/show/447300/ ← как-то так. byte означает именно то, о чём можно подумать.
Да, легко обходится выпиливанием этого из libmagic. Либо юзом 9base/p9port'ового file.

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

> Предупреждаю: оно сломается на UTF-8

я что-то не понял, как оно сломается. Приведи мне пример, как сделать, чтобы оно сломалось.

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

Примерно такие же тёплые чувства к file испытывают разработчики termkit'а. Поэтому там велосипед, в первую очередь заточенный на текстовые типы.

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

> >file .lyrics/*|grep DOS\ executable\ \(COM\)|wc -l 61

Плохой пример:

$ ls ~/.lyrics/*
ls: невозможно получить доступ к /home/name_no/.lyrics/*: Нет такого файла или каталога
name_no ★★
()
Ответ на: комментарий от Quasar

> Если надумал инсталлятор дистрибутива писать - нормально.
*вспоминая инстоляторы debian, opensuse, debian etc* Это оскорбление?

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

Фуфло

Скрипт и тред не читал.

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

> Чем тебя не устраивают остальные файловые менеджеры?
ХЗ, их у меня нет.Все действия в файловой системы выполняются из urxvtc(bash), этот скрипт просто смотрелка видео, фоточек, текста.

Нет опции для хождения по скрытым каталогам.

это мне не нужно.

каждая чётная кавычка закрывает каждую нечётную

Я знаю, зато работает. +Сейчас оставил только крайние кавычки.

Для разных вещей надо использовать разные переменные. Ты что, имя для переменной пожадничал, что ли?

Ну ... информация в переменной одна и таже, а плодить сущности без необходимости, imho ССЗБ,

Если скрипту передали в параметре имя каталога — открываемся в нём, если нет — открываемся в последнем открытом.

Не вызываю его из эмулятора терминала, только кейбинды.(Alt-m)

Я ещё насчёт eval сомневаюсь.

Во время отладки сценария ввёл эту(open_file) функцию для посылки сообщений вызываемых программ в /dev/null, сейчас уже не нужна, а удалять лень.

Сейчас так: http://tn1-lin.blogspot.com/2011/07/bash-awk-dmenu-filemanager.html

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

скажем так, ash выполнится в любом шеле... баш - в баше только )

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