]> code.delx.au - gnu-emacs/blobdiff - lisp/play/solitaire.el
Update copyright year to 2016
[gnu-emacs] / lisp / play / solitaire.el
index a9cb6c32e7d131573db984b0f3eb9c4615ef6ec3..8dcaa6144c12cb3d3c0b3a3df988504cb4e500fa 100644 (file)
@@ -1,6 +1,6 @@
 ;;; solitaire.el --- game of solitaire in Emacs Lisp
 
-;; Copyright (C) 1994, 2001-201 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2001-2016 Free Software Foundation, Inc.
 
 ;; Author: Jan Schormann <Jan.Schormann@rechen-gilde.de>
 ;; Created: Fri afternoon, Jun  3,  1994
   :type 'hook
   :group 'solitaire)
 
+(defvar solitaire-mode-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map special-mode-map)
+
+    (define-key map "\C-f" 'solitaire-right)
+    (define-key map "\C-b" 'solitaire-left)
+    (define-key map "\C-p" 'solitaire-up)
+    (define-key map "\C-n" 'solitaire-down)
+    (define-key map "\r" 'solitaire-move)
+    (define-key map [remap undo] 'solitaire-undo)
+    (define-key map " " 'solitaire-do-check)
+
+    (define-key map [right] 'solitaire-right)
+    (define-key map [left] 'solitaire-left)
+    (define-key map [up] 'solitaire-up)
+    (define-key map [down] 'solitaire-down)
+
+    (define-key map [S-right] 'solitaire-move-right)
+    (define-key map [S-left]  'solitaire-move-left)
+    (define-key map [S-up]    'solitaire-move-up)
+    (define-key map [S-down]  'solitaire-move-down)
+
+    (define-key map [kp-6] 'solitaire-right)
+    (define-key map [kp-4] 'solitaire-left)
+    (define-key map [kp-8] 'solitaire-up)
+    (define-key map [kp-2] 'solitaire-down)
+    (define-key map [kp-5] 'solitaire-center-point)
+
+    (define-key map [S-kp-6] 'solitaire-move-right)
+    (define-key map [S-kp-4] 'solitaire-move-left)
+    (define-key map [S-kp-8] 'solitaire-move-up)
+    (define-key map [S-kp-2] 'solitaire-move-down)
+
+    (define-key map [kp-enter] 'solitaire-move)
+    (define-key map [kp-0] 'solitaire-undo)
+
+    ;; spoil it with s ;)
+    (define-key map [?s] 'solitaire-solve)
+
+    ;;  (define-key map [kp-0] 'solitaire-hint) - Not yet provided ;)
+    map)
+  "Keymap for playing Solitaire.")
+
 ;; Solitaire mode is suitable only for specially formatted data.
 (put 'solitaire-mode 'mode-class 'special)
 
@@ -54,41 +97,6 @@ The usual mnemonic keys move the cursor around the board; in addition,
   (setq truncate-lines t)
   (setq show-trailing-whitespace nil))
 
-(define-key solitaire-mode-map "\C-f" 'solitaire-right)
-(define-key solitaire-mode-map "\C-b" 'solitaire-left)
-(define-key solitaire-mode-map "\C-p" 'solitaire-up)
-(define-key solitaire-mode-map "\C-n" 'solitaire-down)
-(define-key solitaire-mode-map "\r" 'solitaire-move)
-(define-key solitaire-mode-map [remap undo] 'solitaire-undo)
-(define-key solitaire-mode-map " " 'solitaire-do-check)
-
-(define-key solitaire-mode-map [right] 'solitaire-right)
-(define-key solitaire-mode-map [left] 'solitaire-left)
-(define-key solitaire-mode-map [up] 'solitaire-up)
-(define-key solitaire-mode-map [down] 'solitaire-down)
-
-(define-key solitaire-mode-map [S-right] 'solitaire-move-right)
-(define-key solitaire-mode-map [S-left]  'solitaire-move-left)
-(define-key solitaire-mode-map [S-up]    'solitaire-move-up)
-(define-key solitaire-mode-map [S-down]  'solitaire-move-down)
-
-(define-key solitaire-mode-map [kp-6] 'solitaire-right)
-(define-key solitaire-mode-map [kp-4] 'solitaire-left)
-(define-key solitaire-mode-map [kp-8] 'solitaire-up)
-(define-key solitaire-mode-map [kp-2] 'solitaire-down)
-(define-key solitaire-mode-map [kp-5] 'solitaire-center-point)
-
-(define-key solitaire-mode-map [S-kp-6] 'solitaire-move-right)
-(define-key solitaire-mode-map [S-kp-4] 'solitaire-move-left)
-(define-key solitaire-mode-map [S-kp-8] 'solitaire-move-up)
-(define-key solitaire-mode-map [S-kp-2] 'solitaire-move-down)
-
-(define-key solitaire-mode-map [kp-enter] 'solitaire-move)
-(define-key solitaire-mode-map [kp-0] 'solitaire-undo)
-
-;; spoil it with s ;)
-(define-key solitaire-mode-map [?s] 'solitaire-solve)
-;;  (define-key map [kp-0] 'solitaire-hint) - Not yet provided ;)
 (defvar solitaire-stones 0
   "Counter for the stones that are still there.")
 
@@ -118,7 +126,7 @@ the game is over, or off, if you are working on a slow machine."
   '(solitaire-left solitaire-right solitaire-up solitaire-down))
 
 ;;;###autoload
-(defun solitaire (arg)
+(defun solitaire (_arg)
   "Play Solitaire.
 
 To play Solitaire, type \\[solitaire].
@@ -182,23 +190,23 @@ That's all.  Here's the board after two moves:
 
                o   o   o
 
-Pick your favourite shortcuts:
+Pick your favorite shortcuts:
 
 \\{solitaire-mode-map}"
 
   (interactive "P")
   (switch-to-buffer "*Solitaire*")
-  (solitaire-mode)
-  (setq buffer-read-only t)
-  (setq solitaire-stones 32)
-  (solitaire-insert-board)
-  (solitaire-build-modeline)
-  (goto-char (point-max))
-  (setq solitaire-center (search-backward "."))
-  (setq buffer-undo-list (list (point)))
-  (set-buffer-modified-p nil))
-
-(defun solitaire-build-modeline ()
+  (let ((inhibit-read-only t))
+    (solitaire-mode)
+    (setq buffer-read-only t)
+    (setq solitaire-stones 32)
+    (solitaire-insert-board)
+    (solitaire-build-mode-line)
+    (goto-char (point-max))
+    (setq solitaire-center (search-backward "."))
+    (setq buffer-undo-list (list (point)))))
+
+(defun solitaire-build-mode-line ()
   (setq mode-line-format
        (list "" "---" 'mode-line-buffer-identification
              (if (< 1 solitaire-stones)
@@ -345,7 +353,7 @@ which a stone will be taken away) and target."
        (insert ?o)
        (goto-char target)
        (setq solitaire-stones (1- solitaire-stones))
-       (solitaire-build-modeline)
+       (solitaire-build-mode-line)
        (if solitaire-auto-eval (solitaire-do-check))))))
 
 (defun solitaire-undo (arg)
@@ -364,7 +372,7 @@ which a stone will be taken away) and target."
                   (<= (solitaire-current-line) solitaire-end-y)
                   (setq count (1+ count))))
            count)))
-  (solitaire-build-modeline)
+  (solitaire-build-mode-line)
   (when solitaire-auto-eval (solitaire-do-check)))
 
 (defun solitaire-check ()
@@ -385,7 +393,7 @@ which a stone will be taken away) and target."
                solitaire-valid-directions)))
        count))))
 
-(defun solitaire-do-check (&optional arg)
+(defun solitaire-do-check (&optional _arg)
   "Check for any possible moves in Solitaire."
   (interactive "P")
   (let ((moves (solitaire-check)))