]> code.delx.au - gnu-emacs/blobdiff - lisp/emacs-lisp/re-builder.el
Emulate POSIX_SIGNALS on MS-Windows.
[gnu-emacs] / lisp / emacs-lisp / re-builder.el
index a0fe628ed3592f896f5d0dfce45e05f8da81a042..ec1a704ce0b230c933868b55004ea56cd551b29b 100644 (file)
@@ -1,17 +1,17 @@
 ;;; re-builder.el --- building Regexps with visual feedback
 
 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;;   2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 
 ;; Author: Detlev Zundel <dzu@gnu.org>
 ;; Keywords: matching, lisp, tools
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs 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 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -19,9 +19,7 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
@@ -250,7 +248,7 @@ Except for Lisp syntax this is the same as `reb-regexp'.")
     (define-key menu-map [rt]
       '(menu-item "Case sensitive" reb-toggle-case
                  :button (:toggle . case-fold-search)
-                 :help "Toggle case sensitivity of searches for RE Builder target buffer."))
+                 :help "Toggle case sensitivity of searches for RE Builder target buffer"))
     (define-key menu-map [rb]
       '(menu-item "Change target buffer..." reb-change-target-buffer
                  :help "Change the target buffer and display it in the target window"))
@@ -275,17 +273,10 @@ Except for Lisp syntax this is the same as `reb-regexp'.")
     map)
   "Keymap used by the RE Builder.")
 
-(defun reb-mode ()
-  "Major mode for interactively building Regular Expressions.
-\\{reb-mode-map}"
-  (interactive)
-  (kill-all-local-variables)
-  (setq major-mode 'reb-mode
-        mode-name "RE Builder")
+(define-derived-mode reb-mode nil "RE Builder"
+  "Major mode for interactively building Regular Expressions."
   (set (make-local-variable 'blink-matching-paren) nil)
-  (use-local-map reb-mode-map)
-  (reb-mode-common)
-  (run-mode-hooks 'reb-mode-hook))
+  (reb-mode-common))
 
 (define-derived-mode reb-lisp-mode
   emacs-lisp-mode "RE Builder Lisp"
@@ -351,7 +342,8 @@ Except for Lisp syntax this is the same as `reb-regexp'.")
   (goto-char (+ 2 (point-min)))
   (cond ((reb-lisp-syntax-p)
          (reb-lisp-mode))
-        (t (reb-mode))))
+        (t (reb-mode)))
+  (reb-do-update))
 
 (defun reb-mode-buffer-p ()
   "Return non-nil if the current buffer is a RE Builder buffer."
@@ -372,9 +364,11 @@ Except for Lisp syntax this is the same as `reb-regexp'.")
     (when reb-target-buffer
       (reb-delete-overlays))
     (setq reb-target-buffer (current-buffer)
-          reb-target-window (selected-window)
-          reb-window-config (current-window-configuration))
-    (select-window (split-window (selected-window) (- (window-height) 4)))
+          reb-target-window (selected-window))
+    (select-window (or (get-buffer-window reb-buffer)
+                      (progn
+                        (setq reb-window-config (current-window-configuration))
+                        (split-window (selected-window) (- (window-height) 4)))))
     (switch-to-buffer (get-buffer-create reb-buffer))
     (reb-initialize-buffer)))
 
@@ -526,7 +520,6 @@ optional fourth argument FORCE is non-nil."
         (condition-case nil
             (progn
               (when (or (reb-update-regexp) force)
-                (reb-assert-buffer-in-window)
                 (reb-do-update))
               "")
           (error " *invalid*"))))
@@ -571,7 +564,7 @@ optional fourth argument FORCE is non-nil."
   (interactive)
 
   (setq reb-subexp-displayed
-       (or subexp (string-to-number (format "%c" last-command-char))))
+       (or subexp (string-to-number (format "%c" last-command-event))))
   (reb-update-modestring)
   (reb-do-update reb-subexp-displayed))
 
@@ -665,8 +658,7 @@ If SUBEXP is non-nil mark only the corresponding sub-expressions."
         (matches 0)
         (submatches 0)
         firstmatch)
-    (save-excursion
-      (set-buffer reb-target-buffer)
+    (with-current-buffer reb-target-buffer
       (reb-delete-overlays)
       (goto-char (point-min))
       (while (and (not (eobp))
@@ -727,7 +719,7 @@ If SUBEXP is non-nil mark only the corresponding sub-expressions."
       (remove-hook 'kill-buffer-hook 'reb-kill-buffer t)
       (when (reb-mode-buffer-p)
        (reb-delete-overlays)
-       (funcall default-major-mode))))
+       (funcall (or (default-value 'major-mode) 'fundamental-mode)))))
   ;; continue standard unloading
   nil)