emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [Orgmode] org-protocol and missing server-delete-client function


From: Sebastian Rose
Subject: Re: [Orgmode] org-protocol and missing server-delete-client function
Date: Fri, 17 Apr 2009 01:22:29 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.92 (gnu/linux)

Hi John,


The appended patch should do.


I found, that here (emacs 23) it works, if I replace

  `server-delete-client'

with

   `server-sentinel'


In emacs23, `server-sentinel' calls `server-delete-client'.

I found `server-sentinel' in emacs22 (lisp/server.el) and it seems to do
what we need.

Would you mind to try that?

I will, but haven't compiled emacs22 yet (just have to think a little
about the best setup with two emacs versions).



The sense of the function is to kill the emacsclient and the servers
connection. Otherwise, we would get questions when exiting emacs:

  "Server buffer still has clients. ...."


diff --git a/lisp/org-protocol.el b/lisp/org-protocol.el
index cc99235..8ba906d 100644
--- a/lisp/org-protocol.el
+++ b/lisp/org-protocol.el
@@ -132,7 +132,8 @@
                  (&optional refresh))
 (declare-function org-publish-get-project-from-filename "org-publish"
                  (filename &optional up))
-(declare-function server-delete-client proc "server" (&optional noframe))
+(declare-function server-sentinel "server"
+                 (proc msg))
 
 (defgroup org-protocol nil
   "Intercept calls from emacsclient to trigger custom actions.
@@ -478,7 +479,7 @@ as filename."
                        (splitted (split-string fname proto))
                        (result (if greedy restoffiles (cadr splitted))))
                   (if (plist-get (cdr prolist) :kill-client)
-                      (server-delete-client client t))
+                     (server-sentinel client "Greedy org-protocol handler. 
Killing client."))
                   (when (fboundp func)
                     (unless greedy
                       (throw 'fname (funcall func result)))



Regards


   Sebastian


John Rakestraw <address@hidden> writes:
> Hi --
>
> I'm a simple guy, not a coder, and only a little emacs-savvy. However,
> this post might save some people some frustration. (And it might prompt
> someone more emacs-savvy than I to teach me something.)
>
> I faced a challenge getting org-protocol to work.
>
> I'm running the latest org-mode from git on a Fedora 10 box. Emacs
> version 22.3.1. I set up for org-protocol in emacs and in firefox
> (following the instructions at
> http://orgmode.org/worg/org-contrib/org-protocol.php). Then when I
> tried to execute the org-protocol-remember handler, emacs pitched back
> this error message:
>
> ***
> error in process filter: symbol's function definition is void:
> server-delete-client
> ***
>
> I looked in server.el, and didn't find server-delete-client defined
> there. I found a copy of server.el for emacs 23 online at
> http://zchan.homeunix.net/pub/Nevada.APP/Build/emacs-23.0.60/lisp/server.el/server.
> It includes this definition of server-delete-client:
>
> ***
> (defun server-delete-client (proc &optional noframe)
>   "Delete CLIENT, including its buffers, terminals and frames.
> If NOFRAME is non-nil, let the frames live.  (To be used from
> `delete-frame-functions'.)"
>   (server-log (concat "server-delete-client" (if noframe " noframe"))
>             proc)
>   ;; Force a new lookup of client (prevents infinite recursion).
>   (when (memq proc server-clients)
>     (let ((buffers (process-get proc 'buffers)))
>
>       ;; Kill the client's buffers.
>       (dolist (buf buffers)
>       (when (buffer-live-p buf)
>         (with-current-buffer buf
>           ;; Kill the buffer if necessary.
>           (when (and (equal server-buffer-clients
>                             (list proc))
>                      (or (and server-kill-new-buffers
>                               (not server-existing-buffer))
>                          (server-temp-file-p))
>                      (not (buffer-modified-p)))
>             (let (flag)
>               (unwind-protect
>                   (progn (setq server-buffer-clients nil)
>                          (kill-buffer (current-buffer))
>                          (setq flag t))
>                 (unless flag
>                   ;; Restore clients if user pressed C-g in
>       `kill-buffer'. (setq server-buffer-clients (list proc)))))))))
>
>       ;; Delete the client's frames.
>       (unless noframe
>       (dolist (frame (frame-list))
>         (when (and (frame-live-p frame)
>                    (equal proc (frame-parameter frame 'client)))
>           ;; Prevent `server-handle-delete-frame' from calling us
>           ;; recursively.
>           (set-frame-parameter frame 'client nil)
>           (delete-frame frame))))
>
>       (setq server-clients (delq proc server-clients))
>
>       ;; Delete the client's tty.
>       (let ((terminal (process-get proc 'terminal)))
>       ;; Only delete the terminal if it is non-nil.
>       (when (and terminal (eq (terminal-live-p terminal) t))
>         (delete-terminal terminal)))
>
>       ;; Delete the client's process.
>       (if (eq (process-status proc) 'open)
>         (delete-process proc))
>
>       (server-log "Deleted" proc))))
> ***
>
> When I add this definition to my config files and reload, then
> org-protocol-remember works as expected. 
>
> Surely there are still others using emacs 22.3? Is there another way
> around this (short of upgrading to emacs 23 -- I might do that, but I'm
> so swamped with other things right now and I know so little about
> what I'm doing that I don't want to move on that yet)?

-- 
Sebastian Rose, EMMA STIL - mediendesign, Niemeyerstr.6, 30449 Hannover
Tel.:  +49 (0)511 - 36 58 472
Fax:   +49 (0)1805 - 233633 - 11044
mobil: +49 (0)173 - 83 93 417
Email: address@hidden, address@hidden
Http:  www.emma-stil.de

reply via email to

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