el/dot-emacs.el: Disconnect from display when last frame closes.
authorMark Wooding <mdw@distorted.org.uk>
Sat, 21 Nov 2009 11:18:28 +0000 (11:18 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 21 Nov 2009 11:18:28 +0000 (11:18 +0000)
Now Emacs won't crash when the connection gets severed.  Woohoo.

el/dot-emacs.el

index 66b709f..f535f10 100644 (file)
@@ -718,6 +718,24 @@ doesn't match any of the regular expressions in
           answer))))
 (setq backup-enable-predicate 'mdw-backup-enable-predicate)
 
+;; Frame cleanup.
+
+(defun mdw-last-one-out-turn-off-the-lights (frame)
+  "Disconnect from an X display if this was the last frame on that display."
+  (let ((frame-display (frame-parameter frame 'display)))
+    (when (and frame-display
+              (eq window-system 'x)
+              (not (some (lambda (fr)
+                           (message "checking frame %s" frame)
+                           (and (not (eq fr frame))
+                                (string= (frame-parameter frame 'display)
+                                         frame-display)
+                                (progn "frame %s still uses us" nil)))
+                         (frame-list))))
+      (message "turn out the lights")
+      (run-with-idle-timer 0 nil #'x-close-connection frame-display))))
+(add-hook 'delete-frame-functions 'mdw-last-one-out-turn-off-the-lights)
+
 ;;;--------------------------------------------------------------------------
 ;;; General fontification.