[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Session management patch, please comment.

From: Kim F. Storm
Subject: Re: Session management patch, please comment.
Date: 19 Feb 2002 23:43:26 +0100
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2.50

"Jan D." <address@hidden> writes:

> >     + DEFUN ("x-sm-interact-done", Fx_sm_interact_done,
> Emacs is executing C code when this happens.  To get into lisp code, a
> save-yourself-event is generated and the lisp function bound to the
> event executes (handle-save-yourself).
> handle-save-yourself then executes functions in the save-yourself-hook
> and by calling x-sm-interact-done it finally informs the C code that
> it shall send the interaction-done message to the session manager.

What about this approach:

In C, you declare a hook variable emacs-session-save-function.

In Lisp, you bind a save-session-state function to this variable.

When the save_yourself event arrives, the function bound to
emacs-session-save-function is called (with whatever arguments you
think it needs).

The save-session-state function runs the save-session-state-hook hooks.

The return value from save-session-state is nil or t - corresponding
to the CANCEL argument of your x-sm-interact-done function.

I.e. instead of explicitly calling x-sm-interact-done, the return value
from the function bound to emacs-session-save-function indicates whether
it succeeded or not.  So you wont need x-sm-interact-done.

Similarly, there should be a C level emacs-session-restore-function variable.

This is called with the previous and current session id as arguments.
It runs the restore-session-state-hook hooks.

> >     +     doc: /* The previous session id Emacs got from session manager.
> >     + This is nil if Emacs was not started by the session manager.
> >     + The value of this variable and `x-sm-id' may be the same, depending 
> > on how
> >     + the session manager works.
> >     + See also `x-sm-id'.*/);
> > This doc string should explain what the previous session id is good
> > for.  What does it mean?  Documentation for data should explain its
> > overall meaning, not just what it looks like and what values are found
> > when.

Does these really need to be a C-level lisp variables? 

Isn't it enough that the previous session id is passed as an argument
to the emacs-session-restore-function and the current session id is an
argument to emacs-session-save-function?

In general, I would suspect that you only need to know either the
previous session id (when doing restore), or the current session id
(when doing save).

If necessary, the restore-session-state function could store it in a
lisp variable for the hooks to access -- or you can rely on the
dynamic binding of the argument to restore-session-state, e.g.

        (defun save-session-state (session-id)  ;; current session-id

        (defun restore-session-state (session-id) ;; previous session-id

> >     +   DEFVAR_LISP ("x-sm-cancel-shutdown", &Vx_sm_cancel_shutdown,

With the suggested solution above, this variable could also be declared in lisp
(actually it could be dynamically bound in the save-session-state function):

        (defun save-session-state (session-id)
          (let ((cancel-session-shutdown nil))
            (run-hooks 'save-session-state-hook)

Kim F. Storm <address@hidden> http://www.cua.dk

reply via email to

[Prev in Thread] Current Thread [Next in Thread]