unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* server-local variables
@ 2016-10-30 18:39 Michael Albinus
  2016-10-30 20:08 ` Eli Zaretskii
  2016-10-31 12:39 ` Ted Zlatanov
  0 siblings, 2 replies; 28+ messages in thread
From: Michael Albinus @ 2016-10-30 18:39 UTC (permalink / raw)
  To: emacs-devel

Hi,

a long standing wishlist for Tramp are server-local (sometimes called
connection-local) variables. It was expressed for the first time in
<https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3736#35>, but there are
more discussions about in bug reports and discussions on emacs-devel and
tramp-devel.

I'm playing with a small patch for files.el, which provides a mechanism
similar to directory-local variables. Most important are the following
functions:

--8<---------------cut here---------------start------------->8---
server-locals-set-class is a compiled Lisp function in
‘../../../src/emacs/lisp/files.el’.

(server-locals-set-class REGEXP CLASS)

Add CLASS for remote servers.
REGEXP is a regular expression identifying remote servers, a string.
CLASS is the name of a project class, a symbol.

When a connection to a remote server is opened, the
server-specific variables from CLASS are applied to the
corresponding process buffer.  The variables for a class are
defined using ‘server-locals-set-class-variables’.
--8<---------------cut here---------------end--------------->8---

--8<---------------cut here---------------start------------->8---
server-locals-set-class-variables is a compiled Lisp function in
‘../../../src/emacs/lisp/files.el’.

(server-locals-set-class-variables CLASS VARIABLES)

Map the symbol CLASS to a list of variable settings.
VARIABLES is a list that declares server-local variables for the
class.  An element in VARIABLES is an alist whose elements are of
the form (VARIABLE . VALUE).

When a connection to a remote server is opened, the server’s
classes are found.  A server may be assigned a class using
‘server-locals-set-directory-class’.  Then variables are set in
the server’s process buffer according to the VARIABLES list of
the class.  The list is processed in order.
--8<---------------cut here---------------end--------------->8---

--8<---------------cut here---------------start------------->8---
hack-server-local-variables-apply is a compiled Lisp function in
‘../../../src/emacs/lisp/files.el’.

(hack-server-local-variables-apply)

Apply server-local variables for the server identified by ‘default-directory’.
Other local variables, like file-local and dir-local variables,
will not be touched.
--8<---------------cut here---------------end--------------->8---

With these functions, one could write the following code snippet,
pushing a server-local variable `some-useful-setting' for all remote
connections using the "sudo" method:

--8<---------------cut here---------------start------------->8---
(server-locals-set-class-variables
 'remote '((some-useful-setting . some-useful-value)))

(server-locals-set-class "^/sudo:" 'remote)

;; This must be applied in a buffer with remote `default-directory'.
(hack-server-local-variables-apply)
--8<---------------cut here---------------end--------------->8---

Comments?

Best regards, Michael.



^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2016-12-05 16:49 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-10-30 18:39 server-local variables Michael Albinus
2016-10-30 20:08 ` Eli Zaretskii
2016-10-30 20:28   ` Michael Albinus
2016-10-31  3:30     ` Eli Zaretskii
2016-10-31  9:54       ` Michael Albinus
2016-10-31 11:17         ` Phil Sainty
2016-10-31 12:45           ` Óscar Fuentes
2016-10-31 15:42           ` Michael Albinus
2016-10-31 20:15             ` Phil Sainty
2016-10-31 13:43         ` Stefan Monnier
2016-10-31 16:30           ` Michael Albinus
2016-10-31 12:39 ` Ted Zlatanov
2016-10-31 13:36   ` Stefan Monnier
2016-10-31 21:03     ` Drew Adams
2016-11-01  2:08       ` Stefan Monnier
2016-11-01  5:08         ` Drew Adams
2016-10-31 16:26   ` Michael Albinus
2016-10-31 17:31     ` Ted Zlatanov
2016-10-31 20:47       ` Michael Albinus
2016-11-01 13:22         ` Ted Zlatanov
2016-11-14 14:02           ` Michael Albinus
2016-11-15 15:02             ` GnuTLS per-connection variables (was: server-local variables) Ted Zlatanov
2016-11-24 12:50               ` GnuTLS per-connection variables Michael Albinus
2016-11-29 16:07                 ` Ted Zlatanov
2016-11-28 18:54               ` Michael Albinus
2016-12-05 15:09                 ` Michael Albinus
2016-12-05 16:27                   ` Ted Zlatanov
2016-12-05 16:49                     ` Michael Albinus

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).