12.14.2 Применение переменных, локальных для подключения

При написании кода, учитывающего подключение, вам потребуется собирать и, возможно, применять переменные, локальные для подключения. Существует несколько способов сделать это, как описано ниже.

Функция: hack-connection-local-variables критерии

Эта функция собирает применимые переменные, локальные для подключения, связанные с критериями, в 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"))
Функция: hack-connection-local-variables-apply критерии

Эта функция ищет переменные, локальные для подключения, в соответствии с критериями и немедленно применяет их в текущем буфере.

Макрос: with-connection-local-application-variables приложение &rest тело

Применяет все переменные, локальные для подключения, для приложения, которые заданы default-directory.

После этого выполняется тело, а переменные, локальные для подключения, отменяются. Пример:

(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))
Переменная: connection-local-default-application

Приложение по умолчанию (символ), применяемое в with-connection-local-variables, connection-local-p и connection-local-value. По умолчанию это tramp, но вы можете локально привязать эту переменную, чтобы временно изменить приложение (см. Локальные переменные).

Эта переменная не должна изменяться глобально.

Макрос: with-connection-local-variables &rest тело

Это эквивалентно with-connection-local-application-variables, но для приложения используется connection-local-default-application.

Макрос: setq-connection-local [символ форма]…

Этот макрос устанавливает каждый символ локально для подключения в результат вычисления соответствующей формы, используя профиль, локальный для подключения, указанный в connection-local-profile-name-for-setq; если имя профиля равно 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))))
Переменная: connection-local-profile-name-for-setq

Имя профиля, локального для подключения (символ), используемое при установке переменных через setq-connection-local. Эта переменная локально привязывается в теле with-connection-local-variables, но вы также можете привязать её самостоятельно, если хотите устанавливать переменные для другого профиля.

Эта переменная не должна изменяться глобально.

Макрос: connection-local-p символ &optional приложение

Этот макрос возвращает не nil, если символ имеет привязку, локальную для подключения, для приложения. Если приложение равно nil, используется значение connection-local-default-application.

Макрос: connection-local-value символ &optional приложение

Этот макрос возвращает значение, локальное для подключения, для символа в приложении. Если приложение равно nil, используется значение connection-local-default-application.

Если символ не имеет привязки, локальной для подключения, возвращается стандартная привязка переменной.

Переменная: enable-connection-local-variables

Если равно nil, переменные, локальные для подключения, игнорируются. Эта переменная должна изменяться временно только в специальных режимах.