shell_patterns=0 # This is necessary to overcome a bug in mc - without this # mc makes default wrong item : NOOP : @ Do something on all of the file(s) at once CMD=%{Enter command} exec $CMD %s + t t @ Do something on the selected files one by one CMD=%{Enter command} for f in %s; do $CMD "$f" done + t lr p View the file in a pager exec ${PAGER:-more} %f + t lr g Edit the file in gvim gvim %f & + t lr b View the file in a browser exec webbrowser-encode-url -e utf-8 file://%d/%f + t lr = f \.(htm(l?)|txt)$ w View the file in a new browser window exec webbrowser-encode-url -e utf-8 -n file://%d/%f + t lr t View the file in a new browser tab exec webbrowser-encode-url -e utf-8 -t file://%d/%f + t lr p View the file in a new private browser tab exec webbrowser -p file://%d/%f += f \.fb2(\.bz2|\.gz|\.zip)?$ | f \.(chm|epub|htm(l?)|txt|rtf)$ & t lr f View fb2/chm/epub with fbreader fbreader %f & + t lr & f \.fb2(\.bz2|\.gz|\.zip)$ H fb2html case %f in *.fb2.bz2) A="bunzip2 -c" ;; *.fb2.gz) A="gunzip -c" ;; *.fb2.zip) A="unzip -p" ;; *.fb2) A="cat" ;; esac $A %f | xsltproc /usr/local/src/FictionBook/FB2_2_html_ru.xsl - | webstdin -t + t lr & f \.fb2(\.bz2|\.gz|\.zip)$ T fb2txt case %f in *.fb2.bz2) A="bunzip2 -c" ;; *.fb2.gz) A="gunzip -c" ;; *.fb2.zip) A="unzip -p" ;; *.fb2) A="cat" ;; esac $A %f | xsltproc /usr/local/src/FictionBook/FB2_2_txt_ru.xsl - | webstdin -e txt -t + t lr & f \.(pdf|PDF)$ v View pdf pdftotext -layout -q %f - | iconv.py -f utf-8 | ${PAGER:-more} + t lr & f \.(pdf|PDF)$ e View pdf with evince evince %f & += t lr & f \.(pdf|PDF)$ e View pdf with qpdfview if [ %d/%f = "`echo %d/%f | iconv -t utf-8`" ]; then qpdfview %f & else src=%d/%f; dest="$HOME/tmp/`echo $src | iconv -t koi8-r | koi2lat | sed 's!/!%!g'`"; ln -s "$src" "$dest" && qpdfview "$dest" & (sleep 3; exec rm -f "$dest") & fi += t lr & f \.djvu(\.bz2|\.gz)?$ e View djvu djview %f & + t lr & f \.((pdf|PDF|ps|PS)(\.bz2|\.gz)?|odt|ott|sxw|stw|ods|ots|sxc|stc|odp|otp|sxi|sti|odg|otg|sxd|std|odb|odf|sxm|odm|sxg|doc|DOC|rtf|docx|DOCX|xls|XLS|xlsx|XLSX)$ e Edit (Open)Docs with libreoffice libreoffice %f & + t lr & f \.(odt|ott|sxw|stw|ods|ots|sxc|stc|odp|otp|sxi|sti|odg|otg|sxd|std|odb|odf|sxm|odm|sxg|doc|DOC|rtf|docx|DOCX|xls|XLS|xlsx|XLSX)$ v View (Open)Docs with libreoffice #libreoffice --headless --convert-to "txt:Text (encoded):UTF8" %f libreoffice --cat %f | ${PAGER:-more} += t lr & f \.(doc|DOC|rtf)$ d View doc with catdoc catdoc %f | ${PAGER:-more} += t lr & f \.(odt|ott|sxw|stw|ods|ots|sxc|stc|odp|otp|sxi|sti|odg|otg|sxd|std|odb|odf|sxm|odm|sxg)$ o View OpenDoc with odt2txt odt2txt %f | ${PAGER:-more} += t lr & f \.(docx|DOCX)$ d View docx with docx2txt docx2txt %f - | iconv.py -f utf-8 | ${PAGER:-more} += t lr & f \.(xls|XLS|xlsx|XLSX)$ o View OpenXlsx with xlsx2csv xlsx2csv %f | iconv.py -f utf-8 | ${PAGER:-more} += t lr & f \.(xls|XLS)$ x View xls with xls2csv xls2csv %f | ${PAGER:-more} + t lr & f \.(bmp|BMP|gif|GIF|jpg|JPG|jpeg|JPEG|pbm|PBM|ppm|PPM|png|PNG|xbm|xpm|ico|jp2|tif|TIF|tiff|TIFF|webp)$ | t t e Edit image(s) gimp %s & + t lr & f \.(bmp|BMP|gif|GIF|jpg|JPG|jpeg|JPEG|pbm|PBM|ppm|PPM|png|PNG|xbm|xpm)$ | t t = t lr & f \.(bmp|BMP|gif|GIF|jpg|JPG|jpeg|JPEG|pbm|PBM|ppm|PPM|png|PNG|xbm|xpm)$ i View image(s) scaled xli -title "`echo %s | sed 's/[ .]/_/g'`" -zoom auto %s & + t lr & f \.(bmp|BMP|gif|GIF|jpg|JPG|jpeg|JPEG|pbm|PBM|ppm|PPM|png|PNG|xbm|xpm)$ | t t I View image(s) full size xli -title "`echo %s | sed 's/[ .]/_/g'`" %s & + t lr & f \.(bmp|BMP|gif|GIF|jpg|JPG|jpeg|JPEG|pbm|PBM|ppm|PPM|png|PNG|xbm|xpm)$ I Identify image xli -identify %f + t lr & f \.(ico|jp2|tif|TIF|tiff|TIFF|webp)$ | t t = t lr & f \.(ico|jp2|tif|TIF|tiff|TIFF|webp)$ I View icon, JPEG-2000, TIFF, WebP image display %s & + t lr & f \.(ico|jp2|tif|TIF|tiff|TIFF|webp)$ I Identify image identify %f + t lr & f \.(aac|ac3|ape|cue|dts|flac|m3u8?|mka|mp3|MP3|ogg|OGG|pls|WAV|wav|wv)$ | t t a Add the audiofile(s) or playlist(s) #if [ "`audtool --get-volume`" -eq 0 ]; then audacious & sleep 3; fi #for f in %s; do # case "$f" in # *.m3u8?) while read song; do # audtool --playlist-addurl "$song" # done < "$f" ;; # *) audtool --playlist-addurl "$f" ;; # esac #done deadbeef --queue %s & + t lr & f \.(aac|ac3|ape|cue|dts|flac|m3u8?|mka|mp3|MP3|ogg|OGG|pls|WAV|wav|wv)$ | t t = t lr & f \.(aac|ac3|ape|cue|dts|flac|m3u8?|mka|mp3|MP3|ogg|OGG|pls|WAV|wav|wv)$ p Load the audiofile(s) or playlist(s) #if [ "`audtool --get-volume`" -eq 0 ]; then audacious & sleep 3; fi #audtool --playlist-clear #for f in %s; do # case "$f" in # *.m3u8?) while read song; do # audtool --playlist-addurl "$song" # done < "$f" ;; # *) audtool --playlist-addurl "$f" ;; # esac #done deadbeef %s & (sleep 1; exec deadbeef --stop) + t lr & f \.(aac|ac3|ape|cue|dts|flac|m3u8?|mka|mp3|MP3|ogg|OGG|pls|WAV|wav|wv)$ | t t P Play the audiofile(s) or playlist(s) #if [ "`audtool --get-volume`" -eq 0 ]; then audacious & sleep 3; fi #audtool --playlist-clear #for f in %s; do # case "$f" in # *.m3u8?) while read song; do # audtool --playlist-addurl "$song" # done < "$f" ;; # *) audtool --playlist-addurl "$f" ;; # esac #done #exec audtool --playback-play deadbeef %s & #mplayer -playlist %f & + t lr & f \.m3u8? R Play the playlist in random order "$HOME"/prog/audio-cdr-video/audio/shuffle-playlist.py %f /tmp/random-playlist-tmp.m3u #if [ "`audtool --get-volume`" -eq 0 ]; then audacious & sleep 3; fi #audtool --playlist-clear #while read song; do # audtool --playlist-addurl "$song" #done < /tmp/random-playlist-tmp.m3u #audtool --playback-play deadbeef /tmp/random-playlist-tmp.m3u & #mplayer -playlist /tmp/random-playlist-tmp.m3u & (sleep 5; exec rm /tmp/random-playlist-tmp.m3u) & + t lr & f \.(m3u8?|mp3|MP3|cue|aac|ac3|ape|dts|flac|ogg|OGG|pls|WAV|wav|wv|avi|AVI|flv|m2ts|m4v|mka|mkv|MKV|mov|MOV|mp4|MP4|mpg|MPG|vob|VOB|wma|wmv)$ i Audio/video info exec "$HOME"/.config/mpv/mpv_identify.sh %f + t d & f (video_ts|VIDEO_TS)$ i DVD info exec "$HOME"/.config/mpv/mpv_identify.sh . + f \.(aac|ac3|ape|cue|dts|flac|m3u8?|mp3|MP3|ogg|OGG|pls|WAV|wav|wv|avi|AVI|flv|iso|m2ts|m4v|mka|mkv|MKV|mov|MOV|mp4|MP4|mpg|MPG|vob|VOB|wma|wmv)$ | t d | t t m Play video file(s) with mpv (quiet) AUDIO_VOLUME=80 export AUDIO_VOLUME mplayer %s & + f \.(aac|ac3|ape|cue|dts|flac|m3u8?|mp3|MP3|ogg|OGG|pls|WAV|wav|wv|avi|AVI|flv|iso|m2ts|m4v|mka|mkv|MKV|mov|MOV|mp4|MP4|mpg|MPG|vob|VOB|wma|wmv)$ | t d | t t m Play video file(s) with mpv (normal) mplayer %s & + f \.(aac|ac3|ape|cue|dts|flac|m3u8?|mp3|MP3|ogg|OGG|pls|WAV|wav|wv|avi|AVI|flv|iso|m2ts|m4v|mka|mkv|MKV|mov|MOV|mp4|MP4|mpg|MPG|vob|VOB|wma|wmv)$ | t d | t t = f \.(aac|ac3|ape|cue|dts|flac|m3u8?|mp3|MP3|ogg|OGG|pls|WAV|wav|wv|avi|AVI|flv|iso|m2ts|m4v|mka|mkv|MKV|mov|MOV|mp4|MP4|mpg|MPG|vob|VOB|wma|wmv)$ m Play video file(s) with mpv (loud) AUDIO_VOLUME=120 export AUDIO_VOLUME mplayer %s & + f \.(aac|ac3|ape|cue|dts|flac|m3u8?|mp3|MP3|ogg|OGG|pls|WAV|wav|wv|avi|AVI|flv|iso|m2ts|m4v|mka|mkv|MKV|mov|MOV|mp4|MP4|mpg|MPG|vob|VOB|wma|wmv)$ | t d | t t m Play video file(s) with mpv (louder) AUDIO_VOLUME=150 export AUDIO_VOLUME mplayer %s & + f \.(aac|ac3|ape|cue|dts|flac|m3u8?|mp3|MP3|ogg|OGG|pls|WAV|wav|wv|avi|AVI|flv|iso|m2ts|m4v|mka|mkv|MKV|mov|MOV|mp4|MP4|mpg|MPG|vob|VOB|wma|wmv)$ | t d | t t m Play video file(s) with mpv (ask for volume) AUDIO_VOLUME=%{Enter volume} export AUDIO_VOLUME mplayer %s & + f \.(m3u8?|mp3|MP3|cue|aac|ac3|ape|dts|flac|ogg|OGG|pls|WAV|wav|wv|avi|AVI|flv|m2ts|m4v|mka|mkv|MKV|mov|MOV|mp4|MP4|mpg|MPG|vob|VOB|wma|wmv)$ | t t M Play audio/video with mpv GUI gmplayer %s & += t d & f (video_ts|VIDEO_TS)$ d Play DVD directory with mpv mplayer -dvd-device . dvd:// & + t d & f (video_ts|VIDEO_TS)$ D Play DVD directory with mpv GUI gmplayer -dvd-device . dvd:// & + t d & f (video_ts|VIDEO_TS)$ t Play DVD title with mpv title=%{Enter title} mplayer -dvd-device . dvd://"$title" & + t d & f (video_ts|VIDEO_TS)$ T Play DVD title with mpv GUI title=%{Enter title} gmplayer -dvd-device . dvd://"$title" & + t d p Play directory with mpv mplayer %f/* & + t d P Play directory with mpv GUI gmplayer %f/* & + t d & f ^\.\.$ b Compress the current subdirectory to tar.bz2 Pwd="`basename %d /`" echo -n "Name of the distribution file (without extension) [$Pwd]: " read tar if [ "$tar"x = x ]; then tar="$Pwd"; fi cd .. && tar cvf - "$Pwd" | bzip2 -f9 > "$tar".tar.bz2 && echo ../"$tar".tar.bz2 created. + t d & f ^\.\.$ g Compress the current subdirectory to tar.gz Pwd="`basename %d /`" echo -n "Name of the distribution file (without extension) [$Pwd]: " read tar if [ "$tar"x = x ]; then tar="$Pwd"; fi cd .. && tar cvf - "$Pwd" | gzip -f9 > "$tar".tar.gz && echo ../"$tar".tar.gz created. + t d & f ^\.\.$ l Compress the current subdirectory to tar.lzma Pwd="`basename %d /`" echo -n "Name of the distribution file (without extension) [$Pwd]: " read tar if [ "$tar"x = x ]; then tar="$Pwd"; fi cd .. && tar cvf - "$Pwd" | lzma -f9 > "$tar".tar.lzma && echo ../"$tar".tar.lzma created. + t d & f ^\.\.$ x Compress the current subdirectory to tar.xz Pwd="`basename %d /`" echo -n "Name of the distribution file (without extension) [$Pwd]: " read tar if [ "$tar"x = x ]; then tar="$Pwd"; fi cd .. && tar cvf - "$Pwd" | xz -f9 > "$tar".tar.xz && echo ../"$tar".tar.xz created. + t d & f ^\.\.$ t Compress the current subdirectory to tar Pwd="`basename %d /`" echo -n "Name of the distribution file (without extension) [$Pwd]: " read tar if [ "$tar"x = x ]; then tar="$Pwd"; fi cd .. && tar cvf - "$Pwd" > "$tar".tar && echo ../"$tar".tar created. + t d & f ^\.\.$ z Compress the current subdirectory to zip Pwd="`basename %d /`" echo -n "Name of the distribution file (without extension) [$Pwd]: " read zip if [ "$zip"x = x ]; then zip="$Pwd"; fi cd .. && zip -r9 "$zip".zip "$Pwd" && echo ../"$zip".zip created. + t d & f ^\.\.$ y Compress the current subdirectory to zip recoding filenames Pwd="`basename %d /`" echo -n "Name of the distribution file (without extension) [$Pwd]: " read zip if [ "$zip"x = x ]; then zip="$Pwd"; fi cd .. && zip.py "$zip".zip "$Pwd" && echo ../"$zip".zip created. + t d & f ^\.\.$ 7 Compress the current subdirectory to 7z Pwd="`basename %d /`" echo -n "Name of the distribution file (without extension) [$Pwd]: " read ar if [ "$ar"x = x ]; then ar="$Pwd"; fi cd .. && 7zr a "$ar".7z "$Pwd" && echo ../"$ar".7z created. + ! f \.(bz2|gz|lz|lzma|7z|xz|zip|ZIP)$ & t lr z bzip2 the file exec bzip2 -9 %f + ! f \.(z|Z|bz2|gz|lz|lzma)|(tbz2|tgz|tz|zip|ZIP|rar|RAR|xz|7z)$ & t lr z gzip the file exec gzip -9 %f + ! f \.(z|Z|bz2|gz|lz|lzma)|(tbz2|tgz|tz|zip|ZIP|rar|RAR|xz|7z)$ & t lr z lzip the file exec lzip -9 %f + ! f \.(z|Z|bz2|gz|lz|lzma)|(tbz2|tgz|tz|zip|ZIP|rar|RAR|xz|7z)$ & t lr z lzma the file exec lzma -9 %f + ! f \.(z|Z|bz2|gz|lz|lzma)|(tbz2|tgz|tz|zip|ZIP|rar|RAR|xz|7z)$ & t lr z 7z the file/directory exec 7zr a %f.7z %f + ! f \.(z|Z|bz2|gz|lz|lzma)|(tbz2|tgz|tz|zip|ZIP|rar|RAR|xz|7z)$ & t lr z xz the file exec xz -9 %f + ! f \.(z|Z|bz2|gz|lz|lzma)|(tbz2|tgz|tz|zip|ZIP|rar|RAR|xz|7z)$ & t lr z zip the file/directory exec zip -r9 %f.zip %f + ! f \.(z|Z|bz2|gz|lz|lzma)|(tbz2|tgz|tz|zip|ZIP|rar|RAR|xz|7z)$ & t lr y zip the file/directory recoding filename(s) exec zip.py %f.zip %f + t t Z zip selected files/directories ZIP=%{Enter zip name} exec zip -r9 "$ZIP" %s + t t Y zip selected files/directories recoding filenames ZIP=%{Enter zip name} exec zip.py "$ZIP" %s + f \.(tar\.(z|Z|bz2|gz|lz|lzma))|(tbz2|tgz|tz|zip|ZIP|rar|RAR|xz|7z)$ & t lr n Create a directory for this archive case %f in *.tar.Z) D="`basename %f .tar.Z`";; *.tar.bz2) D="`basename %f .tar.bz2`";; *.tar.gz) D="`basename %f .tar.gz`";; *.tbz2) D="`basename %f .tbz2`";; *.tgz) D="`basename %f .tgz`";; *.tz) D="`basename %f .tz`";; *.tar.lz) D="`basename %f .tar.lz`";; *.tar.lzma) D="`basename %f .tar.lzma`";; *.tar.7z) D="`basename %f .tar.7z`";; *.zip) D="`basename %f .zip`";; *.ZIP) D="`basename %f .ZIP`";; *.rar) D="`basename %f .rar`";; *.RAR) D="`basename %f .RAR`";; *.xz) D="`basename %f .xz`";; *.7z) D="`basename %f .7z`";; esac exec mkdir "$D" + F \.(tar\.(z|Z|bz2|gz|lz|lzma))|(tbz2|tgz|tz|zip|ZIP|rar|RAR|xz|7z)$ & T r N Create a directory for the other archive case %D/%F in *.tar.Z) D="`basename %F .tar.Z`";; *.tar.bz2) D="`basename %F .tar.bz2`";; *.tar.gz) D="`basename %F .tar.gz`";; *.tbz2) D="`basename %F .tbz2`";; *.tgz) D="`basename %F .tgz`";; *.tz) D="`basename %F .tz`";; *.tar.lz) D="`basename %F .tar.lz`";; *.tar.lzma) D="`basename %F .tar.lzma`";; *.tar.7z) D="`basename %F .tar.7z`";; *.zip) D="`basename %F .zip`";; *.ZIP) D="`basename %F .ZIP`";; *.rar) D="`basename %F .rar`";; *.RAR) D="`basename %F .RAR`";; *.xz) D="`basename %F .xz`";; *.7z) D="`basename %F .7z`";; esac exec mkdir "$D" + f \.(tar\.(z|Z|bz2|gz|lz|lzma|7z|xz))|(tbz2|tgz|tz)$ & t lr x Extract the contents of a compressed tar file unset PRG case %f in *.tar.bz2|*.tbz2) PRG="bunzip2 -c" ;; *.tar.gz|*.tar.z|*.tgz|*.tz|*.tar.Z) PRG="gzip -dc" ;; *.tar.lz) PRG="lzip -dc" ;; *.tar.lzma) PRG="lzma -dc" ;; *.tar.7z) PRG="7zr e -so" ;; *.tar.xz) PRG="xz -dc" ;; *) exit 1 ;; esac $PRG %f | tar xvpf - + F \.(tar\.(z|Z|bz2|gz|lz|lzma|7z|xz))|(tbz2|tgz|tz)$ & T r X Extract the contents of an other compressed tar file unset PRG case %F in *.tar.bz2|*.tbz2) PRG="bunzip2 -c" ;; *.tar.gz|*.tar.z|*.tgz|*.tz|*.tar.Z) PRG="gzip -dc" ;; *.tar.lz) PRG="lzip -dc" ;; *.tar.lzma) PRG="lzma -dc" ;; *.tar.7z) PRG="7zr e -so" ;; *.tar.xz) PRG="xz -dc" ;; *) exit 1 ;; esac $PRG %D/%F | tar xvpf - + f \.(bz2|egg|gz|lz|lzma|7z|xz|tar|whl|zip|ZIP|rar|RAR)$ & t lr x Extract a compressed file case %f in *.bz2) P="bzip2 -d";; *.gz) P="gzip -d";; *.lz) P="lzip -d";; *.lzma) P="lzma -d";; *.7z) P="7zr x";; *.xz) P="xz -d";; *.tar) P="tar xvpf";; *.egg|*.whl|*.zip|*.ZIP) P="unzip";; *.rar|*.RAR) P="unrar x -y";; esac exec $P %f + F \.(bz2|egg|gz|lz|lzma|7z|xz|tar|whl|zip|ZIP|rar|RAR)$ & T r X Extract another compressed file case %F in *.bz2) P="bzip2 -d";; *.gz) P="gzip -d";; *.lz) P="lzip -d";; *.lzma) P="lzma -d";; *.7z) P="7zr x";; *.xz) P="xz -d";; *.tar) P="tar xvpf";; *.egg|*.whl|*.zip|*.ZIP) P="unzip";; *.rar|*.RAR) P="unrar x -y";; esac exec $P %D/%F + t lr & f \.(zip|ZIP)$ y Extract from zip recoding filenames exec unzip.py %f + T r & F \.(zip|ZIP)$ Y Extract from other zip recoding filenames exec unzip.py %D/%F + t lr v View via mailcap exec see %f + t lr c Compare the file exec cmp %D/%f %f + t lr & T r C Compare these files exec cmp %D/%F %f + t lr d Diff the file exec diff -u --speed-large-files %D/%f %f + t lr & T r D Diff these files exec diff -u --speed-large-files %D/%F %f + t lr v vimdiff the file exec vim -d %D/%f %f + t lr & T r V vimdiff these files exec vim -d %D/%F %f + t d & ! f ^\.\.$ d Diff the directory exec diff -ru --speed-large-files \ -x CVS -x .git -x .hg -x .svn -x '*.py[co]' -x __pycache__ %D/%f %f + t d & T d & ! F ^\.\.$ D Diff these directories exec diff -ru --speed-large-files \ -x CVS -x .git -x .hg -x .svn -x '*.py[co]' -x __pycache__ %D/%F %f += f \.(asc|gpg|sig(n)?)$ & t lr v Verify signature exec gpg --verify %f + f \.(asc|gpg|sig(n)?)$ & t lr v Verify detached signature exec gpg --verify %f "`echo %f | sed 's/\.[^.]*$//'`" += f \.[1-8]$ | f \.man$ & t lr 1 Display the file with roff -man %view nroff -man %f m View a manual page MAN=%{Enter manual name} %view man -P cat $MAN + t dlr | t t r rsync the file(s) there rsync -ahPv --del %s %D