When writing connection-aware code, you’ll need to collect, and possibly apply, any connection-local variables. There are several ways to do this, as described below.
This function collects applicable connection-local variables
associated with criteria in
connection-local-variables-alist
, without applying them.
Example:
(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"))
This function looks for connection-local variables according to criteria, and immediately applies them in the current buffer.
Apply all connection-local variables for application
, which are
specified by default-directory
.
After that, body is executed, and the connection-local variables are unwound. Example:
(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))
The default application, a symbol, to be applied in
with-connection-local-variables
. It defaults to tramp
,
but you can let-bind it to change the application temporarily
(see Local Variables).
This variable must not be changed globally.
This is equivalent to
with-connection-local-application-variables
, but uses
connection-local-default-application
for the application.
This macro sets each symbol connection-locally to the result of
evaluating the corresponding form, using the connection-local
profile specified in connection-local-profile-name-for-setq
; if
the profile name is nil
, this macro will just set the variables
normally, as with setq
(see Setting Variable Values).
For example, you can use this macro in combination with
with-connection-local-variables
or
with-connection-local-application-variables
to lazily
initialize connection-local settings:
(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))))
The connection-local profile name, a symbol, to use when setting
variables via setq-connection-local
. This is let-bound in the
body of with-connection-local-variables
, but you can also
let-bind it yourself if you’d like to set variables on a different
profile.
This variable must not be changed globally.
If nil
, connection-local variables are ignored. This variable
shall be changed temporarily only in special modes.