diff --git a/plugins/common-aliases/common-aliases.plugin.zsh b/plugins/common-aliases/common-aliases.plugin.zsh index 3139b821a..25c20f4fc 100644 --- a/plugins/common-aliases/common-aliases.plugin.zsh +++ b/plugins/common-aliases/common-aliases.plugin.zsh @@ -56,27 +56,110 @@ autoload -Uz is-at-least if is-at-least 4.2.0; then # open browser on urls if [[ -n "$BROWSER" ]]; then - _browser_fts=(htm html de org net com at cx nl se dk) + _browser_fts=(htm html xhtml) for ft in $_browser_fts; do alias -s $ft='$BROWSER'; done fi - _editor_fts=(cpp cxx cc c hh h inl asc txt TXT tex) - for ft in $_editor_fts; do alias -s $ft='$EDITOR'; done + # open editable text files in text editor + if [[ -n "$VISUAL" ]] || [[ -n "$EDITOR" ]]; then + _aliases_launch_editor() { + # directly launch matched files with executable bit and shebang present + if [[ -x "${1}" ]]; then + read -r <"${1}" + if [[ ${#REPLY} -ge 3 ]] && [[ ${REPLY:0:2} = '#!' ]]; then + "$@" + return $? + fi + fi + if [[ -n "$VISUAL" ]]; then + $VISUAL "$@" + else + $EDITOR "$@" + fi + } + # Taken from the /language/metadata/property[name="globs"] sections of the + # gtksourceview language definition files in + # /usr/share/gtksourceview-3.0/language-specs/*.lang + _editor_fts=( + abnf as adb ads 4th forth asp am awk prg bib bsv boo cg h c cmake ctest + cbl cob cbd cdb cdc hh hp hpp h++ cpp cxx cc C c++ cs css CSSL csv cu cuh + desktop kdelnk diff patch rej d docbook bat cmd sys dot gv dpatch dtd dtl + e eif erl hrl fcl frt fs f f90 f95 for F F90 fs g gd gi gap gdb gs glslv + glslf go groovy hs lhs hx pro idl igm ini jade pug java js node ijs json + geojson topojson jl kt tex ltx sty cls dtx ins bbl l lex flex la lai lo + ll logcat lua m4 ac in make mak mk page markdown md mkd m mac MAC dem DEM + wxm WXM build mo mop mxml n nrx nai nsh m j ml mli mll mly ocl ooc sign + impl cl p pas txt TXT pl pm al perl t php php3 php4 phtml pig pc po pot + prolog proto pp py3 py pyw R Rout r Rhistory Rtspec rst rb rake gemspe rs + scala scm sce sci sh bash sml sig rq sql rnw Rnw snw Snw swift sv svh t2t + tcl tk tera texi texinfo thrift toml tml lock vala vapi vb v vhd xml xspf + siv smil smi sml kino xul xbel abw zabw glabe jnlp mml rdf rss wml xmi fo + xslfo xslt xsl y yacc yaml yml + ) + for ft in $_editor_fts; do alias -s $ft=_aliases_launch_editor; done + fi + + # open image files in image viewer if [[ -n "$XIVIEWER" ]]; then - _image_fts=(jpg jpeg png gif mng tiff tif xpm) + # List inspired by https://en.wikipedia.org/wiki/Image_file_formats + _image_fts=( + #: Raster formats + # JPEG, JPEG2000, HEIF/HEVC, JBIG + jpg jpeg jpe jif jfif jfi jp2 j2k jpf jpx jpm mj2 heif heic jbg jbig + # BMP, BPG, GIF, ICO/ANI, PCX, PNG+MNG, TGA, TIFF, WebP (Web) + bmp bpg gif dib ico cur ani pcx png mng tga tiff tif webp + # NetPBM, XBM/XPM/XWD (ASCII) + pbm bgm ppm pnm xbm xpm xwd + # CIFF, DNG, DPX, ECW, FITS, ICS, RGBE (HDR & Raw) + crw dng dpx ecw fits ics ids fit fts hdr + # DDS ICNS OpenRaster SunRaster (Other) + dds icns ora ras sun + #: Vector formats + # CGM WMF Gerber IGES SVG + cgm wmf emf wmz emz gbr iges svg svgz + ) for ft in $_image_fts; do alias -s $ft='$XIVIEWER'; done fi - _media_fts=(ape avi flv m4a mkv mov mp3 mpeg mpg ogg ogm rm wav webm) - for ft in $_media_fts; do alias -s $ft=mplayer; done + if [[ -n "$XMVIEWER" ]]; then + _media_fts=( + #: Audio (container) formats + # https://en.wikipedia.org/wiki/Audio_file_format#List_of_formats + aac act aiff ape au awb dct dss flac gsm m4a m4b mp3 mpc oga opus ra sln + tta vox wav wma wv + #: Video (container) formats + # https://en.wikipedia.org/wiki/Video_file_format#List_of_video_file_formats + mkv flv f4v f4p f4a f4b vob ogv drc gifv avi mov qt wmv yuv rmvb asf amv + m4v mpg mp2 m2v mpeg mpe mpv svi 3g2 mxf nsv + #: Container formats that may store both + 3gp ogg mogg mp4 m4p rm webm + ) + for ft in $_media_fts; do alias -s $ft=$XMVIEWER; done + fi - #read documents - alias -s pdf=acroread - alias -s ps=gv - alias -s dvi=xdvi - alias -s chm=xchm - alias -s djvu=djview + #open complex document formats using the system viewer + _document_fts=( + # Long-term storage formats + djvu dvi fb2 epub pdf ps rtf + # Office Binary & Office OpenXML + doc docx docm ppt pptx pptm xls xlsx xlsm + # OpenDocument + odt fodt ods fods odp fodp odg fodg odf + # Uniform Office Format + uof uot uos uop + # StarOffice + sdw sxw sdc sxc sdd sci sda sxd smf sxm + # WordPerfect + wpd wp wp4 wp5 wp6 wp7 + # Others + abw gnm gnumeric pages hwp + ) + if type xdg-open >/dev/null; then + for ft in $_document_fts; do alias -s $ft=xdg-open; done + elif type open >/dev/null; then + for ft in $_document_fts; do alias -s $ft=open; done + fi #list whats inside packed file alias -s zip="unzip -l"