Previous: , Up: 接続ローカル変数   [Contents][Index]


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

接続を認識するコードの記述時には接続ローカル変数を収集して、もしかしたらそれらを適用する必要があるでしょう。これを行うには以下のようにいくつかの方法があります。

Function: hack-connection-local-variables criteria

この関数はconnection-local-variables-alist内のcriteriaに関連する適用可能な接続ローカル変数を適用することなく収集する。たとえば:

(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"))
Function: hack-connection-local-variables-apply criteria

この関数はcriteriaに対応する接続ローカル変数を探してカレントバッファーに即座に適用する。

Macro: 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))
Variable: connection-local-default-application

with-connection-local-variablesが適用されるデフォルトのアプリケーション(シンボル)。デフォルトはtrampだが、letバインドによって一時的にアプリケーションを変更できる(ローカル変数を参照)。

この変数をグローバルに変更してはならない。

Macro: with-connection-local-variables &rest body

これはwith-connection-local-application-variablesと同じだが、そのアプリケーションにたいしてconnection-local-default-applicationを使用する。

Macro: setq-connection-local [symbol form]…

このマクロはconnection-local-profile-name-for-setqで指定された接続ローカルプロファイルを用いて、それぞれのsymbolを対応するformを評価した結果に接続ローカルでバインドする。接続ローカルプロファイルの名前がnilの場合には、このマクロはsetqが行うような通常の方法によって変数をセットする(変数の値のセットを参照)。

たとえば接続ローカルなセッティングの初期化を遅延させるには、このマクロを以下のようにwith-connection-local-variableswith-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))))
Variable: connection-local-profile-name-for-setq

setq-connection-localを通じて変数をセットする際に使用する接続ローカルプロファイル名(シンボル)。これはwith-connection-local-variablesのbody内でletバインドされているが、別のプロファイルで変数をセットしたければ自分でletバインドすることもできる。

この変数をグローバルに変更してはならない。

Variable: enable-connection-local-variables

nilなら接続ローカル変数を無視する。この変数は特殊なモード内でのみ一時的に変更されるべきである。