【コラム】
前回はdaemonコマンドに対する補完機能を設定する方法について述べた。今回はさらに補完機能を高める方法について解説しよう。
daemonコマンドは引数にコマンドをとる。そのため、コマンドを補完対象とでるように設定したわけだが、これだけでは使いにくい。コマンドを補完表示したあとは、そのコマンドの補完設定が機能するようにしたいところだ。
そこで、コマンド補完の後に「'*::args:_normal'」を追加しよう。これは、引数のコマンドに対して補完が有効になる設定だ。指定する順番がそのままコマンド補完の補完場所に対応している。
#compdef daemon
_arguments \
':command:_command_names -e' \
'*::args:_normal'
リスト1.1のように設定すれば、例えばプロンプト1.1のように補完されたコマンドに対してさらに補完機能が適用されるようになる。
% daemon tar [ここでタブキーを押すとコマンドの補完が展開される]
A -- append to an archive
c -- create a new archive
f -- specify archive file or device
t -- list archive contents
u -- update archive
v -- verbose output
x -- extract files from an archive
引数の補完設定ができたので、次はdaemonコマンドのオプション補完機能を実現するとしよう。FreeBSD 7-currentのdaemonコマンドには。-c、-f、-p、-uのコマンドオプションがある。その中で、まずは引数をとらない単体オプションの-cと-fを設定する。設定は、 '-c[change the current working directory to the root]'のようにオプションとその説明を追加すればよい。動作説明は、マニュアルから引用しよう。
#compdef daemon
_arguments \
'-c[change the current working directory to the root]' \
'-f[redirect standard input, standard output and standard error to /dev/null]' \
':command:_command_names -e' \
'*::args:_normal'
リスト2.1のように設定すると、プロンプト2.1のように「-タブキー」でオプションが補完表示されるようになる。さらにオプション補完を実行しようとすれば、プロンプト2.2のように残りのオプションが補完表示されるようになる。これだけの設定でここまで動くようになるのだから、なかなか便利だ。
% daemon -[ここでタブキーを押すとオプションの候補が表示される]
-c -- change the current working directory to the root
-f -- redirect standard input, standard output and standard error to /dev/null
% daemon -c -[ここでタブキーを押すと残りの候補が補完表示される]
-f -- redirect standard input, standard output and standard error to /dev/null
FreeBSD daemonコマンドでは-pでプロセスIDを出力するファイルを、-uで実行するユーザを指定できる。ファイルを補完するなら:file:_filesを、ユーザ名を補完するなら:user:_users'をオプション補完設定に追加すればよい。つまり-uなら'-u[run the program with the rights of user specified]:user:_users'のようになるわけだ。
#compdef daemon
_arguments \
'-c[change the current working directory to the root]' \
'-f[redirect standard input, standard output and standard error to /dev/null]' \
'-p[write the ID of the created process into the file]:file:_files' \
'-u[run the program with the rights of user specified]:user:_users' \
':command:_command_names -e' \
'*::args:_normal'
リスト3.1のように設定すれば、プロンプト3.1やプロンプト3.2のようにオプション後に補完が効くようになる。
% daemon -p [ここでタブキーを押すとファイルが補完表示される]
COPYRIGHT.txt dir02/ file01 file03 file05
dir01/ dir03/ file02 file04
% daemon -u [ここでタブキーを押すとユーザ名が補完表示される]
_dhcp bind daichi kmem news polkit sasaki test uucp
_pflogd cups games mailnull nobody pop smmsp test2 www
avahi cyrus gdm man operator proxy sshd toor
bin daemon haldaemon messagebus ozawa root takasyou tty
これだけの設定でオプション補完、オプションの引数補完、補完されたコマンドに対しての補完機能が有効になるわけだ。これらの設定は、ほかのコマンドにも適用できる典型的な設定パターンなので覚えておくと便利だ。
重宝するコマンドであっても、使っていなければオプションは忘れるものだ。そういうときはマニュアルを見るわけだが、なかなか面倒くさい。そこでzshの補完機能を活用しよう。
よく使うオプションをあらかじめオプション補完設定として設定しておく。そうすれば「-タブキー」でそれらオプションが表示されるというわけだ。これはクセになるほど便利な機能である。
とはいっても、補完機能を使ってToDoリストを作成するとか、そういった意味があるのか無いのか不明なこともできるし、応用範囲は広い。とりあえず補完設定が用意されていないコマンドがあれば、どんどん設定しよう。
| 深海底の熱水ヒントに“ナノ・エマルション”生成 [17:35 5/20] |
| JAEA、世界最高クラスのスピン偏極率をもった陽電子ビームの開発に成功 [16:11 5/20] |
| 【レポート】千葉高校生が快挙! 日本人初の部門最優秀賞受賞! - ISEF 2013 [11:59 5/20] |
| アシアル、モバイルアプリデベロッパー動向レポートの日本語版を公開 [11:36 5/20] |
| 【レポート】いよいよ審査! 密閉空間で1000人の審査員を迎えた代表8人--Intel ISEF 2013 [10:41 5/20] |
|
(知り合って間もなく)「かわいいですね」【女性の恋愛心理】 [07:00 5/21] 恋愛・結婚 |
|
東京都・吉祥寺で食べ&飲み歩きの「吉祥寺バル祭り」。4軒巡りで3,500円~ [07:00 5/21] ライフ |
|
【連載】ずっと独身でいるつもり? 第38回 選ばれない女になりたくない [07:00 5/21] 恋愛・結婚 |
|
Yahoo!がTumblrを11億ドルで買収 - 独立事業としてサービス継続 [06:32 5/21] パソコン |
|
[X JAPAN]メンバーそろえどフィギュアそろわず Toshl抜きで展示 [06:00 5/21] ホビー |