[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: CVS Emacs fails to remove server.el socket on exit
From: |
Trent Buck |
Subject: |
Re: CVS Emacs fails to remove server.el socket on exit |
Date: |
Tue, 19 Dec 2006 03:24:40 +1100 |
User-agent: |
Mutt/1.5.13 (2006-08-11) |
On Mon, Dec 18, 2006 at 10:14:53AM +0100, Juanma Barranquero wrote:
> On 12/18/06, Trent Buck <address@hidden> wrote:
>
> >I believe CVS Emacs is not correctly removing the socket file created
> >by server-start (from server.el).
>
> It is on purpose. Note the following fragment from server.el:
>
> ;; Delete the associated connection file, if applicable.
> ;; This is actually problematic: the file may have been overwritten by
> ;; another Emacs server in the mean time, so it's not ours any more.
> ;; (and (process-contact proc :server)
> ;; (eq (process-status proc) 'closed)
> ;; (ignore-errors (delete-file (process-get proc :server-file))))
I see.
In my .emacs, I change `server-name' to be process-specific, and
create a symlink to the "generic" name:
;;; Say I run "bzr commit" in a normal shell, outside of emacs. I
;;; want that to start up a full Emacs. If it used emacsclient, then
;;; buffer would show up on some random Emacs process in some GNU
;;; Screen window, and I'd have to hunt it down.
;;;
;;; HOWEVER, if I run M-x shell in Emacs, and I run "bzr commit" in
;;; THERE, I want it to talk to the parent Emacs process (via
;;; emacsclient).
;;;
;;; Since I occasionally have multiple Emacs processes running, I need
;;; to change server-name to be process-specific, so the Emacs
;;; processes' server-starts won't clobber one another's sockets.
(setq server-name (format "server%d" (emacs-pid)))
(let ((x (format "emacsclient -s %s" server-name)))
(setenv "VISUAL" x)
(setenv "EDITOR" x))
(server-start)
;; emacsclient(1) looks for a socket named "server" by default. We
;; symlink to this file, so that running emacsclient manually from the
;; command line will use the more recently opened Emacs.
;;
;; We don't bother doing this for Emacs 21 because the socket dir is
;; too difficult to deduce.
(when (= emacs-major-version 22)
(make-symbolic-link
server-name
(concat server-socket-dir "/server")
t))
Is this a sensible approach to adopt as default in CVS Emacs, or would
it have problems for e.g. DOS users (who have no symbolic links)?
If this approach was adopted, `server-sentinel' could happily remove
it's socket file, leaving a broken symlink instead of a defunct
socket.
--
Trent Buck, Student Errant
signature.asc
Description: Digital signature