Запуск приложений в зависимости от типа файлов в zsh


ramok аватар

ramok - Posted on 05 Март 2006

Когда то в http://linsovet.com/zsh-lazy-run-url я обещал рассказать о том как запускать программы lazy-style.. рассказываю Ж:-)

Есть в zsh особенность которая напоминает возможность в Windows запускать приложения "вызовом" файла которое это приложение обрабатывает.
В zsh для этого сущетвуют специальный тип алиасов. Например:

$ alias -s avi=mplayer
$ ezhik.v.tumane.avi

запустит команду mplayer ezhik.v.tumane.avi

примеры использования:

alias -s {avi,mpeg,mpg,mov,m2v}=mplayer
alias -s {odt,doc,sxw,rtf}=ooffice
alias -s {c,h}=vim
alias -s tgz="tar zxvf"

к сожалению alias -s tar.gz="tar zxvf" не работает.. никто не хочет патчик сделать? Ж:-D

но это еще не все Ж:-) как обычно когда в zsh есть какая то фича, то найдется кто то и доведет идею до маразм.. совершенства Ж:-) cуществует плагин в стандартной поставке zsh который обрабатывает базу данных mime и создает множество алиасов для всех типов файлов.

достаточно запустить
autoload -U zsh-mime-setup
zsh-mime-setup

после чего запустив
alias -s
можете посмотреть какие именно расширения файлов обрабатываются. все что не достает можно или добавить самостоятельно или подправить свой ~/.mailcap. если у вас его нет то пример можно подсмотреть в /etc/mailcap. ну и man mime Ж:-)

hint для Debian:
"запустите" какой нибуть .deb и приятно удивитесь Ж:-)

hint:
для тех у кого отличный от zsh шелл и линукс нужно посмотреть в сторону фичи ядра binfmt_misc. но это уже совсем другая история и другой типс.. Ж:-)

0
Ваша оценка: Ничего
..

Только вот, для всякого рода gqview и пр. (которые выводят на консоль много текста) придется написать в ~/.zshrc так:
alias -s jpg='gqview 2&>1 >/dev/null'

Ну, и имена файлов, без бита исполнения, zsh по Tab не дополняет. Может быть, это можно поправить?
Мои опции для загрузки модулей и автодополнения:

autoload -U compinit
compinit
autoload -U incremental-complete-word
zle -N incremental-complete-word
autoload -U insert-files
zle -N insert-files
autoload -U predict-on
zle -N predict-on

пофиксил уже? у меня все окейно..

--
Signature invent in progress 21% #.........