キロスのゲーム日記

ゲーム、TCGなど趣味の話

gnuplotのタブ補完の挙動の変更

これまではずっとUbuntu12.04でgnuplotを使っていましたが、環境をUbuntu14.04に変えたらgnuplotのタブ補完の仕様が微妙に変わってしまい困惑しました。
悩んだ結果、問題が解決したので、まとめておきます。


そもそも、どんな問題かというとUbuntu14.04のgnuplotではTab補完で以下のようにディレクトリ名の後にいらない空白が追加されてしまうのです。

まず、現在のディレクトリに"test"という名前のディレクトリがあり、"test"ディレクトリの中に"data.dat"というファイルがある場合(相対パスで書くと"./test/data.dat")を考えます。
bashの端末内で
$ cat tes
と打ち込んでから、Tabを押して補完をすると
$ cat test/
と補完されます。
この状態でもう一度Tab補完を行うと
$ cat test/data.dat
となり、即座にファイルの中を閲覧できます。

しかし、Ubuntu14.04のgnuplotの端末内では同様状態で
gnuplot> plot "tes
と打ち込んでから、タブ補完を行うと
gnuplot> plot "test␣
と補完されます。ここで、"␣"は半角スペースの意味です。
このため、連続でタブを押しても余分な半角スペースのせいで、"test"ディレクトリ内の"data.dat"を補完してくれません。

Ubuntu12.04ではbashと同じようにタブ補完してくれていたので、タブ連打で深いディレクトリもサクサクとアクセスできました。
どうやら、bashではreadlineというライブラリを用いて補完を実現しているらしいのですが、gnuplotではTab補完にbashのライブラリを利用していないせいで、挙動が違っているそうです。
gnuplotをソースコードからコンパイルする場合に、明示的にライブラリをリンクしてあげればbashと同じ挙動になるそうでが、そんな面倒くさいことはやっていられませんし、だからと言ってこの微妙なイライラを放置するわけにもいきません。

そこで利用したのが、補完ライブラリを一時的に上書きするrlwrapというソフトウェアです。
これはUbuntuソフトウェアセンターからインストールできます。
リポジトリを変更する必要もないので、ソフトウェアセンターの検索窓にrlwrapを入力すればすぐに見つかるはずです。
rlwrapをインストールした状態で、
$ rlwrap -c -a --break-chars "'"'(){}[],#@;|`"' gnuplot
と打ち込んでgnuplotを起動してあげれば、gnuplotのTab補完機能をrlwrapが上書きし
gnuplot> plot "tes
 ↓ Tab補完
gnuplot> plot "test/
 ↓ Tab補完
gnuplot> plot "tes/data.dat"
というように、望みどおりの補完を実現してくれます。
なお、起動時のオプションである、--break-chars "'"'(){}[],#@;|`"' はファイルの区切り文字を指定するためにつけています。
初期状態だと"-"や"+"がファイルの区切り文字とみなされ、パス内にそれらの記号が含まれると適切に補完されなくなるので、明示的に区切り文字を変更しています。
区切り文字全体をクォートで囲む必要があるのに、区切り文字自体にもクォートを含ませるためにややこしくなっています。
この設定には外部のサイトを参考にさせていただきました。

なお、毎回このコマンドを打ち込むのは面倒なので、↓のようにエイリアスでgnuplot自体を上書きして別名を付けたほうが楽です。
alias gnuplot="rlwrap -c -a --break-chars "\"\'\"\'"(){}[],#@;|\`"\"\'" gnuplot"
これを.bashrcあたりに書き込んでおけば、常に適切なTab補完をしてくれる状態でgnuplotが立ち上がります。
なお、ダブルクォーテーションの中にダブルクォーテーションやシングルクォーテーション、バッククォートが入っているので、めちゃくちゃになるほどエスケープしてます。
これが最適な書き方なのかはわかりませんが、ちゃんと動くので妥協しています。

2016年3月28日追記
余分なピリオドが入っていて、挙動が不適切だったようです。すみませんでした。
適切に動くように訂正しておきました。
関連記事
関連するタグ PCLinuxUbuntugnuplot
[ 2015/10/20 02:45 ] PC gnuplot | TB(0) | CM(0)
コメントの投稿












管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL

プロフィール

キロス

Author:キロス
ゲームやTCG、その他日常生活で気になった事の話をします。
主にFFの話をするつもりですが、色々なネタを書くと思います。

検索フォーム
全記事表示リンク