next up previous
Next: 2.3 プログラムのロード Up: 2 Emacs Previous: 2.1 Emacs Lisp

2.2 Emacsコマンドの定義

ユーザはhelloという関数を定義することができる. *scratch*バッファの中で
(defun hello nil
  (message "Hello!!!")) ;; ここの))まで入力した後C-jを打つ
hello       ;; これがその結果表示される.
(hello)     ;; 次にこれを入力すると
"Hello!!!"  ;; これが表示され,
          ;; ミニメッセージバッファにHello!!!が表意される
次に,helloの定義の最初のところでinteractiveという関数を 実行しておくと,M-x helloという具合にEmacsのコマンドとして 定義したことになる.
(defun hello nil
  (interactive)
  (message "Hello!!!"))
hello
(hello)
"Hello!!!"
たとえば,ファイルの中の丸をピリオドにすべて変換するコマンドを 定義したい場合の例として,次のようにmaru-piriというコマンド名の 定義を行い,

(defun maru-piri ()
  (interactive)
  (let ((pos (point)))
    (goto-line 1)
    (replace-string "。" "." nil)
    (goto-char pos)))
M-x maru-piriと実行するとバッファの中のすべての丸をピリオドへ変換する. interactive,point, goto-line, replace-string, goto-charなどはEmacs 用にすでに定義されている関数である. letについてはLisp標準の関数で局所変数を定義するためのもので, posという変数に(point)の計算結果を初期値として代入します. このようにEmacs Lispを用いることができると,便利なコマンドを各自で 定義して機能を拡張してゆくことができます. Clispを Emacs のコマンドとして利用できるように,

(defun clisp ()
  (interactive)
  (switch-to-buffer
   (make-comint
    "lisp" 
    "c:/cygwin/usr/local/clisp-2.28/lisp"
    nil
    "-M"
    "c:/cygwin/usr/local/clisp-2.28/lispinit.mem")))
という記述を.emacsに記述しておくと, M-x clispというコマンドによって,

i i i i i i i   ooooo   o      ooooooo   ooooo   ooooo
I I I I I I I  8     8  8         8     8     o  8    8
I  \ `+' /  I  8        8         8     8        8    8
 \  `-+-'  /   8        8         8      ooooo   8oooo
  `-__|__-'    8        8         8           8  8
      |        8     o  8         8     o     8  8
------+------   ooooo   8ooooo ooo8ooo   ooooo   8

Copyright (c) Bruno Haible, Michael Stoll 1992, 1993
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
Copyright (c) Bruno Haible, 
              Pierpaolo Bernardi, Sam Steingold 1998
Copyright (c) Bruno Haible, Sam Steingold 1999-2002

[1]>
という具合にバッファが表示される.

generated through LaTeX2HTML. M.Inaba 平成18年5月7日