X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/51fb064bc72968e739e8dea580e58796c1a87f4c..791ffe1ce251f03d8cd51b4f67b56b975bd12083:/lisp/dabbrev.el diff --git a/lisp/dabbrev.el b/lisp/dabbrev.el index b5ae7ac3b7..3ba9d56af1 100644 --- a/lisp/dabbrev.el +++ b/lisp/dabbrev.el @@ -1,9 +1,12 @@ ;;; dabbrev.el --- dynamic abbreviation package ;; Copyright (C) 1985, 1986, 1992, 1994, 1996, 1997, 2000, 2001, 2002, -;; 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +;; 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +;; Free Software Foundation, Inc. ;; Author: Don Morrison +;; Lars Lindberg +;; (according to ack.texi) ;; Maintainer: Lars Lindberg ;; Created: 16 Mars 1992 ;; Lindberg's last update version: 5.7 @@ -11,10 +14,10 @@ ;; 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 @@ -22,9 +25,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 . ;;; Commentary: @@ -61,8 +62,7 @@ ;; the article for expansion): ;; (set (make-local-variable 'dabbrev-friend-buffer-function) ;; (lambda (buffer) -;; (save-excursion -;; (set-buffer buffer) +;; (with-current-buffer buffer ;; (memq major-mode '(news-reply-mode gnus-article-mode))))) @@ -106,18 +106,18 @@ :group 'convenience) (defcustom dabbrev-backward-only nil - "*If non-nil, `dabbrev-expand' only looks backwards." + "If non-nil, `dabbrev-expand' only looks backwards." :type 'boolean :group 'dabbrev) (defcustom dabbrev-limit nil - "*Limits region searched by `dabbrev-expand' to this many chars away." + "Limits region searched by `dabbrev-expand' to this many chars away." :type '(choice (const :tag "off" nil) integer) :group 'dabbrev) (defcustom dabbrev-abbrev-skip-leading-regexp nil - "*Regexp for skipping leading characters of an abbreviation. + "Regexp for skipping leading characters of an abbreviation. Example: Set this to \"\\\\$\" for programming languages in which variable names may appear with or without a leading `$'. @@ -129,13 +129,13 @@ Set this to nil if no characters should be skipped." :group 'dabbrev) (defcustom dabbrev-eliminate-newlines t - "*Non-nil means dabbrev should not insert newlines. + "Non-nil means dabbrev should not insert newlines. Instead it converts them to spaces." :type 'boolean :group 'dabbrev) (defcustom dabbrev-case-fold-search 'case-fold-search - "*Control whether dabbrev searches should ignore case. + "Control whether dabbrev searches should ignore case. A value of nil means case is significant. A value of `case-fold-search' means case is significant if `case-fold-search' is nil. @@ -144,9 +144,10 @@ Any other non-nil version means case is not significant." (const :tag "like search" case-fold-search) (other :tag "on" t)) :group 'dabbrev) +;;;###autoload(put 'dabbrev-case-fold-search 'risky-local-variable t) (defcustom dabbrev-upcase-means-case-search nil - "*The significance of an uppercase character in an abbreviation. + "The significance of an uppercase character in an abbreviation. A nil value means case fold search when searching for possible expansions; non-nil means case sensitive search. @@ -156,7 +157,7 @@ This variable has an effect only when the value of :group 'dabbrev) (defcustom dabbrev-case-distinction 'case-replace - "*Whether dabbrev treats expansions as the same if they differ in case. + "Whether dabbrev treats expansions as the same if they differ in case. A value of nil means treat them as different. A value of `case-replace' means distinguish them if `case-replace' is nil. @@ -171,7 +172,7 @@ This variable has an effect only when the value of :version "22.1") (defcustom dabbrev-case-replace 'case-replace - "*Whether dabbrev applies the abbreviations's case pattern to the expansion. + "Whether dabbrev applies the abbreviations's case pattern to the expansion. A value of nil means preserve the expansion's case pattern. A value of `case-replace' means preserve it if `case-replace' is nil. @@ -184,9 +185,10 @@ This variable has an effect only when the value of (const :tag "based on `case-replace'" case-replace) (other :tag "on" t)) :group 'dabbrev) +;;;###autoload(put 'dabbrev-case-replace 'risky-local-variable t) (defcustom dabbrev-abbrev-char-regexp nil - "*Regexp to recognize a character in an abbreviation or expansion. + "Regexp to recognize a character in an abbreviation or expansion. This regexp will be surrounded with \\\\( ... \\\\) when actually used. Set this variable to \"\\\\sw\" if you want ordinary words or @@ -211,7 +213,7 @@ The recommended value is \"\\\\sw\\\\|\\\\s_\"." :group 'dabbrev) (defcustom dabbrev-check-all-buffers t - "*Non-nil means dabbrev package should search *all* buffers. + "Non-nil means dabbrev package should search *all* buffers. Dabbrev always searches the current buffer first. Then, if `dabbrev-check-other-buffers' says so, it searches the buffers @@ -224,21 +226,21 @@ or matched by `dabbrev-ignored-regexps'." :group 'dabbrev) (defcustom dabbrev-ignored-buffer-names '("*Messages*" "*Buffer List*") - "*List of buffer names that dabbrev should not check. + "List of buffer names that dabbrev should not check. See also `dabbrev-ignored-buffer-regexps'." :type '(repeat (string :tag "Buffer name")) :group 'dabbrev :version "20.3") (defcustom dabbrev-ignored-buffer-regexps nil - "*List of regexps matching names of buffers that dabbrev should not check. + "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?\ + "Should \\[dabbrev-expand] look in other buffers?\ nil: Don't look in other buffers. t: Also look for expansions in the buffers pointed out by @@ -265,7 +267,7 @@ for an example. A mode setting this variable should make it buffer local.") (defcustom dabbrev-friend-buffer-function 'dabbrev--same-major-mode-p - "*A function to decide whether dabbrev should search OTHER-BUFFER. + "A function to decide whether dabbrev should search OTHER-BUFFER. The function should take one argument, OTHER-BUFFER, and return non-nil if that buffer should be searched. Have a look at `dabbrev--same-major-mode-p' for an example. @@ -339,9 +341,9 @@ this list." ;; Macros ;;---------------------------------------------------------------- -;;; Get the buffer that mini-buffer was activated from (defsubst dabbrev--minibuffer-origin () - (car (cdr (buffer-list)))) + "Get the buffer from which mini-buffer." + (window-buffer (minibuffer-selected-window))) ;; Make a list of some of the elements of LIST. ;; Check each element of LIST, storing it temporarily in the @@ -362,7 +364,7 @@ this list." ;;---------------------------------------------------------------- ;;;###autoload (define-key esc-map "/" 'dabbrev-expand) -;;;??? Do we want this? +;;??? Do we want this? ;;;###autoload (define-key esc-map [?\C-/] 'dabbrev-completion) ;;;###autoload @@ -371,11 +373,11 @@ this list." Like \\[dabbrev-expand] but finds all expansions in the current buffer and presents suggestions for completion. -With a prefix argument, it searches all buffers accepted by the +With a prefix argument ARG, it searches all buffers accepted by the function pointed out by `dabbrev-friend-buffer-function' to find the completions. -If the prefix argument is 16 (which comes from C-u C-u), +If the prefix argument is 16 (which comes from \\[prefix-argument] \\[prefix-argument]), then it searches *all* buffers." (interactive "*P") (dabbrev--reset-global-variables) @@ -383,6 +385,8 @@ then it searches *all* buffers." (dabbrev-check-all-buffers (and arg (= (prefix-numeric-value arg) 16))) (abbrev (dabbrev--abbrev-at-point)) + (beg (progn (search-backward abbrev) (point))) + (end (progn (search-forward abbrev) (point))) (ignore-case-p (and (if (eq dabbrev-case-fold-search 'case-fold-search) case-fold-search dabbrev-case-fold-search) @@ -425,32 +429,8 @@ then it searches *all* buffers." (intern (downcase string) my-obarray))) completion-list))) (setq dabbrev--last-obarray my-obarray) - (setq dabbrev--last-completion-buffer (current-buffer)) - ;; Find the longest common string. - (setq init (try-completion abbrev my-obarray)))) - ;;-------------------------------- - ;; Let the user choose between the expansions - ;;-------------------------------- - (or (stringp init) - (setq init abbrev)) - (cond - ;; * Replace string fragment with matched common substring completion. - ((and (not (string-equal init "")) - (not (string-equal (downcase init) (downcase abbrev)))) - (if (> (length (all-completions init my-obarray)) 1) - (message "Repeat `%s' to see all completions" - (key-description (this-command-keys))) - (message "The only possible completion")) - (dabbrev--substitute-expansion nil abbrev init nil)) - (t - ;; * String is a common substring completion already. Make list. - (message "Making completion list...") - (with-output-to-temp-buffer "*Completions*" - (display-completion-list (all-completions init my-obarray) - init)) - (message "Making completion list...done"))) - (and (window-minibuffer-p (selected-window)) - (message nil)))) + (setq dabbrev--last-completion-buffer (current-buffer)))) + (completion-in-region beg end my-obarray))) ;;;###autoload (defun dabbrev-expand (arg) @@ -588,16 +568,15 @@ See also `dabbrev-abbrev-char-regexp' and \\[dabbrev-completion]." ;; Local functions ;;---------------------------------------------------------------- -;;; Checks if OTHER-BUFFER has the same major mode as current buffer. (defun dabbrev--same-major-mode-p (other-buffer) + "Check if OTHER-BUFFER has the same major mode as current buffer." (eq major-mode - (save-excursion - (set-buffer other-buffer) + (with-current-buffer other-buffer major-mode))) -;;; Back over all abbrev type characters and then moves forward over -;;; all skip characters. (defun dabbrev--goto-start-of-abbrev () + "Back over all abbrev type characters and then moves forward over +all skip characters." ;; Move backwards over abbrev chars (save-match-data (when (> (point) (minibuffer-prompt-end)) @@ -613,8 +592,8 @@ See also `dabbrev-abbrev-char-regexp' and \\[dabbrev-completion]." (while (looking-at dabbrev-abbrev-skip-leading-regexp) (forward-char 1))))) -;;; Extract the symbol at point to serve as abbreviation. (defun dabbrev--abbrev-at-point () + "Extract the symbol at point to serve as abbreviation." ;; Check for error (if (bobp) (error "No possible abbreviation preceding point")) @@ -629,10 +608,8 @@ See also `dabbrev-abbrev-char-regexp' and \\[dabbrev-completion]." (save-match-data (if (save-excursion (forward-char -1) - (not (looking-at (concat "\\(" - (or dabbrev-abbrev-char-regexp - "\\sw\\|\\s_") - "\\)+")))) + (not (looking-at (or dabbrev-abbrev-char-regexp + "\\sw\\|\\s_")))) (if (re-search-backward (or dabbrev-abbrev-char-regexp "\\sw\\|\\s_") nil t) @@ -643,8 +620,8 @@ See also `dabbrev-abbrev-char-regexp' and \\[dabbrev-completion]." (buffer-substring-no-properties dabbrev--last-abbrev-location (point)))) -;;; Initializes all global variables (defun dabbrev--reset-global-variables () + "Initialize all global variables." ;; dabbrev--last-obarray and dabbrev--last-completion-buffer ;; must not be reset here. (setq dabbrev--last-table nil @@ -1011,12 +988,12 @@ Leaves point at the location of the start of the expansion." (cons found-string dabbrev--last-table)) result))))) -(dolist (mess '("^No dynamic expansion for .* found$" +(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) -;;; arch-tag: 29e58596-f080-4306-a409-70296cf9d46f +;; arch-tag: 29e58596-f080-4306-a409-70296cf9d46f ;;; dabbrev.el ends here