Diredはファイルの名前にもとづいて、そのファイルに適用したいシェルコマンドの推測を試みます。たとえばfoo.tarという名前のファイルにポイントがあるときに!を押下すると、Diredは‘tar xvf’を実行したいのだろうと推測して、それをデフォルトのシェルコマンドとして提案します。
M-nをタイプすれば、編集用にそのデフォルトをミニバッファーに取り込むことができます。与えられたファイルにたいして複数のコマンドが存在する場合には、M-nを何回かタイプすることによってマッチするコマンドを順繰りに確認することができます。
Diredが推測を試みるコマンドは単一のファイルにたいしてであり、マークされたファイルのリストに推測を試みることはありません。
この変数は特定のファイルにたいして適切なシェルコマンドを推測するための、事前定義されたルールを指定します。これをnil
にセットすると推測は行いません。これらのルールはdired-guess-shell-alist-user
の要素(ユーザーが定義)によってオーバーライドされます。
この変数はdired-guess-shell-alist-default
と似ていますが、さまざまなメディアフォーマット用の外部のビューアーとプレイヤーを含む点が異なります。nil
にセットすれば推測はオフになります。変数dired-guess-shell-alist-user
とdired-guess-shell-alist-default
はこのルールをオーバーライドします。
この変数が非nil
なら、ファイルのregexpとそれらにたいする推奨コマンドからなるユーザー定義のalistを指定します。これらのルールはdired-do-shell-command
の実行時において変数dired-guess-shell-alist-default
とdired-guess-shell-alist-optional
に事前定義されたルールより優先されます。デフォルトはnil
です。
alistの要素はそれぞれ以下のような形式です
(regexp command...)
ここでcommandは文字列、あるいは文字列に評価されるLisp式です。コマンドが複数与えられた場合には、一時的にそれらのコマンドすべてがヒストリーに追加されます。
シェルコマンド内の‘*’は、regexpにマッチしたファイルの名前を意味します。Emacsがcommandを呼び出す際に、‘*’はそれぞれマッチしたファイル名によって置き換えられます。
‘.foo’および‘.bar’というファイル拡張子にたいするルールを追加するには、以下をinitファイルに追加してください:
(setq dired-guess-shell-alist-user (list (list "\\.foo$" "foo-command") ; 固定ルール ;; possibly more rules... (list "\\.bar$" ; 条件テスト付きルール '(if condition "bar-command-1" "bar-command-2"))))
同じ拡張子にたいする事前定義されたルールは、すべて上記ルールによって置き換えられます。
他にもM-x customize-group RET dired-guess RETで他のユーザーオプションを確認することができます。