]> code.delx.au - gnu-emacs/blobdiff - lisp/play/life.el
Detect remote uid and gid in tramp-gvfs.el
[gnu-emacs] / lisp / play / life.el
index a52c5477bb7b684d1c4d0582ac5d38285569af89..fae51339e2e7c139bb7fdaacf5a20ae68bb73a34 100644 (file)
@@ -1,9 +1,9 @@
 ;;; life.el --- John Horton Conway's `Life' game for GNU Emacs
 
-;; Copyright (C) 1988, 2001-2013 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 2001-2016 Free Software Foundation, Inc.
 
 ;; Author: Kyle Jones <kyleuunet.uu.net>
-;; Maintainer: FSF
+;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: games
 
 ;; This file is part of GNU Emacs.
@@ -122,33 +122,32 @@ generations (this defaults to 1)."
   (life-setup)
   (catch 'life-exit
     (while t
-      (let ((inhibit-quit t))
+      (let ((inhibit-quit t)
+           (inhibit-read-only t))
        (life-display-generation sleeptime)
        (life-grim-reaper)
        (life-expand-plane-if-needed)
        (life-increment-generation)))))
 
-(defalias 'life-mode 'life)
-(put 'life-mode 'mode-class 'special)
+(define-derived-mode life-mode special-mode "Life"
+  "Major mode for the buffer of `life'."
+  (setq-local case-fold-search nil)
+  (setq-local truncate-lines t)
+  (setq-local show-trailing-whitespace nil)
+  (setq-local life-current-generation 0)
+  (setq-local life-generation-string "0")
+  (setq-local mode-line-buffer-identification '("Life: generation "
+                                                life-generation-string))
+  (setq-local fill-column (1- (window-width)))
+  (setq-local life-window-start 1)
+  (buffer-disable-undo))
 
 (defun life-setup ()
-  (let (n)
-    (switch-to-buffer (get-buffer-create "*Life*") t)
-    (erase-buffer)
-    (kill-all-local-variables)
-    (setq case-fold-search nil
-         mode-name "Life"
-         major-mode 'life-mode
-         truncate-lines t
-          show-trailing-whitespace nil
-         life-current-generation 0
-         life-generation-string "0"
-         mode-line-buffer-identification '("Life: generation "
-                                           life-generation-string)
-         fill-column (1- (window-width))
-         life-window-start 1)
-    (buffer-disable-undo (current-buffer))
-    ;; stuff in the random pattern
+  (switch-to-buffer (get-buffer-create "*Life*") t)
+  (erase-buffer)
+  (life-mode)
+  ;; stuff in the random pattern
+  (let ((inhibit-read-only t))
     (life-insert-random-pattern)
     ;; make sure (life-life-char) is used throughout
     (goto-char (point-min))
@@ -156,18 +155,18 @@ generations (this defaults to 1)."
       (replace-match (life-life-string) t t))
     ;; center the pattern horizontally
     (goto-char (point-min))
-    (setq n (/ (- fill-column (line-end-position)) 2))
-    (while (not (eobp))
-      (indent-to n)
-      (forward-line))
+    (let ((n (/ (- fill-column (line-end-position)) 2)))
+      (while (not (eobp))
+       (indent-to n)
+       (forward-line)))
     ;; center the pattern vertically
-    (setq n (/ (- (1- (window-height))
-                 (count-lines (point-min) (point-max)))
-              2))
-    (goto-char (point-min))
-    (newline n)
-    (goto-char (point-max))
-    (newline n)
+    (let ((n (/ (- (1- (window-height))
+                  (count-lines (point-min) (point-max)))
+               2)))
+      (goto-char (point-min))
+      (newline n)
+      (goto-char (point-max))
+      (newline n))
     ;; pad lines out to fill-column
     (goto-char (point-min))
     (while (not (eobp))
@@ -290,8 +289,7 @@ generations (this defaults to 1)."
   (life-display-generation 0)
   (signal 'life-extinct nil))
 
-(put 'life-extinct 'error-conditions '(life-extinct quit))
-(put 'life-extinct 'error-message "All life has perished")
+(define-error 'life-extinct "All life has perished" 'quit) ;FIXME: quit really?
 
 (provide 'life)