2016年8月4日木曜日

Emacsからゴミ箱へ

 Emacsからファイルを削除してゴミ箱にはいるなんて必要ないや、と思っていたらそのような案件が発生した。Emacsでdeleteして復活させたくなったのだ。
 これはいかん。
 というわけで下記のように設定した。

(setq delete-by-moving-to-trash t)

 ところがMacでは次のメッセージをだしてうまくいかなかった。
 あれ?

ls does not support --dired; see `dired-use-ls-dired' for more details.

 どうやらCocoaEmacsではネイティブにはサポートされてないらしい。
 emacswikiでやり方を見つけた。

(setq delete-by-moving-to-trash t)

(defun system-move-file-to-trash (file)
  "Use \"trash\" to move FILE to the system trash.
When using Homebrew, install it using \"brew install trash\"."
  (call-process (executable-find "trash")
  nil 0 nil
  file))

 このやり方だとHomeBrewからtrashというコマンドをインストール必要がある。——「brew install trash」。
 それにしても「system-move-file-to-trash」を定義するだけで行くのはどうしてだろう、と思ってelispをあさってみたら

6 matches for "system-move-file-to-trash" in buffer: files.el.gz
   6796:This directory is only used when the function `system-move-file-to-trash'
   6806:(declare-function system-move-file-to-trash "w32fns.c" (filename))
   6814:If the function `system-move-file-to-trash' is defined, call it
   6841: ;; If `system-move-file-to-trash' is defined, use it.
   6842: ((fboundp 'system-move-file-to-trash)
   6843:  (system-move-file-to-trash filename))

 ということで、Windowsの場合はCで書かれた「system-move-file-to-trash」がバンドルされるらしい。