* 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:
parent
c2e9e9ef6f
commit
7a806dfb9e
2 changed files with 35 additions and 31 deletions
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue