unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: "Jan Djärv" <Jan.Djarv@mbox200.swipnet.se>
Cc: emacs-devel@gnu.org
Subject: Re: Session management patch, please comment.
Date: Wed, 20 Feb 2002 21:29:12 +0100	[thread overview]
Message-ID: <80384FF2-2640-11D6-ABC5-00039363E640@mbox200.swipnet.se> (raw)
In-Reply-To: <5xk7t9cctt.fsf@kfs2.cua.dk>


tisdagen den 19 februari 2002 kl 23.43 skrev Kim F. Storm:

> "Jan D." <Jan.Djarv@mbox200.swipnet.se> 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).

I don't quite understand.  What purpose does the 
emacs-session-save-function serve, why not call a lisp function directly?  
And if one can call lisp functions, why not call the functions in 
save-session-state-hook from C?

The reason I did it the way presented, is was I think you can't call lisp 
functions from the X event input handler.  Thus an Emacs event is used to 
get control to the lisp part.

But maybe this can be made an internal event and the hooks can be called 
from Emacs input loop.  I did not know how to do that, I was not sure where 
such code should go to not mess things up with recursive calls.  But if 
someone knows and can give a pointer I can modify the code.

>
> 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.
>
>
>>>     +     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 you have saved state in a file with a filename based on the previous id,
  you presumably would want remove or move that file, either when doing 
restore or save session.


> 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)
>             cancel-session-shutdown))
>

This looks useful, thanks for the hint.

	Jan D.


_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


  reply	other threads:[~2002-02-20 20:29 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-02-17 19:11 Session management patch, please comment Jan D.
2002-02-19  6:37 ` Richard Stallman
2002-02-19  8:40   ` Kim F. Storm
2002-02-19 20:13     ` Jan D.
2002-02-19 20:12   ` Jan D.
2002-02-19 22:43     ` Kim F. Storm
2002-02-20 20:29       ` Jan Djärv [this message]
2002-02-20 22:50         ` Kim F. Storm
2002-02-21 19:57           ` Jan D.
2002-02-21 21:18             ` Kim F. Storm
2002-02-26 22:49               ` New session management patch Jan D.
2002-02-27  5:51                 ` Richard Stallman
2002-02-27 10:23                   ` Eli Zaretskii
2002-02-27 15:25                     ` Andreas Schwab
2002-02-27 18:11                     ` Colin Walters
2002-02-28  4:08                     ` Richard Stallman
2002-02-27 19:43                   ` Jan D.
2002-02-28 18:22                     ` Richard Stallman
2002-02-28 15:36                   ` Kim F. Storm
2002-03-01  1:11                     ` Richard Stallman
2002-02-22  4:32           ` Session management patch, please comment Richard Stallman
2002-02-20 22:13     ` Richard Stallman
2002-02-21 20:01       ` Jan D.

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=80384FF2-2640-11D6-ABC5-00039363E640@mbox200.swipnet.se \
    --to=jan.djarv@mbox200.swipnet.se \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).