Because I really miss being able to gnuclient +23 foo (for which there at least is mate --line 23 foo) or vim +/pat bar (which mate can't do) I whipped this up. Maybe someone will find it useful.
##
## ma -- textmate launcher that works like 'vi +line file' or 'vi +/re file'
##
ma () {
emulate -L zsh
setopt extended_glob
local line="" column="" url="txmt://open?url=" term=""
local usage="usage: ma [+line[:col]] file"
if (( # == 0 )) ; then
print "$usage"
return 1
fi
if [[ "$1" = (#b)+([0-9]##)(:([0-9]##)#)# ]] ; then
shift ## eat $1
line="$match[1]"
[[ -n "$match[3]" ]] && column="$match[3]"
elif [[ "$1" = (#b)+/(*) ]] ; then
shift
local term="$match[1]"
fi
if [[ -z "$1" ]] ; then
print "$usage"
return 1
fi
file="$1" ; shift
[[ "$file" != /* ]] && file="${PWD}/$file"
if [[ -n "$term" ]] ; then
local -a maybe_line
maybe_line=( "${(s,:,)$(perl -lne 'BEGIN{$p=shift;$p=qr/($p)/}if( /$p/ ){$c=$-[1]+1;print "$.:$c";exit 0}END{exit 1;}' -- "$term" "$file")}" )
if [[ -z "$maybe_line" ]] ; then
print "No match for '$term' found in '$file'"
return 1
else
line="$maybe_line[1]"
column="$maybe_line[2]"
fi
fi
url="${url}file:///$file"
[[ -n "$line" ]] && url="${url}&line=$line"
[[ -n "$column" ]] && url="${url}&column=$column"
open "$url"
}
ma "$@"