GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Applying-Connection-Local-Variables.html ・ emacs-doc.conao3.com

12.14.2 接続ローカル変数の適用

コネクションを意識したコードを記述する際は、コネクションローカルな変数を収集し、必要に応じて適用する必要があります。これを実現する方法はいくつかあり、以下に説明します。

関数: hack-connection-local-variables criteria

この関数は、criteria に関連付けられた適用可能な接続ローカル変数を、適用することなく connection-local-variables-alist に収集します。例:

(hack-connection-local-variables
  '(:application tramp :protocol "ssh" :machine "localhost"))

connection-local-variables-alist
     ⇒ ((null-device . "/dev/null")
        (shell-login-switch . "-l")
        (shell-interactive-switch . "-i")
        (shell-command-switch . "-c")
        (shell-file-name . "/bin/bash"))
関数: hack-connection-local-variables-apply criteria

この関数は criteria に従って接続ローカル変数を検索し、現在のバッファに即座に適用します。

マクロ: with-connection-local-application-variables application &rest body

default-directory で指定された application に対するすべての接続ローカル変数を適用します。

その後、body が実行され、接続ローカル変数がアンワインドされます。 例:

(connection-local-set-profile-variables
  'my-remote-perl
  '((perl-command-name . "/usr/local/bin/perl5")
    (perl-command-switch . "-e %s")))

(connection-local-set-profiles
  '(:application my-app :protocol "ssh" :machine "remotehost")
  'my-remote-perl)

(let ((default-directory "/ssh:remotehost:/working/dir/"))
  (with-connection-local-application-variables 'my-app
    do something useful))
変数: connection-local-default-application

with-connection-local-variables、connection-local-p、connection-local-value で適用されるデフォルトのアプリケーション(シンボル)。デフォルトは tramp ですが、let-bind することで一時的にアプリケーションを変更できます(ローカル変数 を参照)。

この変数をグローバルに変更してはなりません。

マクロ: with-connection-local-variables &rest body

これは with-connection-local-application-variables と同等ですが、適用には connection-local-default-application を使用します。

マクロ: setq-connection-local [symbol form]…

このマクロは、connection-local-profile-name-for-setqで指定されたコネクションローカルプロファイルを用いて、各symbolコネクションローカルを対応するformの評価結果に設定します。プロファイル名がnilの場合、このマクロはsetqと同様に、通常通り変数を設定します(変数値の設定を参照)。

例えば、このマクロを with-connection-local-variables や with-connection-local-application-variables と組み合わせて使用することで、接続ローカル設定を遅延初期化できます:

(defvar my-app-variable nil)

(connection-local-set-profile-variables
 'my-app-connection-default-profile
 '((my-app-variable . nil)))

(connection-local-set-profiles
 '(:application my-app)
 'my-app-connection-default-profile)

(defun my-app-get-variable ()
  (with-connection-local-application-variables 'my-app
    (or my-app-variable
        (setq-connection-local my-app-variable
                               do something useful))))
変数: connection-local-profile-name-for-setq

setq-connection-local 経由で変数を設定する際に使用する、シンボル形式の接続ローカルプロファイル名。これは with-connection-local-variables の本体内で let 束縛されていますが、別のプロファイルで変数を設定したい場合は、自身で let 束縛することも可能です。

この変数をグローバルに変更してはなりません。

マクロ: connection-local-p symbol &optional application

このマクロは、symbol が application に対して接続ローカルバインディングを持つ場合、nil 以外の値を返します。application が nil である場合は、connection-local-default-application の値が使用されます。

マクロ: connection-local-value symbol &optional application

このマクロは、application に対する symbol の接続ローカル値を返します。application が nil の場合は、connection-local-default-application の値が使用されます。

symbol に接続ローカルバインディングがない場合、値は変数のデフォルトバインディングとなります。

with-connection-local{-application}-variablesとの違いは、symbolがバッファローカルに設定されない点です。典型的な使用パターンとしては、変数の接続値が存在する場合にのみそれを使用し、そうでない場合はデフォルト値を使用するというものです(上記で初期化したmy-app-variableを使用):

(if (connection-local-p my-app-variable 'my-app)
    (connection-local-value my-app-variable 'my-app)
  ;; Something else.
  )
変数: enable-connection-local-variables

nil の場合、connection-local 変数は無視されます。この変数は、特殊なモードにおいてのみ一時的に変更されるものとします。