Emacs

言わずと知れたEmacs。私は、FreeBSD上で EmacsとXEmacs, Windows上で Meadowを利用している。
仕事の関係でJavaを使うことが多いのだが、Beanのsetterとgetterを生成するコマンドを作成して見た。はじめて書いた emacs lisp なので、エラー処理とか全然なし。
(defun insert-accessor (type name longname)
  (setq capitalName (concat (upcase (substring name 0 1)) (substring name 1 nil)))
  (insert-string (concat "
    /**
     * " longname "を設定する。
     * @param " name " " longname " 
     */
    public void set" capitalName "(" type " " name ") {
        this." name " = " name ";
    }

    /**
     * " longname "を取得する。
     * @return " longname "
     */
    public " type " get" capitalName "() {
        return " name ";
    }
"))
)

(defun insert-accessor-region ()
  (interactive)
  (setq text (car kill-ring))
  (while (not (eq text nil))
    (setq p (+ (string-match "\n" text) 1))
    (setq l (substring text 0 p))
    (setq text (substring text p nil))
    (string-match " */\\*+ *\\([^ ]*\\) *\\*/" l)
    (setq longname (match-string 1 l))
    (setq p (+ (string-match "\n" text) 1))
    (if (eq p nil) (setq p (- (length text) 1)))
    (setq l (substring text 0 p))
    (setq text (substring text p nil))
    (string-match ".* \\([^ ]*\\) +\\([^ ]*\\)[=; ]" l)
    (setq type (match-string 1 l))
    (setq name (match-string 2 l))
    (insert-accessor type name longname)
    )
)
(global-set-key "\C-ca" 'insert-accessor-region)
これを.emacsなどに書き、
    /** 社員番号 */
    private Integer empNo;
    /** 名前 */
    private String name;
のような部分をコピーバッファに入れ、setter, getter を挿入したい場所にカーソルを移動してから、C-c a を入力すると、そこに挿入される。
手抜きプログラムなので、必ず偶数行をコピーバッファに入れることと、上記の形になっていること。そうでないとうまく動作しない。
false@wizard-limit.net