;;; 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
(cond
((or (not ignore-case-p)
(not dabbrev-case-replace))
- (mapcar (function (lambda (string)
- (intern string my-obarray)))
+ (mapc (function (lambda (string)
+ (intern string my-obarray)))
completion-list))
((string= abbrev (upcase abbrev))
- (mapcar (function (lambda (string)
- (intern (upcase string) my-obarray)))
+ (mapc (function (lambda (string)
+ (intern (upcase string) my-obarray)))
completion-list))
((string= (substring abbrev 0 1)
(upcase (substring abbrev 0 1)))
- (mapcar (function (lambda (string)
- (intern (capitalize string) my-obarray)))
+ (mapc (function (lambda (string)
+ (intern (capitalize string) my-obarray)))
completion-list))
(t
- (mapcar (function (lambda (string)
- (intern (downcase string) my-obarray)))
+ (mapc (function (lambda (string)
+ (intern (downcase string) my-obarray)))
completion-list)))
(setq dabbrev--last-obarray my-obarray)
(setq dabbrev--last-completion-buffer (current-buffer))
(error "No%s dynamic expansion for `%s' found"
(if old " further" "") abbrev))
(t
- (if (not (eq dabbrev--last-buffer dabbrev--last-buffer-found))
+ (if (not (or (eq dabbrev--last-buffer dabbrev--last-buffer-found)
+ (minibuffer-window-active-p (selected-window))))
(progn
(message "Expansion found in '%s'"
(buffer-name dabbrev--last-buffer))
(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
+ (walk-windows (lambda (w)
+ (unless (eq w (selected-window))
+ (setq dabbrev--friend-buffer-list
+ (cons (window-buffer w)
+ (delq (window-buffer w)
+ dabbrev--friend-buffer-list))))))
+ (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
result
result)))))))
+(dolist (mess '("^No dynamic expansion for .* found$"
+ "^No further dynamic expansion for .* found$"
+ "^No possible abbreviation preceding point$"))
+ (add-to-list 'debug-ignored-errors mess))
+
(provide 'dabbrev)
;;; dabbrev.el ends here