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