4
4

More than 5 years have passed since last update.

Emacs: Dired から拡張子を見て外部プログラムを起動する dired-win-exec.el

Last updated at Posted at 2018-03-24

Dired から拡張子を見て外部プログラムを起動する

Dired からファイルの拡張子によってそれぞれの外部コマンドを起動し、Dired をよりファイラー的に使えるようにする拡張です。

探せばありそうですが製作当初 Linux 用のものしか見当らなかったので自作しました。
Dired 自体にも以前はあった機能のようです。

ダウンロードとインストール

ここからダウンロードし、 load-path の通ったディレクトリに置き、init.el で以下のような行を書き、後で説明する拡張子とコマンドの関連付けを
変数 dired-win-exec-list に設定してください。
以下設定ではデフォルトの RETf のキーに割り当てられます。

sample.el
(require 'dired-win-exec)
(add-hook 'dired-mode-hook
          #'(lambda() (local-set-key [remap dired-find-file] 'dired-win-exec)))
;; (setq dired-win-exec-list ... 後述)

使い方

Dired でカーソルを置いたファイルで RET または f で起動します(上記で設定されたキー)。
マッチしなればいつも通り関数 find-file に渡され Emacs で開きます。

変数 dired-win-exec-list で拡張子とコマンドの紐付け

簡易な設定

ビルトインされた関数 dired-win-exec-open を使うと、ウィンドウズ側で関連付けされたコマンドが起動するので記述が大幅に楽にできます。

sample.el
(setq dired-win-exec-list
      '((("jpg" "png" "xcf" "gif" "bmp" "svg" "pdf" "html" "doc" "xls" "xlsm" "xlsx")
         dired-win-exec-open)))

より細やかに設定

基本は以下のように 拡張子とコマンドをリストで並べて書いていきます。
パスの区切は BackSlash でも大丈夫ですが、その場合2重にしてエスケープさせる必要があります。

sample.el
(setq dired-win-exec-list '(("png" "C:/Program Files/IrfanView/i_view32.exe")))

複数の拡張子

ひとつのプログラムに複数の拡張子を結びつけるにはリストにします。

sample.el
(setq dired-win-exec-list '((("png" "jpg" "gif") "C:/Program Files/IrfanView/i_view32.exe")))

複数のプログラム

プログラムもリストにして複数設定できます。
C-u RET 等と Prefix 付で起動すると起動させるプログラムを選ぶプロンプトが出ます。

sample.el
(setq dired-win-exec-list
      '((("png" "jpg" "gif") 
         ("C:/Program Files/IrfanView/i_view32.exe"
          "C:/Program Files/GIMP 2/bin/gimp-2.8.exe"))))

Emacs の関数

外部プログラムの代わりに Emacs の関数も書くことができます
.html のように Emacs 本体でも外部プログラムでも開きたいファイルの場合等に利用できます。

sample.el
(setq dired-win-exec-list
      (("html" "svg")
       (find-file
        "C:/Program Files/Google/Chrome/Application/chrome.exe")))

以上の要領で設定したい分だけこのリストをいくつも並べて書いていきます。
同じ拡張子なら先着順です。

sample.el
(setq dired-win-exec-list
      '((("png" "jpg" "gif") 
         ("C:/Program Files/IrfanView/i_view32.exe"
          "C:/Program Files/GIMP 2/bin/gimp-2.8.exe"
          find-file))
        (("xlsm" "xls" "xlsx")
         "C:/Program Files/Microsoft Office 15/root/office15/EXCEL.EXE")
        ("pdf" "C:/Program Files/Adobe/Acrobat Reader DC/Reader/AcroRd32.exe")
        以下設定したいだけ続く...))

その他の設定できる変数

dired-win-exec-default

dired-win-exec-list でマッチする拡張子がなかったときに最終的に渡される関数です。
デフォルトは find-file です。

dired-win-exec-select

dired-win-exec-list で複数のプログラムが設定された拡張子のとき、この変数が 非NIL だと選択プロンプトが必ず出るようになります。
デフォルトは nil で プレフィクス起動のときのみ選択プロンプトになります。

dired-win-exec-message

説明
nil コマンド起動メッセージを表示しない
'echo メッセージは表示するが *Messages* Buffer には記録しない(デフォルト)
その他 通常のメッセージ同様、表示をしメッセージバッファにも記録する

対応している Emacs のバージョン

GNU Emacs 25.3.1 (i686-w64-mingw32)
of 2017-09-18

起動メッセージの表示に関するオプションを追加しました

変数 dired-win-exec-message を追加しました。

使用頻度に対して意味もなくメッセージバッファを汚しすぎると思ったので、 不要だと一旦は削除したのですが、 初回起動のコマンドの場合起動が遅くフリーズしたようになるので、 この変数でコントロールできるようにしました。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4