タグ付けされた質問 「buffer-local」

1
`setq-local`は何をしますか、そしていつそれを使うべきですか?
ここでSXですべてのドキュメントと多数の投稿を読んだ後でも、バッファローカル変数のすべてのバリエーションについては明確ではありません。 私の理解の概要は次のとおりです。 (defvar foo ..)ファイルの動的変数を宣言します。ただし、変数は(1)defvar ステートメントも含まれていない限り、他のファイルには認識されません。(2)変数はバッファーローカルではなくスコープ内でグローバルです。 (make-variable-buffer-local foo)defvar上記は、変数fooが設定されている場合、変数fooが設定されているすべての場所でバッファローカルとして扱われることをコンパイラと他のすべての人に伝えた後です。そのため、このパターンは、バッファローカル変数を宣言するのに適したスタイルであり、ファイルに両方のステートメントを連続して配置します。 (defvar xxx ...) ;declare xxx with global scope (make-variable-buffer-local 'xxx) ;but now make it buffer-local everywhere 便宜上、(defvar-local xxx ...)フォームは上記の2行の代わりに1行として使用できます。 (defvar-local xxx ...) ;make xxx buffer local everywhere 上記のように宣言されると、変数xxxはsetqステートメントの他の変数と同様に使用できます。 既にグローバルダイナミック変数であるバッファローカル変数の単一のインスタンスが必要な場合は、次の宣言を使用します。最初のステートメントはグローバルスコープの動的変数を宣言し、2番目のステートメントはその変数のバッファーローカルバージョンのインスタンスを現在のバッファーに1つだけ作成します。 (defvar xxx ...) ;declare xxx with global scope (make-local-variable 'xxx) ;make xxx local …

1
任意の値に対して安全なローカル変数をマークする
変数にsafe-local-variable-valuesは、ファイルローカルまたはディレクトリローカルとして安全な名前/値のペアを格納できます。しかし、時々私が言いたいの任意の値が与えられた変数に対して有効です。私がリンクしたマニュアルページには、整数値はすべて安全であると考えられていますfill-column。私自身の変数に対してこれを行う方法はありますか?

1
バッファローカル変数を再びグローバルにする
私はローカル変数を試し、設定しました: (defvar-local foo nil "Buffer local foo") 私は後でプログラムを再設計して、代わりにグローバル変数を使用しました: (defvar foo nil "Not buffer local foo") しかし、変数はまだローカルなバッファで(kill-local-variable 'foo)あり、それを殺すことさえしませんでした。 基本的に、どうすれば「元に戻す」ことができmake-local-variableますか?

2
邪悪なマーカーを持続させる方法は?
emacsセッション/インスタンス間で、バッファーのローカルの悪質なマーカー(場所をマークしてから、「または」にジャンプするために 'または `)を保存できるようにしたいと思います。これを行う方法は本当にわかりません。セッションをインストール/使用して、それらを次のように追加してみました: (add-to-list 'session-locals-include 'evil-markers-alist) これは機能しません、そして私は他に何を試すかわかりません。ありがとう。

2
バッファローカル変数のデフォルト値は最初の `setq`まで設定されません
私がバッファローカル変数を定義し、fooそのデフォルト値が "a"であるとしましょう: (defvar foo "a") (make-variable-buffer-local 'foo) (default-value 'foo) ;; => "a" この直後に、次のコードを実行します。 (let ((foo "b")) (with-temp-buffer (message "foo: %s" foo))) ;; => "b" 結果は "b"です。これは、で設定した値letです。 setq変数の設定に使用する場合は、前とまったく同じコードを再実行します。 (setq foo "c") ;; => "c" (let ((foo "b")) (with-temp-buffer (message "foo: %s" foo))) ;; => "a" 結果は "a"で、これが現在のデフォルト値です。 質問:一時バッファの場合、のデフォルト値はfoo使用するまで設定されませんsetqか?そしてsetq、私が使用しない限りlet、他のバッファのデフォルト値を変更するために使用できますか? 編集:@npostavsが言ったように、これはmake-varible-buffer-local本当に意味することです。make-variable-buffer-local自分で使えば、setqその後いつでも使えます。しかし、これはのような「組み込み」のバッファローカル変数では本当にトリッキーになりますcase-fold-search。私がパッケージ作成者として外部でバインドcase-fold-searchし、でデフォルト値(ユーザーが設定したかどうかにかかわらず)を使用したい場合、デフォルト値が実際にあることを確認する前に使用する必要があります場合に使用されているユーザはそれを持っていない、彼/彼女に。バッファローカル変数の場合、おそらく、値を設定するときよりも常に安全であることを意味します。デザインやドキュメンテーションは改善できるのかしら。nilletwith-temp-buffersetqwith-temp-buffersetqinit.elsetqlet
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.