[トップ] [更新履歴] [著書] [コンピュータ] [ゲーム] [CGI配布]
gnuclientを便利に使うためのラッパーを提供する。 gnuclientとはすでに起動しているemacsを使って外部からファイル編集命令をだしたり、elispを実行させるためのプログラム。 当然.emacsに
(gnuserv-start)
の一行を加えてgnuservを立ち上げる必要がある。
screenと共に使っているとき、
以下のフォームを.emacsに加える。
\C-c\C-cでバッファを保存して編集を終了するようにした。 一時的な編集なのでわざわざ確認をするまでもない。
また\C-x\C-cでも編集を終了するようにしている。 デフォルトでは\C-x#になっている。 デフォルトでemacsの終了に割り当てられているが、実際につこてみればここに割り当てる意味がわかってくるだろう(笑)。 *1
(setq screen-command "/usr/bin/screen")
(setq gnuserv-winconf nil)
(defun gnuserv-edit-finish ()
(interactive)
(and (buffer-modified-p)
(y-or-n-p (concat "Save file " (buffer-file-name) "?" ))
(save-buffer))
(condition-case nil
(gnuserv-edit)
(error (if buffer-read-only
(kill-buffer (current-buffer)))
(delete-frame)
nil))
(set-window-configuration gnuserv-winconf)
(with-temp-buffer
(insert-file-contents "~/.screen-gnuclient")
(unless (zerop (buffer-size))
(call-process screen-command nil nil nil "-X" "select" (buffer-string)))))
(defun finish-buffer ()
(interactive)
(if (gnuserv-buffer-p (current-buffer))
(gnuserv-edit-finish)
(when (buffer-file-name)
(and (buffer-modified-p)
(y-or-n-p (concat "Save file " (buffer-file-name) "?" ))
(save-buffer)))
(kill-buffer (current-buffer))))
(easy-mmode-define-minor-mode
gnuserv-edit-mode "" nil ""
'(("\C-c\C-c" . (lambda ()
(interactive)
(save-buffer)
(finish-buffer)))))
(defun gnuserv-find-file (file)
(interactive)
(setq gnuserv-winconf (current-window-configuration))
(find-file file)
(gnuserv-edit-mode t))
(setq gnuserv-find-file-function 'gnuserv-find-file)
(define-key ctl-x-map "\C-c" 'gnuserv-edit-finish)
*1そのときemacsはM-x save-buffers-kill-emacsで終了する。