;;; 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>
;; Created: 16 Mars 1992
;; Lindberg's last update version: 5.7
-;; Keywords: abbrev expand completion
+;; Keywords: abbrev expand completion convenience
;; This file is part of GNU Emacs.
(defgroup dabbrev nil
"Dynamic Abbreviations"
:tag "Dynamic Abbreviations"
- :group 'abbrev)
+ :group 'abbrev
+ :group 'convenience)
(defcustom dabbrev-backward-only nil
"*If non-nil, `dabbrev-expand' only looks backwards."
if `case-fold-search' is nil.
Any other non-nil version means case is not significant."
:type '(choice (const :tag "off" nil)
- (const :tag "on" t)
- (const :tag "like search" case-fold-search))
+ (const :tag "like search" case-fold-search)
+ (other :tag "on" t))
:group 'dabbrev)
(defcustom dabbrev-upcase-means-case-search nil
This variable has an effect only when the value of
`dabbrev-case-fold-search' specifies to ignore case."
:type '(choice (const :tag "off" nil)
- (const :tag "on" t)
- (const :tag "like M-x query-replace" case-replace))
+ (const :tag "like M-x query-replace" case-replace)
+ (other :tag "on" t))
:group 'dabbrev)
(defcustom dabbrev-abbrev-char-regexp nil
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)
+ :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?\
The default value is t."
:type '(choice (const :tag "off" nil)
(const :tag "on" t)
- (const :tag "ask" other))
+ (other :tag "ask" other))
:group 'dabbrev)
;; I guess setting this to a function that selects all C- or C++-
;; 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