できること
トピック名をうろ覚えのときに、対話的に絞り込み検索をしながら、ROSコマンドを実行することができる。
例: rostopic echo <topic name>
でトピックの値を調べたいが、トピック名を後ろの方しか覚えてない
before
after
導入方法
~/.bashrc
に以下を追記
if [ ! -f ~/.fzf.zsh ] ;then
git clone https://github.com/junegunn/fzf.git ~/.fzf
bash ~/.fzf/install
fi
source ~/.fzf.zsh
さらに下記~/.bashrcに追記
alias roste='rostopic echo -c $(rostopic list | fzf)'
alias rosti='rostopic info $(rostopic list | fzf)'
alias rosni='rosnode info $(rosnode list | fzf)'
alias rosmi='rosmsg info $(rosmsg list | fzf)'
alias rossi='rosservice info $(rosservice list | fzf)'
背景
ROSを使ってロボット開発をしていると、システムの状態を調べるときにrostopic echo
などのROSコマンドを頻繁に使うと思います。
基本的にトピック名を途中まで入力して、TABキーを押せば、名前を補完してくれるようになってますが、深いネームスペースのトピックを見たいときは、後方補完ができないので、トピックを頭から順番に打ち込む必要がありちょっと面倒になります。
なので最初はrostopic list
でトピック名を調べて、クリップボードにコピーしてから、rostopic echo
に渡していましたが、何度もやってるとだんだん面倒になってくるので、楽な方法はないかと考えた結果fzf
で検索と実行を同時に行う方法に落ち着きました。
何やってるの?
fzfはインクリメンタルな絞り込み検索ができるCUIツールです。
何かしらのリスト(文字列)をパイプ経由でfzfに渡してあげると、絞り込み検索ビューが表示されるので、探したい名前を入力すると素早く絞り込み検索ができます。
また、文字を入力するごとに逐次検索結果が表示されるので、途中まで打ち込んで検索終了、みたいなことができます。
今回はこの機能を使って、ROSのトピック/ノード/メッセージなどの名前を曖昧検索し、別のROSコマンドに渡すことで、1コマンドで即座にほしい情報が得られるようにしました。