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 (とりあえず暇だったし何となく始めたブログ)