51.2.6 接続ごとのローカル変数

ほとんどの変数はローカルマシンの状況を反映します。リモートのデフォルトディレクトリーをもつバッファー操作時には、それらの変数が異なる値を使用しなければならないときが時折あります。shellを呼び出す際の挙動について考えてみましょう。ローカルのマシンでは/bin/bashを使用してtermcapを用いるかもしれませんが、リモートのマシンでは/bin/kshとterminfoかもしれないのです。

これは接続ローカル変数(connection-local variables)で実現することができます。ディレクトリーローカル変数とファイルローカル変数は接続ローカル変数をオーバーライドします。安全ではない接続ローカル値は、安全でないファイルローカル値と同じ方法で扱われます(安全なファイル変数を参照してください)。

接続ローカル変数はconnection-local-set-profile-variables関数を使用して変数/値ペアのグループとしてプロファイル(profile)内に宣言されます。関数connection-local-set-profilesはリモートマシンを識別する与えられた条件にたいしてプロファイルをアクティブにします。

(connection-local-set-profile-variables 'remote-terminfo
   '((system-uses-terminfo . t)
     (comint-terminfo-terminal . "dumb-emacs-ansi")))

(connection-local-set-profile-variables 'remote-ksh
   '((shell-file-name . "/bin/ksh")
     (shell-command-switch . "-c")))

(connection-local-set-profile-variables 'remote-bash
   '((shell-file-name . "/bin/bash")
     (shell-command-switch . "-c")))

(connection-local-set-profiles
   '(:application tramp :machine "remotemachine")
   'remote-terminfo 'remote-ksh)

このコードではremote-terminforemote-kshそしてremote-bashという3つの異なるプロファイルを宣言しています。プロファイルremote-terminforemote-kshは、ホスト名がregexpの"remotemachine"にマッチするリモートのデフォルトディレクトリーをもつすべてのバッファーに適用されます。このような条件はプロパティ:protocol (Trampの手法)や:user (リモートユーザー名)も区別できます。nilという条件はリモートデフォルトディレクトリーをもつすべてのバッファーにマッチします。

同じ変数にたいして異なるプロファイルを宣言する際には、同時にマッチするかもしれない条件をプロファイルにセットしないように注意してください。その場合にはどちらの変数値が用いられるかは未定義です。

バッファーで接続ローカル変数をセットする際にも、その後にメジャーモードが変更されるので注意が必要です。メジャーモードを変更するとバッファーローカル変数はすべてkill されるので、接続ローカル変数の値も失われます。対応する変数のシンボルプロパティpermanent-localに非nilをセットして、これを防ぐことができます。

This page has generated for branch:work/emacs-30_69b16e5c63840479270d32f58daea923fe725b90, commit:5e3f74b56ff47b5bcef2526c70f53f749bbd45f6 to check Japanese translation.