2017/02/18

emacsをWindowsシェルとして使う Excelを開いたりファイル名をクリップボード転送できるとすごく便利

はじめに

筆者は長年のemacs使いです。

emacsはテキストエディタですが、多種多様なことができ、とても単純にテキストエディタの部類に入るのかはチョット分かりませんが、Windowsで使うにはそこそこ使いにくさがあり、色々と投稿していきたいと思います。


emacsをWindowsシェルとして使う意味

emacsではdiredというWindowsのエクスプローラのように、フォルダツリーをたどる機能が内蔵されています。

そんなのエクスプローラでいいじゃんという話もあるのですが、非常に高速に動作するので、一度使い慣れると早々手放したくありません。

で、フォルダツリーをたどれるわけですから、とうぜん色々開いてみたいです。

当然テキストファイルは見れます。画像ファイルも見れます。zipの中身も見れます。

でも、excelファイルやwordファイルはそのままではバイナリーデータと認識されるため見れません。

筆者にとっては非常に残念な内容でしたが、設定出来ることがわかりました。


emacsからexcel起動の設定

Windowsのemacsでは、設定ファイルは%APPDATA%フォルダ以下の.emacs.d\init.elに設定します。

以下のコードを、init.elに追加してください。


FileName %APPDATA%\.emacs.d\init.el
;; ファイルをWindowsの関連付けで開く
(add-hook 'dired-load-hook (function (lambda ()
    (define-key dired-mode-map "w" 'dired-open-file)
)))
(defun dired-open-file ()
  "In dired, open the file named on this line."
  (interactive)
    (message "WindowsOpening %s..." (dired-get-filename))
    (w32-shell-execute "open" (dired-get-filename))
    (message "WindowsOpening %s done" (dired-get-filename))
   )

過去に次のようなcmd.exeにて起動する記事を書いておりましたが、こちらだと、フォルダ中に"("などのファイルがあった場合、正常に起動出来ない現象が見られました。

前述のw32-shell-executeの方式ですとこのような不具合はありませんので、こちらの方式のほうが良いです。

(call-process "cmd.exe" nil 0 nil "/c" "start" "" (convert-standard-filename file) )

これだけで、dired上より、対象ファイルにカーソルをあわせ、「w」キーを押せばWindowsの機能にてファイルが開かれます。

あ、ここまで書いてて思ったのですが、Excelやwordには読み込みのみ起動ができますので、そのモードでの起動も設定するといいかもしれませんね。


emacsでファイル名をクリップボードに転送

emacsのdiredは高速なので、指定したファイルのファイル名フルパスをクリップボードに設定すれば、例えばメーラーなどで添付ファイルに指定する場面で、クリップボード経由で効率よく入力が可能です。

先程のinit.elに追加していきます。以下のdired-fullpath-clipboad()がクリップボード編集の本体ですが、これをdired画面上で、Wキーを押したときにコールするように設定しています。

(add-hook 'dired-load-hook (function (lambda ()
    (define-key dired-mode-map "w" 'dired-open-file)
    (define-key dired-mode-map "W" 'dired-fullpath-clipboard)
)))
(defun dired-open-file ()
  "In dired, open the file named on this line."
  (interactive)
    (message "WindowsOpening %s..." (dired-get-filename))
    (w32-shell-execute "open" (dired-get-filename))
    (message "WindowsOpening %s done" (dired-get-filename))
   )
(defun dired-fullpath-clipboard ()
  "In dired, open the file named on this line."
  (interactive)
    (kill-new (convert-standard-filename (dired-get-filename)))
    (message "clipboard %s" (convert-standard-filename (dired-get-filename)))

どうでしたか?emacsのdiredはかなり高速ですので、いろいろと便利になるのではないかと思います。時間短縮が言われるの世の中、しっかり効率化で対応できると良いですね。それでは。

0 コメント:

コメントを投稿