gnudoit で一時ファイルを編集する
mozex や、EDITOR 環境変数に gnuclient を指定してる人は結構多いと思う。でも、こういう時って編集したら保存して kill-buffer するのが多いから、C-cC-c で保存と kill-buffer を一緒にしたいのが普通だとさっき思った。
そこで、こんなのを作ってみた。
やれる事は:
- ファイルを開く
- coding-system を指定してできる
- elscreen がある場合、同時に新しい screen を開く
- C-cC-c でファイルを保存と同時に kill-buffer
- 変更がなくても(空のバッファでも)保存する()
- touch してる事が前提の場合にうれしいはず
- elscreen がある場合、同時にその screen を閉じる
- 変更がなくても(空のバッファでも)保存する()
って思ったんだけど、やっぱ gnudoit じゃだめだった。考えてみたら、gnudoit だと関数実行したらプロセスがすぐに終わるから意味なかった。
ということで捨て。
一応 gnudoit の使い方として残しとくけど。
後で gnuserv で書き直して載せます。
emacs側の準備
まずはこれを .emacs に書いておく。
(defun server-edit-temp-file (file &optional coding-system) "Edit temp file from gnudoit." (let ((coding-system-for-read coding-system)) (if (fboundp 'elscreen-find-file) (progn (elscreen-find-file file) (elscreen-notify-screen-modification 'force-immediately)) (find-file file)) (local-set-key "\C-c\C-c" 'server-edit-temp-file-kill) (setq mode-line-buffer-identification (append mode-line-buffer-identification (list (propertize " [TEMP]" 'face 'mode-line-buffer-id)))))) (defun server-edit-temp-file-kill () "save and kill temp file from gnudoit." (interactive) (write-region (point-min) (point-max) (buffer-file-name) nil t) (kill-buffer (current-buffer)) (when (fboundp 'elscreen-kill) (elscreen-kill)))
スクリプトの準備
そして以下のファイルを作っておく
windows(meadow) の場合(gnudoit-temp-file.jsとして保存)
var shell = new ActiveXObject("WScript.Shell"); var args = WScript.Arguments var file = args.item(0); var cs = (args.length >= 2) ? "'" + args.item(1) : "nil" file = file.replace(/\\/g, "/"); shell.Run('gnudoit.exe -f (server-edit-temp-file """"' + file + '"""" ' + cs + ')', 0, false);
unix の場合(gnudoit-temp-file.shとして保存)
#!/bin/sh FILE=$1 CS=$2 if [ $CS ]; then CS="'"$CS; else CS=nil; fi gnudoit -f "(server-edit-temp-file \"$FILE\" $CS)"