emacs lisp
Table of Contents
マニュアル(日本語訳)
- GNU Emacs Lispリファレンスマニュアル
- GNU Emacs Lispマニュアル 2.5版 (GNU Emacs 20.3版に対応)
- GNU Emacs Lispリファレンスマニュアル
- GNU Emacs Lispマニュアル 2.9版 (GNU Emacs 21.3版に対応)
関数
setq
- 変数に値を代入する
- (厳密には関数ではなく、特殊形式: special form らしい)
car
- リストの先頭要素を示す
cdr
- リストの残り(リストの最初の要素に続くもの)を示す
カーソル位置関連
(point) (what-cursor-position) (line-number-at-pos) (current-column)
事例
バッファ名を変数に格納
(setq current-buffer-name (car (split-string (buffer-name) "<")))
カレントバッファを書き込み可能にし開きなおす
(defun write-enable-file ()
"chmod +w and kill-buffer and find-file"
(interactive)
(unless (equal buffer-file-name nil)
(setq target-buffer-file-name (buffer-file-name))
(setq target-point (point))
(setq target-window-start (window-start (get-buffer-window)))
(chmod buffer-file-name 755)
(kill-buffer (buffer-name))
(find-file target-buffer-file-name)
(goto-char target-point)
(set-window-start (get-buffer-window) target-window-start)
)
)
(define-key ctl-x-map "w" 'write-enable-file)
カレントバッファを開きなおす(kill-bufferしfind-fileする)
(defun kill-buffer-and-find-file () "kill-buffer and find-file" 上記と同じ、(chmod buffer-file-name 755) のみ除き、他は同じ )
メモ
- ほとんどの基本関数は、呼び出すときにすべての引数を評価します。引数すべてを評価しない基本関数をスペシャルフォーム(special form)と呼びます
- 関数(function)という用語で、 LispやCで書かれたEmacsのすべての関数を指します。 Lispで書いた関数に関しては、See section 関数型。
- 基本関数には入力構文はなく、サブルーティン名を含むハッシュ記法で表示します。
(symbol-function 'car) ; シンボルの関数セルを参照する
=> #<subr car>
(subrp (symbol-function 'car)) ; 基本関数か?
=> t ; そのとおり
(defun hoge-test-func-prev1 ()
""
(interactive)
(prog1
(save-current-buffer
(save-selected-window
(with-current-buffer (get-buffer-create "*hoge-test*"))
# (setq buf (get-buffer "*hoge-test*"))
# (setq win (get-buffer-window buf))
# (set-buffer buf)
# (select-window win)
(pop-to-buffer (get-buffer "*hoge-test*"))
(insert "test")
))))
(defun hoge-test-func ()
""
(interactive)
(prog1
(save-current-buffer
(save-selected-window
# (start-process "my-process" "*hoge-test*" "ls" "" (buffer-name))
(start-process-shell-command "my-process" "*hoge-test*" "rm" "-i" "tmp.txt")
(pop-to-buffer "*hoge-test*")
(setq ans (read-from-minibuffer "よろしいですか?[y on n]:") )
(process-send-string "*hoge-test*" (concat ans "¥n"))
(if (string-equal ans "y") (message "削除しました") (message "削除しませんでした"))
;(if (eq (process-status (get-process "my-process")) 'exit)
# (kill-buffer "*hoge-test*"))
))))
参考
- Top - 環境設定のための Emacs Lisp 入門 (プログラマーズ雑記帳)
- Emacs Lisp によるプログラミング – 基本関数 car, cdr, cons (とりあえず暇だったし何となく始めたブログ)