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)"

使う

例えば mozex で使う場合は

windows(meadow) の場合
  • Edit textbox in UTF-8 を ON にしておく
  • Text editor に以下を設定
c:\WINDOWS\system32\wscript.exe C:\path\to\gnudoit-temp-file.js %t utf-8
unix の場合
  • Edit textbox in UTF-8 を ON にしておく
  • Text editor に以下を設定
/path/to/gnudoit-temp-file.sh %t utf-8