]> git.phdru.name Git - dotfiles.git/blobdiff - .mc/menu
.mc/menu: Verify signature from `*.gpg` files
[dotfiles.git] / .mc / menu
index 660f475c45ca7dfa3f47eb5cd67062464dd1c00e..a63f044a7cb4c891b874a52ea67c2cccf7886a99 100644 (file)
--- a/.mc/menu
+++ b/.mc/menu
@@ -10,9 +10,9 @@ shell_patterns=0
    exec $CMD %s
 
 + t t
-@  Do something on the tagged files one by one
+@  Do something on the selected files one by one
    CMD=%{Enter command}
-   for f in %t; do
+   for f in %s; do
      $CMD "$f"
    done
 
@@ -20,16 +20,20 @@ shell_patterns=0
 p  View the file in a pager
    exec ${PAGER:-more} %f
 
++ t r
+g  Edit the file in gvim
+   gvim %f &
+
 + t r
 b  View the file in a browser
    exec webbrowser file://%d/%f
 
 + t r
+= f \.(htm(l?)|txt)$
 w  View the file in a new browser window
    exec webbrowser -n file://%d/%f
 
 + t r
-= f \.(htm(l?)|txt)$
 t  View the file in a new browser tab
    exec webbrowser -t file://%d/%f
 
@@ -57,34 +61,30 @@ T  fb2txt
    esac
    $A %f | xsltproc /usr/local/src/FictionBook/FB2_2_txt_ru.xsl - | webstdin -e txt -t
 
++= t r & f \.(pdf|PDF|ps|PS)(\.bz2|\.gz)?$
+e  View pdf/ps
+   qpdfview %f &
+
++= t r & f \.djvu(\.bz2|\.gz)?$
+e  View djvu
+   djview %f &
+
 += t r & 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 r & f \.(odt|ott|sxw|stw|ods|ots|sxc|stc|odp|otp|sxi|sti|odg|otg|sxd|std|odb|odf|sxm|odm|sxg)$
-e  Edit OpenDoc with libreoffice
++ t r & 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)$
+e  Edit (Open)Docs with libreoffice
    libreoffice %f &
 
-+= t r & f \.(pdf|PDF|ps|PS|djvu)(\.bz2|\.gz)?$
-e  View pdf/ps/djvu with evince
-   evince %f &
-
 += t r & f \.(doc|DOC|rtf)$
 d  View doc with catdoc
    catdoc %f | ${PAGER:-more}
 
-+ t r & f \.(doc|DOC|rtf)$
-e  Edit doc with libreoffice
-   libreoffice %f &
-
 += t r & f \.(docx|DOCX)$
 d  View docx with docx2txt
    docx2txt %f - | iconv.py -f utf-8 | ${PAGER:-more}
 
-+ t r & f \.(docx|DOCX)$
-e  Edit docx with libreoffice
-   libreoffice %f &
-
 += t r & f \.(xls|XLS)$
 x  View xls with xls2csv
    xls2csv %f | ${PAGER:-more}
@@ -98,22 +98,26 @@ i  View image(s) scaled
 I  View image(s) full size
    xli -title "`echo %s | sed 's/ /_/g'`" %s &
 
-+ t r & f \.(ico|jp2|tif|TIF|tiff|TIFF)$ | t t
-= t r & f \.(ico|jp2|tif|TIF|tiff|TIFF)$
-I  View icon, JPEG-2000 or TIFF image
++ t r & f \.(bmp|BMP|gif|GIF|jpg|JPG|jpeg|JPEG|pbm|PBM|ppm|PPM|png|PNG|xbm|xpm)$
+I  Identify image
+   xli -identify %f
+
++ t r & f \.(ico|jp2|tif|TIF|tiff|TIFF|webp)$ | t t
+= t r & f \.(ico|jp2|tif|TIF|tiff|TIFF|webp)$
+I  View icon, JPEG-2000, TIFF, WebP image
    display %s &
 
-+ t r & f \.(aac|ac3|ape|cue|flac|m3u|mka|mp3|MP3|ogg|OGG|pls|WAV|wav|wv)$ | t t
++ t r & f \.(aac|ac3|ape|cue|dts|flac|m3u|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 cgmem_nice 500 audacious & sleep 3; fi
    #for f in %s; do
    #   audtool --playlist-addurl "$f"
    #done
-   #smplayer -add-to-playlist %s &
+   #smplay -add-to-playlist %s &
    deadbeef --queue %s &
 
-+ t r & f \.(aac|ac3|ape|cue|flac|m3u|mka|mp3|MP3|ogg|OGG|pls|WAV|wav|wv)$ | t t
-= t r & f \.(aac|ac3|ape|cue|flac|m3u|mka|mp3|MP3|ogg|OGG|pls|WAV|wav|wv)$
++ t r & f \.(aac|ac3|ape|cue|dts|flac|m3u|mka|mp3|MP3|ogg|OGG|pls|WAV|wav|wv)$ | t t
+= t r & f \.(aac|ac3|ape|cue|dts|flac|m3u|mka|mp3|MP3|ogg|OGG|pls|WAV|wav|wv)$
 p  Load the audiofile(s) or playlist(s)
    #if [ "`audtool --get-volume`" -eq 0 ]; then cgmem_nice 500 audacious & sleep 3; fi
    #audtool --playlist-clear
@@ -121,10 +125,10 @@ p  Load the audiofile(s) or playlist(s)
    #   audtool --playlist-addurl "$f"
    #done
    #smplayer -send-action pl_remove_all
-   #smplayer -add-to-playlist %s &
+   #smplay -add-to-playlist %s &
    deadbeef --queue %s &
 
-+ t r & f \.(aac|ac3|ape|cue|flac|m3u|mka|mp3|MP3|ogg|OGG|pls|WAV|wav|wv)$ | t t
++ t r & f \.(aac|ac3|ape|cue|dts|flac|m3u|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 cgmem_nice 500 audacious & sleep 3; fi
    #audtool --playlist-clear
@@ -132,8 +136,8 @@ P  Play the audiofile(s) or playlist(s)
    #   audtool --playlist-addurl "$f"
    #done
    #exec audtool --playback-play
-   #mplayer -playlist %f &
-   #smplayer %s &
+   #mplay -playlist %f &
+   #smplay %s &
    deadbeef %s &
    #exec mediaplayer_open %f
 
@@ -144,63 +148,69 @@ R  Play the playlist in random order
    #audtool --playlist-clear
    #audtool --playlist-addurl random-playlist-tmp.m3u
    #audtool --playback-play
-   #mplayer -playlist random-playlist-tmp.m3u &
-   #smplayer random-playlist-tmp.m3u &
-   #smplayer -actions pl_shuffle %f &
+   #mplay -playlist random-playlist-tmp.m3u &
+   #smplay random-playlist-tmp.m3u &
+   #smplay -actions pl_shuffle %f &
    deadbeef --queue random-playlist-tmp.m3u & deadbeef --play
    #mediaplayer_open random-playlist-tmp.m3u
    (sleep 5; exec rm random-playlist-tmp.m3u) &
 
-+ f \.(aac|ac3|ape|cue|flac|m3u|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
-= t r & f \.(aac|ac3|ape|cue|flac|m3u|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)$
++ f \.(aac|ac3|ape|cue|dts|flac|m3u|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
 s  Play audio/video file(s) or directory with smplayer
-   smplayer %s &
+   smplay %s &
 
-+= t d & f (video_ts|VIDEO_TS)$
++ t d & f (video_ts|VIDEO_TS)$
 c  Play the current directory with smplayer
-   smplayer . &
+   smplay . &
 
-+ t r & f \.(m3u|mp3|MP3|cue|aac|ac3|ape|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
++ t r & f \.(m3u|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 mplayer -msglevel identify=6 -frames 0 %s
+   exec "$HOME"/.config/mpv/mpv_identify.sh %f
 
 + t d & f (video_ts|VIDEO_TS)$
 i  DVD info
-   exec mplayer -dvd-device . dvd:// -msglevel identify=6 -frames 0
+   exec "$HOME"/.config/mpv/mpv_identify.sh .
 
-+ f \.(avi|AVI|flv|m2ts|m4v|mka|mkv|MKV|mov|MOV|mp4|MP4|mpg|MPG|vob|VOB|wma|wmv)$ | t t
-m  Play video file(s) with mplayer
-   mplayer %s &
++ f \.(aac|ac3|ape|cue|dts|flac|m3u|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|m3u|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
+   mplay %s &
 
-+ f \.(m3u|mp3|MP3|cue|aac|ac3|ape|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 gmplayer
-   gmplayer %s &
++ f \.(aac|ac3|ape|cue|dts|flac|m3u|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|m3u|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 asking audio volume
+   AUDIO_VOLUME=%{Enter volume}
+   AUDIO_VOLUME=$AUDIO_VOLUME mplay %s &
 
-+ t d & f (video_ts|VIDEO_TS)$
-d  Play DVD directory with mplayer
-   mplayer -dvd-device . dvd:// &
++ f \.(m3u|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
+   gmplay %s &
+
++= t d & f (video_ts|VIDEO_TS)$
+d  Play DVD directory with mpv
+   mplay -dvd-device . dvd:// &
 
 + t d & f (video_ts|VIDEO_TS)$
-D  Play DVD directory with gmplayer
-   gmplayer -dvd-device . dvd:// &
+D  Play DVD directory with mpv GUI
+   gmplay -dvd-device . dvd:// &
 
 + t d & f (video_ts|VIDEO_TS)$
-t  Play DVD title with mplayer
+t  Play DVD title with mpv
    title=%{Enter title}
-   mplayer -dvd-device . dvd://"$title" &
+   mplay -dvd-device . dvd://"$title" &
 
 + t d & f (video_ts|VIDEO_TS)$
-T  Play DVD title with gmplayer
+T  Play DVD title with mpv GUI
    title=%{Enter title}
-   gmplayer -dvd-device . dvd://"$title" &
+   gmplay -dvd-device . dvd://"$title" &
 
 + t d
-p  Play directory with mplayer
-   mplayer %f/* &
+p  Play directory with mpv
+   mplay %f/* &
 
 + t d
-P  Play directory with gmplayer
-   gmplayer %f/* &
+P  Play directory with mpv GUI
+   gmplay %f/* &
 
 + t d & f ^\.\.$
 b  Compress the current subdirectory to tar.bz2
@@ -220,6 +230,24 @@ g  Compress the current subdirectory to tar.gz
    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 /`"
@@ -239,7 +267,7 @@ z  Compress the current subdirectory to zip
    echo ../"$zip".zip created.
 
 + t d & f ^\.\.$
-y  Compress the current subdirectory to zip with recoded filenames
+y  Compress the current subdirectory to zip recoding filenames
    Pwd="`basename %d /`"
    echo -n "Name of the distribution file (without extension) [$Pwd]: "
    read zip
@@ -247,120 +275,107 @@ y  Compress the current subdirectory to zip with recoded filenames
    cd .. && zip.py "$zip".zip "$Pwd" &&
    echo ../"$zip".zip created.
 
-+ ! f \.bz2$ & ! f \.gz$ & ! f \.lz$ & ! f \.lzma$ & ! f \.7z$ & ! f \.xz$ & ! f \.(zip|ZIP)$
++ 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 r
 z  bzip2 the file
-   exec bzip2 -9 %f.bz2 %f
+   exec bzip2 -9 %f
 
-+ ! f \.bz2$ & ! f \.gz$ & ! f \.lz$ & ! f \.lzma$ & ! f \.7z$ & ! f \.xz$ & ! f \.(zip|ZIP)$
++ ! f \.(z|Z|bz2|gz|lz|lzma)|(tbz2|tgz|tz|zip|ZIP|rar|RAR|xz|7z)$ & t r
 z  gzip the file
    exec gzip -9 %f
 
-+ ! f \.bz2$ & ! f \.gz$ & ! f \.lz$ & ! f \.lzma$ & ! f \.7z$ & ! f \.xz$ & ! f \.(zip|ZIP)$
++ ! f \.(z|Z|bz2|gz|lz|lzma)|(tbz2|tgz|tz|zip|ZIP|rar|RAR|xz|7z)$ & t r
 z  lzip the file
    exec lzip -9 %f
 
-+ ! f \.bz2$ & ! f \.gz$ & ! f \.lz$ & ! f \.lzma$ & ! f \.7z$ & ! f \.xz$ & ! f \.(zip|ZIP)$
++ ! f \.(z|Z|bz2|gz|lz|lzma)|(tbz2|tgz|tz|zip|ZIP|rar|RAR|xz|7z)$ & t r
 z  lzma the file
    exec lzma -9 %f
 
-+ ! f \.bz2$ & ! f \.gz$ & ! f \.lz$ & ! f \.lzma$ & ! f \.7z$ & ! f \.xz$ & ! f \.(zip|ZIP)$
++ ! f \.(z|Z|bz2|gz|lz|lzma)|(tbz2|tgz|tz|zip|ZIP|rar|RAR|xz|7z)$ & t r
 z  7z the file/directory
-   exec 7z -9 %f
+   exec 7zr a %f.7z %f
 
-+ ! f \.bz2$ & ! f \.gz$ & ! f \.lz$ & ! f \.lzma$ & ! f \.7z$ & ! f \.xz$ & ! f \.(zip|ZIP)$
++ ! f \.(z|Z|bz2|gz|lz|lzma)|(tbz2|tgz|tz|zip|ZIP|rar|RAR|xz|7z)$ & t r
 z  xz the file
    exec xz -9 %f
 
-+ ! f \.bz2$ & ! f \.gz$ & ! f \.lz$ & ! f \.lzma$ & ! f \.7z$ & ! f \.xz$ & ! f \.(zip|ZIP)$
++ ! f \.(z|Z|bz2|gz|lz|lzma)|(tbz2|tgz|tz|zip|ZIP|rar|RAR|xz|7z)$ & t r
 z  zip the file/directory
    exec zip -r9 %f.zip %f
 
-+ ! f \.bz2$ & ! f \.gz$ & ! f \.lz$ & ! f \.lzma$ & ! f \.7z$ & ! f \.xz$ & ! f \.(zip|ZIP)$
-y  zip the file/directory with recoded filename(s)
++ ! f \.(z|Z|bz2|gz|lz|lzma)|(tbz2|tgz|tz|zip|ZIP|rar|RAR|xz|7z)$ & t r
+y  zip the file/directory recoding filename(s)
    exec zip.py %f.zip %f
 
 + t t
-Z  zip these files/directories
+Z  zip selected files/directories
    ZIP=%{Enter zip name}
    exec zip -r9 "$ZIP" %s
 
 + t t
-Y  zip these files/directories with recoded filenames
+Y  zip selected files/directories recoding filenames
    ZIP=%{Enter zip name}
    exec zip.py "$ZIP" %s
 
-+ f \.tar\.bz2$ | f \.tar\.gz$ | f \.tgz$ | f \.tar\.lz$ | f \.tar\.lzma$ | f \.(zip|ZIP)$ | f \.(rar|RAR)$ | f \.7z$ | f \.xz$ & t r
++ f \.(tar\.(z|Z|bz2|gz|lz|lzma))|(tbz2|tgz|tz|zip|ZIP|rar|RAR|xz|7z)$ & t r
 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`";;
-     *.7z)       D="`basename %f .7z`";;
      *.xz)       D="`basename %f .xz`";;
+     *.7z)       D="`basename %f .7z`";;
    esac
    exec mkdir "$D"
 
-+ F \.tar\.bz2$ | F \.tar\.gz$ | F \.tgz$ | F \.tar\.lz$ | F \.tar\.lzma$ | F \.(zip|ZIP)$ | F \.(rar|RAR)$ | F \.7z$ | F \.xz$ & T r
++ 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`";;
-     *.7z)       D="`basename %F .7z`";;
      *.xz)       D="`basename %F .xz`";;
+     *.7z)       D="`basename %F .7z`";;
    esac
    exec mkdir "$D"
 
-+ f \.(bz2|gz|lz|lzma|7z|xz|tar|zip|ZIP|rar|RAR)$ & t r
-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="7z -d";;
-     *.xz)   P="xz -d";;
-     *.tar)  P="tar xvpf";;
-     *.zip|*.ZIP) P="uzip";;
-     *.rar|*.RAR) P="rar x -y";;
-   esac
-   exec $P %f
-
-+ F \.(bz2|gz|lz|lzma|7z|xz|tar|zip|ZIP|rar|RAR)$ & T r
-x  Extract another compressed file
-   case %F in
-     *.bz2)  P="bzip2 -cd";;
-     *.gz)   P="gzip -cd";;
-     *.lz)   P="lzip -cd";;
-     *.lzma) P="lzma -cd";;
-     *.7z)   P="7z -cd";;
-     *.xz)   P="xz -cd";;
-     *.tar)  P="tar xvpf";;
-     *.zip|*.ZIP) P="uzip";;
-     *.rar|*.RAR) P="rar x -y";;
-   esac
-   exec $P %D/%F
-
-+ f \.tar\.gz$ | f \.tar\.z$ | f \.tgz$ | f \.tpz$ | f \.tar\.lz$ | f \.tar\.lzma$ | f \.tar\.7z$ | f \.tar\.xz$ | f \.tar\.Z$ | f \.tar\.bz2$ & t r
++ f \.(tar\.(z|Z|bz2|gz|lz|lzma|7z|xz))|(tbz2|tgz|tz)$ & t r
 x  Extract the contents of a compressed tar file
    unset PRG
    case %f in
-      *.tar.bz2)
+      *.tar.bz2|*.tbz2)
          PRG="bunzip2 -c"
       ;;
-      *.tar.gz|*.tar.z|*.tgz|*.tpz|*.tar.Z)
+      *.tar.gz|*.tar.z|*.tgz|*.tz|*.tar.Z)
          PRG="gzip -dc"
       ;;
       *.tar.lz)
@@ -370,7 +385,7 @@ x  Extract the contents of a compressed tar file
          PRG="lzma -dc"
       ;;
       *.tar.7z)
-         PRG="7za e -so"
+         PRG="7zr e -so"
       ;;
       *.tar.xz)
          PRG="xz -dc"
@@ -379,16 +394,16 @@ x  Extract the contents of a compressed tar file
       exit 1
       ;;
    esac
-   $PRG %f | tar xvf -
+   $PRG %f | tar xvpf -
 
-+ F \.tar\.gz$ | F \.tar\.z$ | F \.tgz$ | F \.tpz$ | F \.tar\.lz$ | F \.tar\.lzma$ | F \.tar\.7z$ | F \.tar\.xz$ | F \.tar\.Z$ | F \.tar\.bz2$ & t r
++ 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)
+      *.tar.bz2|*.tbz2)
          PRG="bunzip2 -c"
       ;;
-      *.tar.gz|*.tar.z|*.tgz|*.tpz|*.tar.Z)
+      *.tar.gz|*.tar.z|*.tgz|*.tz|*.tar.Z)
          PRG="gzip -dc"
       ;;
       *.tar.lz)
@@ -398,7 +413,7 @@ X  Extract the contents of an other compressed tar file
          PRG="lzma -dc"
       ;;
       *.tar.7z)
-         PRG="7za e -so"
+         PRG="7zr e -so"
       ;;
       *.tar.xz)
          PRG="xz -dc"
@@ -407,14 +422,44 @@ X  Extract the contents of an other compressed tar file
       exit 1
       ;;
    esac
-   $PRG %D/%F | tar xvf -
+   $PRG %D/%F | tar xvpf -
+
++ f \.(bz2|egg|gz|lz|lzma|7z|xz|tar|whl|zip|ZIP|rar|RAR)$ & t r
+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 r & f \.(zip|ZIP)$
-y  Extract from zip with recoded filenames
+y  Extract from zip recoding filenames
    exec unzip.py %f
 
 + T r & F \.(zip|ZIP)$
-y  Extract from other zip with recoded filenames
+Y  Extract from other zip recoding filenames
    exec unzip.py %D/%F
 
 + t r
@@ -447,13 +492,15 @@ V  vimdiff these files
 
 + t d & ! f ^\.\.$
 d  Diff the directory
-   exec diff -ru --speed-large-files %D/%f %f
+   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 %D/%F %f
+   exec diff -ru --speed-large-files \
+      -x CVS -x .git -x .hg -x .svn -x '*.py[co]' -x __pycache__ %D/%F %f
 
-+= f \.(asc|sig(n)?)$ & t r
++= f \.(asc|gpg|sig(n)?)$ & t r
 v  Verify signature
    exec gpg --verify %f
 
@@ -467,4 +514,4 @@ m  View a manual page
 
 + t r | t d | t t
 r  rsync the file(s) there
-   rsync -ahP --del %s %D
+   rsync -ahPv --del %s %D