[トップ] [更新履歴] [著書] [コンピュータ] [ゲーム] [CGI配布]


Title: gnuclientを便利に使おう

1 概要

gnuclientを便利に使うためのラッパーを提供する。 gnuclientとはすでに起動しているemacsを使って外部からファイル編集命令をだしたり、elispを実行させるためのプログラム。 当然.emacsに

(gnuserv-start)

の一行を加えてgnuservを立ち上げる必要がある。

2 必要なもの

3 Emacs側での設定

以下のフォームを.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)

4 ソースコード


戻る ホームページへ戻る

Valid XHTML 1.0!
rubikitch(rubikitch@ruby-lang.org)

投書箱:コメントや伝えたい情報などがあればお気軽にどうぞ
名前 メール [説明]
URL
本文


*1そのときemacsはM-x save-buffers-kill-emacsで終了する。