revno: 360
committer: Stefan Monnier
branch nick: elpa
timestamp: Sun 2013-03-03 20:19:23 -0500
message:
* sokoban.el: Style tweaks.
(sokoban-level-file): Use load-file-name to find sokoban-levels.
(sokoban-init-level-data): Avoid messing with windows. Use eobp and dotimes.
(sokoban-display-options, sokoban-get-level-data, sokoban-init-buffer)
(sokoban-draw-score): Use dotimes.
(sokoban-add-move, sokoban-add-push): Use push.
(sokoban-goto-level): `signal' can't return.
(sokoban-mode): Use define-derived-mode. Set vars locally.
modified:
packages/sokoban/sokoban.el
=== modified file 'packages/sokoban/sokoban.el'
--- a/packages/sokoban/sokoban.el 2013-03-02 10:32:13 +
+++ b/packages/sokoban/sokoban.el 2013-03-04 01:19:23 +
@@ -1,6 +1,6 @@
;;; sokoban.el --- Implementation of Sokoban for Emacs.
-;; Copyright (C) 1998 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2013 Free Software Foundation, Inc.
;; Author: Glynn Clements
;; Version: 1.04
@@ -11,7 +11,7 @@
;; XEmacs is free software; you can redistribute it and/or modify it
;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2 of the License, or
+;; the Free Software Foundation; either version 3 of the License, or
;; (at your option) any later version.
;; XEmacs is distributed in the hope that it will be useful, but
@@ -39,7 +39,6 @@
;; display level and score in modeline
;; Modified: 1998-06-04, added `undo' feature
;; added number of blocks done/total to score and modeline
-;; Modified: 1998-06-23, copyright assigned to FSF
;; Modified: 2003-06-14, update email address, remove URL
;; Tested with XEmacs 20.3/4/5 and Emacs 19.34
@@ -50,6 +49,8 @@
;; The levels and some of the pixmaps were
;; taken directly from XSokoban
+;;; Code:
+
(eval-when-compile
(require 'cl))
@@ -58,13 +59,13 @@
;; ; customization variables ;
(defvar sokoban-use-glyphs t
- "Non-nil means use glyphs when available")
+ "Non-nil means use glyphs when available.")
(defvar sokoban-use-color t
- "Non-nil means use color when available")
+ "Non-nil means use color when available.")
(defvar sokoban-font "-*-courier-medium-r-*-*-*-200-100-75-*-*-iso8859-*"
- "Name of the font used in X mode")
+ "Name of the font used in X mode.")
(defvar sokoban-buffer-name "*Sokoban*")
@@ -74,6 +75,11 @@
(if (fboundp 'locate-data-file)
(locate-data-file "sokoban.levels")
(or (locate-library "sokoban.levels")
+(let ((file (expand-file-name
+ "sokoban.levels"
+ (if load-file-name
+ (file-name-directory load-file-name)
+ (and (file-exists-p file) file))
(expand-file-name "sokoban.levels" data-directory
(defvar sokoban-width 20)
@@ -363,27 +369,26 @@
;; ; variables ;;;
(defvar sokoban-level 0)
+(make-variable-buffer-local 'sokoban-level)
(defvar sokoban-level-map nil)
+(make-variable-buffer-local 'sokoban-level-map)
(defvar sokoban-targets 0)
+(make-variable-buffer-local 'sokoban-targets)
(defvar sokoban-x 0)
+(make-variable-buffer-local 'sokoban-x)
(defvar sokoban-y 0)
+(make-variable-buffer-local 'sokoban-y)
(defvar sokoban-moves 0)
+(make-variable-buffer-local 'sokoban-moves)
(defvar sokoban-pushes 0)
+(make-variable-buffer-local 'sokoban-pushes)
(defvar sokoban-done 0)
+(make-variable-buffer-local 'sokoban-done)
(defvar sokoban-mouse-x 0)
+(make-variable-buffer-local 'sokoban-mouse-x)
(defvar sokoban-mouse-y 0)
+(make-variable-buffer-local 'sokoban-mouse-y)
(defvar sokoban-undo-list nil)
-
-(make-variable-buffer-local 'sokoban-level)
-(make-variable-buffer-local 'sokoban-level-map)
-(make-variable-buffer-local 'sokoban-targets)
-(make-variable-buffer-local 'sokoban-x)
-(make-variable-buffer-local 'sokoban-y)
-(make-variable-buffer-local 'sokoban-moves)
-(make-variable-buffer-local 'sokoban-pushes)
-(make-variable-buffer-local 'sokoban-done)
-(make-variable-buffer-local 'sokoban-mouse-x)
-(make-variable-buffer-local 'sokoban-mouse-y)
(make-variable-buffer-local 'sokoban-undo-list)
;; ; keymaps ;
@@ -406,11 +411,12 @@
(define-key map [down-mouse-2] 'sokoban-mouse-event-start)
(define-key map [mouse-2] 'sokoban-mouse-event-end)
-;; On some systems (OS X) middle mouse is difficult
+;; On some systems (OS X) middle mouse is difficult.
+;; FIXME: Use follow-link?
(define-key map [down-mouse-1] 'sokoban-mouse-event-start)
(define-key map [mouse-1] 'sokoban-mouse-event-end)
-(define-key map [(control ?/)] 'sokoban-undo)
+(define-key map [(control ?/)] 'sokoban-undo)
map))
;; lev