2016-11-01 3 views
0

バッファローカル変数を別のバッファでどのように処理できますか?私はletとバインドできると思っていましたが、変数をsymbol-valueを使用する別の関数に渡すのに問題があります。ここで私はそうformat-funは別のバッファでそれを処理することができfunlocal-varをバインドするにはどうすればよい、別のバッファでバッファローカル変数の値を使用する

(defvar-local local-var nil) 
(setq local-var "a") 

(defun fun() 
    (let ((local-var local-var)) 
    (with-temp-buffer 
     (format-fun 'local-var) 
     (message (buffer-string))))) 

(defun format-fun (name) 
    (insert (symbol-value name))) 

小さな例ですか?

答えて

2

letで変数をバインドしても、バッファを切り替えるときに変数が再割り当てされることはありません。

これを避けるには、別の変数を使用します。

(defun fun() 
    (let ((new-var local-var)) 
    (with-temp-buffer 
     (format-fun 'new-var) 
     (message (buffer-string))))) 
+0

私は私の機能を試してみましたが、それがうまく働きました。私はEmacs 22を使用しているので、 'defvar-local'はありませんが、' make-local-variable'を使って行いました。 – Barmar

+0

ソリューションがどのように役立つかわかりません。同じ変数を2回バインドすると、最初のバインディングがシャドウされます。 – Barmar

+0

値が 'nil'の場合、'(insert(symbol-value name)) 'がエラーになるので' format-fun'を変更する必要がありました。 '(insert(format"%s "(symbol-value name)))' – Barmar

3

のelisp関数は、別のバッファからバッファローカル変数の値を取得することがあります:

(buffer-local-value 'var (get-buffer "your-buffer-name")) 
関連する問題