by shigemk2

当面は技術的なことしか書かない

バッファローカル変数

バッファローカル変数とは、バッファごとに値がことなる変数である。
バッファ固有の値を格納する場合に使われる。
setqしているのに別のバッファから見たら別の値になっているというのはままある話で、
バッファローカル変数の作り方を覚えておく。

  1. 常にバッファローカル変数と宣言する
  2. 通常はデフォルト値を使い、特定のバッファのみにローカルにする
(defvar lvar1 'global)
(defvar lvar2 nil)
(make-variable-buffer-local 'lvar2) ;; 変数を自動的にバッファローカル変数にする
(setq-default lvar2 'automatically-local) ;; 変数のデフォルト値を設定する
(with-temp-buffer
  (set (make-local-variable 'lvar1) 'local1) ;; 変数をバッファローカル変数にし、初期値を設定する
  lvar1					; => local1
  (default-value 'lvar1)		; => global
  lvar2					; => automatically-local
  (setq lvar2 1)
  lvar2					; => 1
  (setq-default lvar2 'automatically-local-modified)
  lvar2					; => 1
  (default-value 'lvar2)		; => automatically-local-modified
  )
lvar1					; => global
lvar2					; => automatically-local-modified
(with-temp-buffer
  lvar1					; => global
  lvar2					; => automatically-local-modified
  (setq lvar2 2)
  lvar2					; => 2
  )
lvar1					; => global
lvar2					; => automatically-local-modified

P102

Emacs Lispテクニックバイブル

Emacs Lispテクニックバイブル