* lisp/play/life.el (life-mode): Use define-derived-mode. Derive from

special-mode.
(life): Let-bind inhibit-read-only.
(life-setup): Avoid `setq'.  Use `life-mode'.
This commit is contained in:
Stefan Monnier 2013-09-17 13:47:01 -04:00
parent c2e9e9ef6f
commit 7a806dfb9e
2 changed files with 35 additions and 31 deletions

View file

@ -1,5 +1,10 @@
2013-09-17 Stefan Monnier <monnier@iro.umontreal.ca>
* play/life.el (life-mode): Use define-derived-mode. Derive from
special-mode.
(life): Let-bind inhibit-read-only.
(life-setup): Avoid `setq'. Use `life-mode'.
* emacs-lisp/package.el (package-generate-autoloads): Remove `require'
which should not be needed any more.
(package-menu-refresh, package-menu-describe-package): Use user-error.

View file

@ -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))