ドット ファイル管理ユーティリティの bash 補完スクリプトを作成中です。このツールにはdots diff [filename]
、インストールされたドット ファイルとソース ドット ファイルの違いを表示するコマンドがあります。dots files
また、管理されているすべてのドット ファイルのパス (ソース ディレクトリからの相対パス) を一覧表示するコマンドもあります。files コマンドの出力で diff コマンドを完成させたいと思います。
ファイル出力の例を次に示します
X11/xkb/symbols/evan-custom
X11/xorg.conf.d/10-dual-monitors.conf
X11/xorg.conf.d/10-keylayout.conf
bash/aliases
bash/bashrc
bash/completion.d/dots
bash/profiles/standard-user
bash/profiles/systemd-user
bspwm/bspwmrc
compton/compton.conf
fontconfig/fonts.conf
git/config
git/ignore
gtk-2.0/gtkrc
gtk-3.0/settings.ini
mysql/config
mysql/grcat
ncmpcpp/config
pulse/client.conf
pulse/daemon.conf
pulse/default.pa
ssh/config
sublime-text-3/Packages/User/Preferences.sublime-settings
sxhkd/sxhkdrc
termite/config
transmission-daemon/settings.json
vim/vimrc
このようなものを使用して
COMPREPLY=( $(compgen -W "$(dots files)" -- $cur) )
動作しますが、readline が利用可能なオプションを一覧表示すると、完全なパスが一覧表示されます (上記のリスト)。
単語をファイルパスであるかのように扱い、提案をリストするときは最初のスラッシュまでしかリストしないようにしたいと思います。
たとえば、次のように入力dots diff [tab][tab]
すると、次のように出力されます
X11/
bash/
bspwm/
compton/
fontconfig/
git/
gtk-2.0/
gtk-3.0/
mysql/
ncmpcpp/
pulse/
ssh/
sublime-text-3/
sxhkd/
termite/
transmission-daemon/
vim/
たとえば、次に入力したdots diff bash/[tab][tab]
場合、それは表示されます
aliases
bashrc
completion.d/
profiles/
理想的には、実際にそれをパスとして扱い、readline オプションmark-directories
を off に変更すると末尾のスラッシュが除外されるようにしたいと考えています。
設定を試みましcompopt -o filenames
たが、最初はパスではなくファイル名が提案されます。