Diredはファイルの名前にもとづいて、そのファイルに適用したいシェルコマンドの推測を試みます。たとえばfoo.tarという名前のファイルにポイントがあるときに!を押下すると、Diredは‘tar xvf’を実行したいのだろうと推測して、それをデフォルトのシェルコマンドとして提案します。
M-nをタイプすれば、編集用にそのデフォルトをミニバッファーに取り込むことができます。与えられたファイルにたいして複数のコマンドが存在する場合には、M-nを何回かタイプすることによってマッチするコマンドを順繰りに確認することができます。
Diredが推測を試みるコマンドは単一のファイルにたいしてであり、マークされたファイルのリストに推測を試みることはありません。
この変数は特定のファイルにたいして適切なシェルコマンドを推測するための、事前定義されたルールを指定します。これをnil
にセットすると推測は行いません。これらのルールはdired-guess-shell-alist-user
の要素(ユーザーが定義)によってオーバーライドされます。
This variable is like dired-guess-shell-alist-default
but contains
external viewers and players for various media formats. Setting this to
nil
turns guessing off. The variables
dired-guess-shell-alist-user
and
dired-guess-shell-alist-default
will override these rules.
If non-nil
, this variable specifies the user-defined alist of file
regexps and their suggested commands. These rules take precedence over the
predefined rules in the variables dired-guess-shell-alist-default
and
dired-guess-shell-alist-optional
when dired-do-shell-command
is run). The default is 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で他のユーザーオプションを確認することができます。