emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/play/solitaire.el,v


From: Juanma Barranquero
Subject: [Emacs-diffs] Changes to emacs/lisp/play/solitaire.el,v
Date: Fri, 25 Jul 2008 15:58:00 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Juanma Barranquero <lektu>      08/07/25 15:58:00

Index: play/solitaire.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/play/solitaire.el,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -b -r1.25 -r1.26
--- play/solitaire.el   24 Jul 2008 10:55:12 -0000      1.25
+++ play/solitaire.el   25 Jul 2008 15:57:59 -0000      1.26
@@ -37,75 +37,67 @@
   :prefix "solitaire-"
   :group 'games)
 
-(defvar solitaire-mode-map nil
-  "Keymap for playing Solitaire.")
-
 (defcustom solitaire-mode-hook nil
   "Hook to run upon entry to Solitaire."
   :type 'hook
   :group 'solitaire)
 
-(if solitaire-mode-map
-    ()
-  (setq solitaire-mode-map (make-sparse-keymap))
-  (suppress-keymap solitaire-mode-map t)
-  (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 [return] 'solitaire-move)
-  (define-key solitaire-mode-map [remap undo] 'solitaire-undo)
-  (define-key solitaire-mode-map " " 'solitaire-do-check)
-  (define-key solitaire-mode-map "q" 'quit-window)
-
-  (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)
+(defvar solitaire-mode-map
+  (let ((map (make-sparse-keymap)))
+    (suppress-keymap map t)
+
+    (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 [return] 'solitaire-move)
+    (define-key map [remap undo] 'solitaire-undo)
+    (define-key map " " 'solitaire-do-check)
+    (define-key map "q" 'quit-window)
+
+    (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 solitaire-mode-map [kp-enter] 'solitaire-move)
-  (define-key solitaire-mode-map [kp-0] 'solitaire-undo)
+    (define-key map [kp-enter] 'solitaire-move)
+    (define-key map [kp-0] 'solitaire-undo)
 
   ;; spoil it with s ;)
-  (define-key solitaire-mode-map [?s] 'solitaire-solve)
+    (define-key map [?s] 'solitaire-solve)
 
-  ;;  (define-key solitaire-mode-map [kp-0] 'solitaire-hint) - Not yet 
provided ;)
-  )
+    ;;  (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)
 
-(defun solitaire-mode ()
+(define-derived-mode solitaire-mode nil "Solitaire"
   "Major mode for playing Solitaire.
 To learn how to play Solitaire, see the documentation for function
 `solitaire'.
 \\<solitaire-mode-map>
 The usual mnemonic keys move the cursor around the board; in addition,
 \\[solitaire-move] is a prefix character for actually moving a stone on the 
board."
-  (interactive)
-  (kill-all-local-variables)
-  (use-local-map solitaire-mode-map)
   (setq truncate-lines t)
-  (setq show-trailing-whitespace nil)
-  (setq major-mode 'solitaire-mode)
-  (setq mode-name "Solitaire")
-  (run-mode-hooks 'solitaire-mode-hook))
+  (setq show-trailing-whitespace nil))
 
 (defvar solitaire-stones 0
   "Counter for the stones that are still there.")
@@ -235,14 +227,13 @@
                     (t "")))
         (vsep (cond ((> h 17) "\n\n")
                     (t "\n")))
-        (indent (make-string (/ (- w 7 (* 6 (length hsep))) 2) ?\ )))
+        (indent (make-string (/ (- w 7 (* 6 (length hsep))) 2) ?\s)))
     (erase-buffer)
     (insert (make-string (/ (- h 7 (if (> h 12) 3 0)
                               (* 6 (1- (length vsep)))) 2) ?\n))
-    (if (or (string= vsep "\n\n") (> h 12))
-       (progn
+    (when (or (string= vsep "\n\n") (> h 12))
          (insert (format "%sLe Solitaire\n" indent))
-         (insert (format "%s============\n\n" indent))))
+      (insert (format "%s============\n\n" indent)))
     (insert indent)
     (setq solitaire-start (point))
     (setq solitaire-start-x (current-column))
@@ -258,17 +249,16 @@
     (insert (format "%s %s %so%so%so%s %s " indent hsep hsep hsep hsep hsep 
hsep))
     (setq solitaire-end (point))
     (setq solitaire-end-x (current-column))
-    (setq solitaire-end-y (solitaire-current-line))
-    ))
+    (setq solitaire-end-y (solitaire-current-line))))
 
 (defun solitaire-right ()
   (interactive)
   (let ((start (point)))
     (forward-char)
-    (while (= ?\  (following-char))
+    (while (= ?\s (following-char))
       (forward-char))
-    (if (or  (= 0 (following-char))
-            (= ?\  (following-char))
+    (when (or (= 0 (following-char))
+             (= ?\s (following-char))
            (= ?\n (following-char)))
        (goto-char start))))
 
@@ -276,10 +266,10 @@
   (interactive)
   (let ((start (point)))
     (backward-char)
-    (while (= ?\  (following-char))
+    (while (= ?\s (following-char))
       (backward-char))
-    (if (or  (= 0 (preceding-char))
-            (= ?\  (following-char))
+    (when (or (= 0 (preceding-char))
+             (= ?\s (following-char))
            (= ?\n (following-char)))
        (goto-char start))))
 
@@ -293,12 +283,11 @@
                (forward-line -1)
                (move-to-column c)
                (not (bolp))))
-    (if (or (= 0 (preceding-char))
-           (= ?\  (following-char))
+    (when (or (= 0 (preceding-char))
+             (= ?\s (following-char))
            (= ?\= (following-char))
            (= ?\n (following-char)))
-       (goto-char start)
-       )))
+      (goto-char start))))
 
 (defun solitaire-down ()
   (interactive)
@@ -310,8 +299,8 @@
                (forward-line 1)
                (move-to-column c)
                (not (eolp))))
-    (if (or (= 0 (following-char))
-           (= ?\  (following-char))
+    (when (or (= 0 (following-char))
+             (= ?\s (following-char))
            (= ?\n (following-char)))
        (goto-char start))))
 
@@ -386,7 +375,7 @@
                   (setq count (1+ count))))
            count)))
   (solitaire-build-modeline)
-  (if solitaire-auto-eval (solitaire-do-check)))
+  (when solitaire-auto-eval (solitaire-do-check)))
 
 (defun solitaire-check ()
   (save-excursion
@@ -401,7 +390,7 @@
               (<= (solitaire-current-line) solitaire-end-y)
               (mapc
                (lambda (movesymbol)
-                 (if (listp (solitaire-possible-move movesymbol))
+                 (when (listp (solitaire-possible-move movesymbol))
                      (setq count (1+ count))))
                solitaire-valid-directions)))
        count))))
@@ -430,6 +419,8 @@
   "Spoil Solitaire by solving the game for you - nearly ...
 ... stops with five stones left ;)"
   (interactive)
+  (when (< solitaire-stones 32)
+    (error "Cannot solve game in progress"))
   (let ((allmoves [up up S-down up left left S-right up up left S-down
                      up up right right S-left down down down S-up up
                      S-down down down down S-up left left down
@@ -446,10 +437,10 @@
        (solitaire-auto-eval nil))
     (solitaire-center-point)
     (mapc (lambda (op)
-           (if (memq op '(S-left S-right S-up S-down))
+           (when (memq op '(S-left S-right S-up S-down))
                (sit-for 0.2))
            (execute-kbd-macro (vector op))
-           (if (memq op '(S-left S-right S-up S-down))
+           (when (memq op '(S-left S-right S-up S-down))
                (sit-for 0.4)))
          allmoves))
   (solitaire-do-check))




reply via email to

[Prev in Thread] Current Thread [Next in Thread]