From mboxrd@z Thu Jan 1 00:00:00 1970 Path: quimby.gnus.org!not-for-mail From: storm@cua.dk (Kim F. Storm) Newsgroups: gmane.emacs.devel Subject: Re: Session management patch, please comment. Date: 19 Feb 2002 23:43:26 +0100 Message-ID: <5xk7t9cctt.fsf@kfs2.cua.dk> References: <200202171911.UAA02993@gaffa.gaia.swipnet.se> <200202190637.g1J6b6E15641@santafe.santafe.edu> <3C72B1AF.6090202@mbox200.swipnet.se> NNTP-Posting-Host: quimby2.netfonds.no Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: quimby2.netfonds.no 1014158741 10474 195.204.10.66 (19 Feb 2002 22:45:41 GMT) X-Complaints-To: usenet@quimby2.netfonds.no NNTP-Posting-Date: 19 Feb 2002 22:45:41 GMT Cc: emacs-devel@gnu.org Original-Received: from fencepost.gnu.org ([199.232.76.164]) by quimby2.netfonds.no with esmtp (Exim 3.12 #1 (Debian)) id 16dJ12-0002iq-00 for ; Tue, 19 Feb 2002 23:45:40 +0100 Original-Received: from localhost ([127.0.0.1] helo=fencepost.gnu.org) by fencepost.gnu.org with esmtp (Exim 3.33 #1 (Debian)) id 16dJ0f-0003Io-00; Tue, 19 Feb 2002 17:45:17 -0500 Original-Received: from mail.filanet.dk ([195.215.206.179]) by fencepost.gnu.org with smtp (Exim 3.33 #1 (Debian)) id 16dIxr-00036F-00 for ; Tue, 19 Feb 2002 17:42:24 -0500 Original-Received: from kfs2.cua.dk.cua.dk (unknown [10.1.82.3]) by mail.filanet.dk (Postfix) with SMTP id 4EE1D7C035; Tue, 19 Feb 2002 22:42:17 +0000 (GMT) Original-To: "Jan D." In-Reply-To: <3C72B1AF.6090202@mbox200.swipnet.se> Original-Lines: 80 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2.50 Errors-To: emacs-devel-admin@gnu.org X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.0.5 Precedence: bulk List-Help: List-Post: List-Subscribe: , List-Id: Emacs development discussions. List-Unsubscribe: , List-Archive: Xref: quimby.gnus.org gmane.emacs.devel:1349 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:1349 "Jan D." 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) cancel-session-shutdown)) -- Kim F. Storm http://www.cua.dk _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://mail.gnu.org/mailman/listinfo/emacs-devel