2 (easy-mmode-define-minor-mode exopen-mode
3 "外部プログラムでファイルを開くためのマイナーモード。"
9 '(("\C-x\C-\M-f" . exopen-find-file)))
11 ;; exopen-cmd: OSまたはWindowsシステムで設定された
12 ;; 関連付けをもとにファイルを開くプログラムコマンド
13 (defvar exopen-cmd nil)
15 ;; OS別にexopen-cmdを設定する
18 ((eq system-type 'gnu/linux) "xdg-open")
19 ((eq system-type 'darwin) "open")
20 ((eq system-type 'windows-nt) "cmd.exe /c start")))
24 ;;; exopen-cmdで指定されたプログラムを使用。
25 ;;; Mac OS Xではopen、Linux
26 (defun exopen-file (file &optional program)
27 "Open file with external program"
29 (setq program exopen-cmd))
30 (let ((process-connection-type nil))
31 (start-process "external open" nil program file)))
33 ;;; バッファで開いているファイルを外部プログラムでオープン
34 (defun exopen-buffer-file ()
35 "Open the buffer file with external program"
38 (exopen-file buffer-file-name)
39 (error "This buffer is not visiting a file")))
41 ;;; 指定したファイルと同名で拡張子が異なるファイルを外部プログラムでオープン
42 (defun exopen-buffer-file-suffix (suffix)
43 "Open the buffer file of other extension with external program"
45 (if (not buffer-file-name)
46 (error "This buffer is not visiting a file"))
47 (setq myfile (concat (file-name-sans-extension (buffer-file-name)) suffix))
48 (if (file-exists-p myfile)
50 (error (concat myfile ": file not found")))))
52 ;;; 指定したファイルと同名のPDFファイルを外部プログラムでオープン
53 (defun exopen-buffer-pdffile ()
54 "find .pdf file and open program associated by OS"
56 (exopen-buffer-file-suffix ".pdf"))
58 ;;; 指定したファイルと同名のDVIファイルを外部プログラムでオープン
59 (defun exopen-buffer-dvifile ()
60 "find .dvi file and open program associated by OS"
62 (exopen-buffer-file-suffix ".dvi"))
64 ;;; バッファファイルと同名のHTMLファイルを外部プログラムでオープン
65 (defun exopen-buffer-htmlfile ()
66 "find .html file and open program associated by OS"
68 (exopen-buffer-file-suffix ".html"))
70 ;;; 指定したファイルを外部プログラムでオープン
71 (defun exopen-find-file()
72 "find-file and open with external program"
75 (setq file (read-file-name "Find external open file: " buffer-file-name))
77 (exopen-file (expand-file-name file))
78 (error "file not found"))))
80 ;;; dired-modeからファイルやディレクトリーを開く
81 (add-hook 'dired-mode-hook
84 ;; カーソル下のファイルやディレクトリーを関連付けられたプログラムで開く
85 (defun dired-exopen-file ()
86 "Open the current file with external program"
88 (exopen-file (dired-get-filename)))
90 ;; 現在のディレクトリーを関連付けられたプログラムで開く
91 (defun dired-cd-exopen ()
92 "Open current directory with external program"
94 (exopen-file (expand-file-name dired-directory)))
96 (define-key dired-mode-map (kbd "R") 'dired-exopen-file)
97 (define-key dired-mode-map (kbd "C-c .") 'dired-cd-exopen))))