]> code.delx.au - gnu-emacs/blobdiff - lisp/iswitchb.el
Merge from emacs--devo--0
[gnu-emacs] / lisp / iswitchb.el
index 2943be851a01b28fdf9872867ad10681a247463d..98fad7bf824b080a7993a3552da6454775b6b950 100644 (file)
@@ -1,11 +1,11 @@
 ;;; iswitchb.el --- switch between buffers using substrings
 
-;; Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005  Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Stephen Eglen <stephen@gnu.org>
 ;; Maintainer: Stephen Eglen <stephen@gnu.org>
 ;; Keywords: completion convenience
-;; location: http://www.anc.ed.ac.uk/~stephen/emacs/
 
 ;; This file is part of GNU Emacs.
 
@@ -21,8 +21,8 @@
 
 ;; 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., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Commentary:
 
@@ -292,6 +292,7 @@ with a space, for which the regexp is `^ '.  See the source file for
 example functions that filter buffernames."
   :type '(repeat (choice regexp function))
   :group 'iswitchb)
+(put 'iswitchb-buffer-ignore 'risky-local-variable t)
 
 (defcustom iswitchb-max-to-show nil
   "*If non-nil, limit the number of names shown in the minibuffer.
@@ -404,21 +405,21 @@ iswitchb is running."
   :type 'hook
   :group 'iswitchb)
 
-(defface iswitchb-single-match-face
+(defface iswitchb-single-match
   '((t
      (:inherit font-lock-comment-face)))
   "Iswitchb face for single matching buffer name."
   :version "22.1"
   :group 'iswitchb)
 
-(defface iswitchb-current-match-face
+(defface iswitchb-current-match
   '((t
      (:inherit font-lock-function-name-face)))
   "Iswitchb face for current matching buffer name."
   :version "22.1"
   :group 'iswitchb)
 
-(defface iswitchb-virtual-matches-face
+(defface iswitchb-virtual-matches
   '((t
      (:inherit font-lock-builtin-face)))
   "Iswitchb face for matching virtual buffer names.
@@ -426,7 +427,7 @@ See also `iswitchb-use-virtual-buffers'."
   :version "22.1"
   :group 'iswitchb)
 
-(defface iswitchb-invalid-regexp-face
+(defface iswitchb-invalid-regexp
   '((t
      (:inherit font-lock-warning-face)))
   "Iswitchb face for indicating invalid regexp. "
@@ -494,14 +495,13 @@ interfere with other minibuffer usage.")
 
 (defvar iswitchb-global-map
   (let ((map (make-sparse-keymap)))
-    (substitute-key-definition 'switch-to-buffer ; normally C-x b
-                              'iswitchb-buffer map global-map)
-    (substitute-key-definition 'switch-to-buffer-other-window ; C-x 4 b
-                              'iswitchb-buffer-other-window map global-map)
-    (substitute-key-definition 'switch-to-buffer-other-frame ; C-x 5 b
-                              'iswitchb-buffer-other-frame map global-map)
-    (substitute-key-definition 'display-buffer ; C-x 4 C-o
-                              'iswitchb-display-buffer map global-map)
+    (dolist (b '((switch-to-buffer . iswitchb-buffer)
+                 (switch-to-buffer-other-window . iswitchb-buffer-other-window)
+                 (switch-to-buffer-other-frame . iswitchb-buffer-other-frame)
+                 (display-buffer . iswitchb-display-buffer)))
+      (if (fboundp 'command-remapping)
+          (define-key map (vector 'remap (car b)) (cdr b))
+        (substitute-key-definition (car b) (cdr b) map global-map)))
     map)
   "Global keymap for `iswitchb-mode'.")
 
@@ -557,7 +557,7 @@ variable `iswitchb-mode'."
     (define-key map "\C-j" 'iswitchb-select-buffer-text)
     (define-key map "\C-t" 'iswitchb-toggle-regexp)
     (define-key map "\C-x\C-f" 'iswitchb-find-file)
-    ;;(define-key map "\C-a" 'iswitchb-toggle-ignore)
+    (define-key map "\C-n" 'iswitchb-toggle-ignore)
     (define-key map "\C-c" 'iswitchb-toggle-case)
     (define-key map "\C-k" 'iswitchb-kill-buffer)
     (define-key map "\C-m" 'iswitchb-exit-minibuffer)
@@ -871,10 +871,8 @@ it is put to the start of the list."
 
 (defun iswitchb-to-end (lst)
   "Move the elements from LST to the end of `iswitchb-temp-buflist'."
-  (mapcar
-   (lambda (elem)
-     (setq iswitchb-temp-buflist (delq elem iswitchb-temp-buflist)))
-   lst)
+  (dolist (elem lst)
+    (setq iswitchb-temp-buflist (delq elem iswitchb-temp-buflist)))
   (setq iswitchb-temp-buflist (nconc iswitchb-temp-buflist lst)))
 
 (defun iswitchb-get-buffers-in-frames (&optional current)
@@ -915,33 +913,19 @@ current frame, rather than all frames, regardless of value of
   "Return buffers matching REGEXP.
 If STRING-FORMAT is nil, consider REGEXP as just a string.
 BUFFER-LIST can be list of buffers or list of strings."
-  (let* ((case-fold-search  (iswitchb-case))
-        ;; need reverse since we are building up list backwards
-        (list              (reverse buffer-list))
-         (do-string         (stringp (car list)))
-         name
-         ret)
+  (let* ((case-fold-search (iswitchb-case))
+         name ret)
+    (if (null string-format) (setq regexp (regexp-quote regexp)))
     (setq iswitchb-invalid-regexp nil)
-    (catch 'invalid-regexp
-      (mapcar
-       (lambda (x)
-
-        (if do-string
-            (setq name x)              ;We already have the name
-          (setq name (buffer-name x)))
-
-        (cond
-         ((and (if (not string-format)
-                    (string-match (regexp-quote regexp) name)
-                  (condition-case error
-                      (string-match regexp name)
-                    (invalid-regexp
-                     (setq iswitchb-invalid-regexp t)
-                     (throw 'invalid-regexp (setq ret (cdr error))))))
-               (not (iswitchb-ignore-buffername-p name)))
-          (setq ret (cons name ret)))))
-       list))
-    ret))
+    (condition-case error
+        (dolist (x buffer-list (nreverse ret))
+          (setq name (if (stringp x) x (buffer-name x)))
+          (when (and (string-match regexp name)
+                     (not (iswitchb-ignore-buffername-p name)))
+            (push name ret)))
+      (invalid-regexp
+       (setq iswitchb-invalid-regexp t)
+       (cdr error)))))
 
 (defun iswitchb-ignore-buffername-p (bufname)
   "Return t if the buffer BUFNAME should be ignored."
@@ -957,7 +941,7 @@ BUFFER-LIST can be list of buffers or list of strings."
             (progn
               (setq ignorep t)
               (setq re-list nil))))
-       ((fboundp nextstr)
+       ((functionp nextstr)
         (if (funcall nextstr bufname)
             (progn
               (setq ignorep t)
@@ -1137,7 +1121,7 @@ Return the modified list with the last element prepended to it."
              (set-buffer-major-mode newbufcreated))
          (iswitchb-visit-buffer newbufcreated))
       ;; else wont create new buffer
-      (message (format "no buffer matching `%s'" buf)))))
+      (message "no buffer matching `%s'" buf))))
 
 (defun iswitchb-window-buffer-p  (buffer)
   "Return window pointer if BUFFER is visible in another frame.
@@ -1299,9 +1283,9 @@ Modified from `icomplete-completions'."
          (put-text-property 0 (length first) 'face
                             (if (= (length comps) 1)
                                  (if iswitchb-invalid-regexp
-                                     'iswitchb-invalid-regexp-face
-                                   'iswitchb-single-match-face)
-                              'iswitchb-current-match-face)
+                                     'iswitchb-invalid-regexp
+                                   'iswitchb-single-match)
+                              'iswitchb-current-match)
                             first)
          (setq comps  (cons first (cdr comps)))))
 
@@ -1330,7 +1314,7 @@ Modified from `icomplete-completions'."
        (let ((comp comps))
          (while comp
            (put-text-property 0 (length (car comp))
-                              'face 'iswitchb-virtual-matches-face
+                              'face 'iswitchb-virtual-matches
                               (car comp))
            (setq comp (cdr comp))))))
 
@@ -1476,5 +1460,5 @@ This mode enables switching between buffers using substrings.  See
 
 (provide 'iswitchb)
 
-;;; arch-tag: d74198ae-753f-44f2-b34f-0c515398d90a
+;; arch-tag: d74198ae-753f-44f2-b34f-0c515398d90a
 ;;; iswitchb.el ends here