Previous: 接続ローカルなプロファイル, Up: 接続ローカル変数 [Contents][Index]
接続を認識するコードの記述時には接続ローカル変数を収集して、もしかしたらそれらを適用する必要があるでしょう。これを行うには以下のようにいくつかの方法があります。
この関数は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"))
この関数はcriteriaに対応する接続ローカル変数を探してカレントバッファーに即座に適用する。
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))
with-connection-local-variablesが適用されるデフォルトのアプリケーション(シンボル)。デフォルトはtrampだが、letバインドによって一時的にアプリケーションを変更できる(ローカル変数を参照)。
この変数をグローバルに変更してはならない。
これはwith-connection-local-application-variablesと同じだが、そのアプリケーションにたいしてconnection-local-default-applicationを使用する。
このマクロは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))))
setq-connection-localを通じて変数をセットする際に使用する接続ローカルプロファイル名(シンボル)。これはwith-connection-local-variablesのbody内でletバインドされているが、別のプロファイルで変数をセットしたければ自分でletバインドすることもできる。
この変数をグローバルに変更してはならない。
nilなら接続ローカル変数を無視する。この変数は特殊なモード内でのみ一時的に変更されるべきである。