私は一応趣味でrosのパッケージを作ってみています。
大体パッケージ名はotl_hogehogeという名前になっています。
rosはwikiのドキュメントとかがいきなりパッケージ名なので、これが他の人とかぶると困るからです。
普段、自分が作ったパッケージに移動(cd)するには
$ roscd otl_
と入力して、Tabを押してそこから目的のパッケージを探しています。
これをもっと簡単にするotlcdを作ります。
$ otlcd
と入力して、Tabを押すと
$ otlcd otl_
と展開されて、もう一度Tabを押すと候補("otl_"で始まるパッケージ)一覧が表示される、という状態にしたいです。
というわけでroscdを参考に、というか、ちょっとだけいじって作ってみました。
ソースは以下のような感じ。
function _otlcomplete_sub_dir {
local arg opts rosvals
COMPREPLY=()
arg="${COMP_WORDS[COMP_CWORD]}"
_ros_decode_path ${arg}
if [[ -z ${rosvals[2]} ]]; then
opts=`_ros_list_locations | grep ^${OTLCD_PREFIX}` IFS=$'\n'
COMPREPLY=($(compgen -W "${opts}" -S / -- ${rosvals[0]}))
unset IFS
else
if [ -e ${rosvals[1]}${rosvals[2]} ]; then
opts=`find -H ${rosvals[1]}${rosvals[2]} -maxdepth 1 -mindepth 1 -type d
! -regex ".*/[.].*" -print0 | tr '\000' '\n' | sed -e "s/.*\/\(.*\)/\1\//g"`
else
opts=''
fi
IFS=$'\n'
COMPREPLY=($(compgen -P ${rosvals[0]}${rosvals[2]} -W "${opts}" -- ${rosvals[3]}))
unset IFS
fi
}
alias otlcd=roscd
complete -F "_otlcomplete_sub_dir" -o "nospace" "otlcd"
これをotl_bashパッケージにotlbashというファイル名で作りました。
赤いところをいじってあとはrosbashのコピペです。
(やっつけ感がすごくてすみませんがsubversionにいれておきました)
.bashrcでsetup.bashを読み込んだあとで以下の記述を追加すると使えます。
export OTLCD_PREFIX="otl_"
source `rospack find otl_bash`/otlbash
OTLCD_PREFIXに好きな文字列を入れられるので、もし私と同じようなprefixをパッケージ名に付けている人はいかがでしょうか?