意識の高いLISPマシン

藤原惟/すかいゆき(@sky_y)の技術用ブログ

Emacs小ネタ: ファイル名の上にポインタ動かしてC-c oするとファイル開いたりdiredに飛べるようにする

Emacselispいじっているときに

  • "hoge.el" みたいなファイルを同じEmacsで開いたり
  • "~/Dropbox/fuga" みたいなディレクトリをdiredで開いたり

したいときってありますよね。

そういうときのために、設定を書いてみました。
(参考:Emacs, Mac OS X and Unix: EmacsのバッファやDiredでカーソル位置のファイル(URL)をFinder(ウェブブラウザ)で開く

;; Open the file name being pointed in an other window or dired
;; reference: http://kouzuka.blogspot.com/2011/02/emacsurlfinder.html
(defun my-directory-or-file-p (path)
  "return t if path is a directory,
return nil if path is a file"
  (car (file-attributes path)))

(defun my-open-emacs-at-point ()
  "open the file with opening emacs"
  (interactive)
  (require 'ffap)
  (let ((file (or (ffap-url-at-point)
                  (ffap-file-at-point))))
    (unless (stringp file)
      (error"No file or URL found"))
    (when (file-exists-p (expand-file-name file))
      (setq file (expand-file-name file)))
    (message "Open: %s" file)

    (if (my-directory-or-file-p file)
      (dired-other-window file)
      (find-file-other-window file))
    
    ))

(global-set-key (kbd "\C-c o") 'my-open-emacs-at-point)

;; double click
(global-set-key [double-mouse-1] 'my-open-emacs-at-point)
(global-set-key [double-down-mouse-1] 'ignore) ; mouse-drag-region

長いので、gistにも載せておきます。

Emacs: Open the file which filename is pointed in an other window or dired

補足

my-directory-or-file-p 関数は、ディレクトリだったらtを、ファイルだったらnilを返します。

(単純に file-attributes 関数の返すリストの要素1個目を返しているだけですが。)