;;; replace.el --- replace commands for Emacs
;; Copyright (C) 1985, 1986, 1987, 1992, 1994, 1996, 1997, 2000, 2001, 2002,
-;; 2003, 2004 Free Software Foundation, Inc.
+;; 2003, 2004, 2005 Free Software Foundation, Inc.
;; Maintainer: FSF
"*Non-nil means `query-replace' and friends ignore read-only matches."
:type 'boolean
:group 'matching
- :version "21.4")
+ :version "22.1")
+
+(defcustom query-replace-highlight t
+ "*Non-nil means to highlight matches during query replacement."
+ :type 'boolean
+ :group 'matching)
+
+(defcustom query-replace-lazy-highlight t
+ "*Controls the lazy-highlighting during query replacements.
+When non-nil, all text in the buffer matching the current match
+is highlighted lazily using isearch lazy highlighting (see
+`lazy-highlight-initial-delay' and `lazy-highlight-interval')."
+ :type 'boolean
+ :group 'lazy-highlight
+ :group 'matching
+ :version "22.1")
+
+(defface query-replace
+ '((t (:inherit isearch)))
+ "Face for highlighting query replacement matches."
+ :group 'matching
+ :version "22.1")
(defun query-replace-descr (string)
(mapconcat 'isearch-text-char-description string ""))
query-replace-from-history-variable
nil t t))))
(if (and (zerop (length from)) lastto lastfrom)
- (cons lastfrom
- (query-replace-compile-replacement lastto regexp-flag))
+ (progn
+ (set query-replace-from-history-variable
+ (cdr (symbol-value query-replace-from-history-variable)))
+ (cons lastfrom
+ (query-replace-compile-replacement lastto regexp-flag)))
;; Warn if user types \n or \t, but don't reject the input.
(and regexp-flag
(string-match "\\(\\`\\|[^\\]\\)\\(\\\\\\\\\\)*\\(\\\\[nt]\\)" from)
To customize possible responses, change the \"bindings\" in `query-replace-map'."
(interactive (let ((common
- (query-replace-read-args "Query replace" nil)))
+ (query-replace-read-args
+ (if (and transient-mark-mode mark-active)
+ "Query replace in region"
+ "Query replace")
+ nil)))
(list (nth 0 common) (nth 1 common) (nth 2 common)
;; These are done separately here
;; so that command-history will record these expressions
Use \\[repeat-complex-command] after this command for details."
(interactive
(let ((common
- (query-replace-read-args "Query replace regexp" t)))
+ (query-replace-read-args
+ (if (and transient-mark-mode mark-active)
+ "Query replace regexp in region"
+ "Query replace regexp")
+ t)))
(list (nth 0 common) (nth 1 common) (nth 2 common)
;; These are done separately here
;; so that command-history will record these expressions
and TO-STRING is also null.)"
(interactive
(let ((common
- (query-replace-read-args "Replace string" nil)))
+ (query-replace-read-args
+ (if (and transient-mark-mode mark-active)
+ "Replace string in region"
+ "Replace string")
+ nil)))
(list (nth 0 common) (nth 1 common) (nth 2 common)
(if (and transient-mark-mode mark-active)
(region-beginning))
which will run faster and will not set the mark or print anything."
(interactive
(let ((common
- (query-replace-read-args "Replace regexp" t)))
+ (query-replace-read-args
+ (if (and transient-mark-mode mark-active)
+ "Replace regexp in region"
+ "Replace regexp")
+ t)))
(list (nth 0 common) (nth 1 common) (nth 2 common)
(if (and transient-mark-mode mark-active)
(region-beginning))
(t :background "gray"))
"Face used to highlight matches permanently."
:group 'matching
- :version "21.4")
+ :version "22.1")
(defcustom list-matching-lines-default-context-lines 0
"*Default number of context lines included around `list-matching-lines' matches.
(setq count (+ count (if forwardp -1 1)))
(setq beg (line-beginning-position)
end (line-end-position))
- (if (and keep-props (boundp 'jit-lock-mode) jit-lock-mode
+ (if (and keep-props (if (boundp 'jit-lock-mode) jit-lock-mode)
(text-property-not-all beg end 'fontified t))
- (jit-lock-fontify-now beg end))
+ (if (fboundp 'jit-lock-fontify-now)
+ (jit-lock-fontify-now beg end)))
(push
(funcall (if keep-props
#'buffer-substring
endpt (line-end-position)))
(setq marker (make-marker))
(set-marker marker matchbeg)
- (if (and keep-props (boundp 'jit-lock-mode) jit-lock-mode
+ (if (and keep-props
+ (if (boundp 'jit-lock-mode) jit-lock-mode)
(text-property-not-all begpt endpt 'fontified t))
- (jit-lock-fontify-now begpt endpt))
+ (if (fboundp 'jit-lock-fontify-now)
+ (jit-lock-fontify-now begpt endpt)))
(setq curstring (buffer-substring begpt endpt))
;; Depropertize the string, and maybe
;; highlight the matches
(replace-match newtext fixedcase literal)
noedit)
-(defcustom query-replace-highlight t
- "*Non-nil means to highlight matches during query replacement."
- :type 'boolean
- :group 'matching)
-
-(defcustom query-replace-lazy-highlight t
- "*Controls the lazy-highlighting during query replacements.
-When non-nil, all text in the buffer matching the current match
-is highlighted lazily using isearch lazy highlighting (see
-`lazy-highlight-initial-delay' and
-`lazy-highlight-interval')."
- :type 'boolean
- :group 'matching
- :version "21.4")
-
-(defface query-replace
- '((t (:inherit isearch)))
- "Face for highlighting query replacement matches."
- :group 'matching
- :version "21.4")
-
(defun perform-replace (from-string replacements
query-flag regexp-flag delimited-flag
&optional repeat-count map start end)
;; (match-data); otherwise it is t if a match is possible at point.
(match-again t)
- (isearch-string isearch-string)
- (isearch-regexp isearch-regexp)
- (isearch-case-fold-search isearch-case-fold-search)
(message
(if query-flag
(substitute-command-keys
(regexp-quote from-string))
"\\b")))
(when query-replace-lazy-highlight
- (setq isearch-string search-string
- isearch-regexp (or delimited-flag regexp-flag)
- isearch-case-fold-search case-fold-search
- isearch-lazy-highlight-last-string nil))
+ (setq isearch-lazy-highlight-last-string nil))
(push-mark)
(undo-boundary)
(let ((inhibit-read-only
query-replace-skip-read-only))
(unless (or literal noedit)
- (replace-highlight (nth 0 real-match-data)
- (nth 1 real-match-data)))
+ (replace-highlight
+ (nth 0 real-match-data) (nth 1 real-match-data)
+ start end search-string
+ (or delimited-flag regexp-flag) case-fold-search))
(setq noedit
(replace-match-maybe-edit
next-replacement nocasify literal
;; `real-match-data'.
(while (not done)
(set-match-data real-match-data)
- (replace-highlight (match-beginning 0) (match-end 0))
+ (replace-highlight
+ (match-beginning 0) (match-end 0)
+ start end search-string
+ (or delimited-flag regexp-flag) case-fold-search)
;; Bind message-log-max so we don't fill up the message log
;; with a bunch of identical messages.
(let ((message-log-max nil))
unread-command-events))
(setq done t)))
(when query-replace-lazy-highlight
- ;; Restore isearch data for lazy highlighting
- ;; in case of isearching during recursive edit
- (setq isearch-string search-string
- isearch-regexp (or delimited-flag regexp-flag)
- isearch-case-fold-search case-fold-search)
;; Force lazy rehighlighting only after replacements
(if (not (memq def '(skip backup)))
(setq isearch-lazy-highlight-last-string nil))))
(defvar replace-overlay nil)
-(defun replace-highlight (beg end)
+(defun replace-highlight (match-beg match-end range-beg range-end
+ string regexp case-fold)
(if query-replace-highlight
(if replace-overlay
- (move-overlay replace-overlay beg end (current-buffer))
- (setq replace-overlay (make-overlay beg end))
+ (move-overlay replace-overlay match-beg match-end (current-buffer))
+ (setq replace-overlay (make-overlay match-beg match-end))
(overlay-put replace-overlay 'priority 1) ;higher than lazy overlays
(overlay-put replace-overlay 'face 'query-replace)))
(if query-replace-lazy-highlight
- (isearch-lazy-highlight-new-loop)))
+ (let ((isearch-string string)
+ (isearch-regexp regexp)
+ (isearch-case-fold-search case-fold))
+ (isearch-lazy-highlight-new-loop range-beg range-end))))
(defun replace-dehighlight ()
(when replace-overlay
(delete-overlay replace-overlay))
(when query-replace-lazy-highlight
- (isearch-lazy-highlight-cleanup lazy-highlight-cleanup)
+ (lazy-highlight-cleanup lazy-highlight-cleanup)
(setq isearch-lazy-highlight-last-string nil)))
;; arch-tag: 16b4cd61-fd40-497b-b86f-b667c4cf88e4