emacs の関数を作成すると、bash の自動補完機能が動作しません

emacs の関数を作成すると、bash の自動補完機能が動作しません

私のシステムの詳細: Asus ラップトップにインストールされた Windows 8.1 から、Oracle Virtual Box 4.3.6 で Ubuntu 12.04.4 LTS を実行しています。bash_completion バージョン 1.3 リリースを使用しています (/etc/bash_completion ファイルのコメントから取得しました)

私は、bash はコマンドの後にファイルとディレクトリを常に自動補完すると思っていました。しかし、Google 検索で bash_completion についてさらに調べたところ、これはコマンドによって異なることがわかりました。しかし、別の方法で を呼び出すときに、bash のこの自動補完機能に問題が発生していますemacs -nw

eeファイル内で関数として定義しました~/.bash_aliases。これはエイリアスではないことはわかっていますが、エイリアスと同じことを関数を使って実行しているだけです。

function ee () {
    emacs -nw "$@"
}

export -f ee

tabファイル名の一部を入力すると、ee 関数による補完を使用できると思っていました。これは機能しないようです。一方emacs -nw、 に続けてファイル名の一部を入力すると、タブ補完は完璧に機能します。何が欠けているのかまったくわかりません。コマンドの出力を確認したところ、と のcomplete -p両方で次のようになりました。emacsee

eakangk@eakan-u-vbox:~$ complete -p | grep 'ee'
complete -F _filedir_xspec ee
eakangk@eakan-u-vbox:~$ complete -p | grep 'emacs'
complete -F _filedir_xspec emacs

ということは、自動補完を試みると、両方のコマンドが同じ種類の動作をするはずではないでしょうか? 編集:質問を投稿したときには、ファイルee内の行を見ていませんでし/etc/bash_completionた。しかし、今はそこにあることがわかりました。ただし、/etc/bash_completion ファイルには次の行があります。

complete -f -X '!*.@(gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx)' ee
complete -f -X '*.@(o|so|so.!(conf)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite

ここで何が間違っているのでしょうか?

答え1

これは、bash 補完パッケージ。emacs 用のカスタム補完セットがいくつかあり、コマンド名が異なると、どうやら同じ補完が失敗するようです。

私自身は bash-completion を使用していませんが、ソースをざっと調べたところ、次のことがわかりました。

_install_xspec '*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite

これはおそらく、「これらのコマンドでは、.gif、.mp3、.avi などで終わるファイルを補完しないでください」という意味で使用され、ee コマンドに _install_xspec 行がない場合、何も補完されないと推測します。

_install_xspec 関数を見ると、この関数は単に_xspecsコマンド名をキーとして名前の付いた連想配列にこれらの値を格納するだけなので、 を実行すると_xspecs[ee]=${_xspecs[emacs]}、ee コマンドは emacs と同じ補完を取得するはずです。

関連情報