;;; dabbrev.el --- dynamic abbreviation package
-;; Copyright (C) 1985, 86, 92, 94, 96, 1997 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 86, 92, 94, 96, 1997, 2000
+;; Free Software Foundation, Inc.
;; Author: Don Morrison
;; Maintainer: Lars Lindberg <Lars.Lindberg@sypro.cap.se>
designated by `dabbrev-select-buffers-function'.
Then, if `dabbrev-check-all-buffers' is non-nil, dabbrev searches
-all the other buffers, except those named in `dabbrev-ignored-buffer-names'."
+all the other buffers, except those named in `dabbrev-ignored-buffer-names',
+or matched by `dabbrev-ignored-regexps'."
:type 'boolean
:group 'dabbrev)
-(defcustom dabbrev-ignored-buffer-names '("*Messages")
- "*List of buffer names that dabbrev should not check."
+(defcustom dabbrev-ignored-buffer-names '("*Messages*" "*Buffer List*")
+ "*List of buffer names that dabbrev should not check.
+See also `dabbrev-ignored-regexps'."
:type '(repeat (string :tag "Buffer name"))
:group 'dabbrev
:version "20.3")
+(defcustom dabbrev-ignored-regexps nil
+ "*List of regexps matching names of buffers that dabbrev should not check.
+See also `dabbrev-ignored-buffer-names'."
+ :type '(repeat regexp)
+ :group 'dabbrev
+ :version "21.1")
+
(defcustom dabbrev-check-other-buffers t
"*Should \\[dabbrev-expand] look in other buffers?\
;; variable ELEMENT, and include it in the result
;; if CONDITION evaluates non-nil.
(defmacro dabbrev-filter-elements (element list condition)
- (` (let (dabbrev-result dabbrev-tail (, element))
- (setq dabbrev-tail (, list))
- (while dabbrev-tail
- (setq (, element) (car dabbrev-tail))
- (if (, condition)
- (setq dabbrev-result (cons (, element) dabbrev-result)))
- (setq dabbrev-tail (cdr dabbrev-tail)))
- (nreverse dabbrev-result))))
+ `(let (dabbrev-result dabbrev-tail ,element)
+ (setq dabbrev-tail ,list)
+ (while dabbrev-tail
+ (setq ,element (car dabbrev-tail))
+ (if ,condition
+ (setq dabbrev-result (cons ,element dabbrev-result)))
+ (setq dabbrev-tail (cdr dabbrev-tail)))
+ (nreverse dabbrev-result)))
;;----------------------------------------------------------------
;; Exported functions
(equal abbrev (upcase abbrev)))))
;; Save state for re-expand.
- (setq dabbrev--last-expansion expansion)
+ (setq dabbrev--last-expansion expansion)
(setq dabbrev--last-abbreviation abbrev)
(setq dabbrev--last-abbrev-location (point-marker))))))
(dabbrev--goto-start-of-abbrev)
(buffer-substring-no-properties
dabbrev--last-abbrev-location (point))))
-
+
;;; Initializes all global variables
(defun dabbrev--reset-global-variables ()
;; dabbrev--last-obarray and dabbrev--last-completion-buffer
(nreverse
(dabbrev-filter-elements
buffer (buffer-list)
- (and (not (member (buffer-name buffer)
- dabbrev-ignored-buffer-names))
- (not (memq buffer dabbrev--friend-buffer-list)))))
+ (let ((bn (buffer-name buffer)))
+ (and (not (member bn dabbrev-ignored-buffer-names))
+ (not (memq buffer dabbrev--friend-buffer-list))
+ (not
+ (let ((tail dabbrev-ignored-regexps)
+ (match nil))
+ (while (and tail (not match))
+ (setq match (string-match (car tail) bn)
+ tail (cdr tail)))
+ match))))))
dabbrev--friend-buffer-list
(append dabbrev--friend-buffer-list
non-friend-buffer-list)))))
;; Move buffers that are visible on the screen
- ;; to the front of the list.
- (if dabbrev--friend-buffer-list
- (let ((w (next-window (selected-window))))
- (while (not (eq w (selected-window)))
- (setq dabbrev--friend-buffer-list
- (cons (window-buffer w)
- (delq (window-buffer w) dabbrev--friend-buffer-list)))
- (setq w (next-window w)))))
+ ;; to the front of the list. Remove the current buffer.
+ (when dabbrev--friend-buffer-list
+ (let ((w (next-window (selected-window))))
+ (while (not (eq w (selected-window)))
+ (setq dabbrev--friend-buffer-list
+ (cons (window-buffer w)
+ (delq (window-buffer w) dabbrev--friend-buffer-list)))
+ (setq w (next-window w))))
+ (setq dabbrev--friend-buffer-list
+ (delq (current-buffer) dabbrev--friend-buffer-list)))
;; Walk through the buffers
(while (and (not expansion) dabbrev--friend-buffer-list)
(setq dabbrev--last-buffer