在编写感知连接状态的代码时,你需要收集(并可能需要应用)所有相关的连接局部变量。 具体有多种实现方式,下文将逐一说明。
该函数会收集与 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"))
该函数会根据 criteria(判定条件)查找对应的连接局部变量,并立即将其应用到当前缓冲区中。
为 application(应用程序)应用所有关联的连接局部变量,这些变量由 default-directory(默认目录)指定。
完成变量应用后,执行 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、connection-local-p 以及
connection-local-value 这些宏/函数中生效。其默认值为 tramp,
你可通过 let 绑定的方式临时修改该应用程序(详见see 局部变量)。
该变量禁止全局修改。
该宏的功能与 with-connection-local-application-variables 完全等价,
区别在于它会将 connection-local-default-application 作为默认应用程序使用。
该宏会将每个 symbol(符号)以 连接局部 的方式设置为对应 form(表达式)
求值后的结果,具体使用的连接局部配置文件由 connection-local-profile-name-for-setq 指定;
若该配置文件名的值为 nil,则此宏会像 setq 一样正常设置变量(详见see 修改变量值)。
例如,你可将该宏与 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 的代码体中会对该变量进行 let 绑定,
但如果你希望为其他配置文件设置变量,也可自行对该变量进行 let 绑定。
该变量禁止全局修改。
若 symbol(符号)针对 application(应用程序)存在连接局部绑定,
该宏会返回非 nil 的值。若 application 为 nil,
则使用 connection-local-default-application 的值。
该宏返回 symbol(符号)针对 application(应用程序)的连接局部值。
若 application 为 nil,则使用 connection-local-default-application 的值。
若 symbol 不存在对应的连接局部绑定,该宏会返回该变量的默认绑定值。
若该变量值为 nil,则连接局部变量会被忽略。此变量仅允许在特殊模式下临时修改。