From 856321e221094e93285cd3e03b6699e1152793de Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 21 Aug 1995 01:15:25 +0000 Subject: [PATCH] (dired-string-replace-match): Simplify using replace-match. --- lisp/dired.el | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/lisp/dired.el b/lisp/dired.el index 1385c79853..9b0ba468fb 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -1177,8 +1177,6 @@ Optional arg NO-ERROR-IF-NOT-FILEP means return nil if no filename on file (and file (concat (dired-current-directory localp) file))))) -;; Cloning replace-match to work on strings instead of in buffer: -;; The FIXEDCASE parameter of replace-match is not implemented. (defun dired-string-replace-match (regexp string newtext &optional literal global) "Replace first match of REGEXP in STRING with NEWTEXT. @@ -1186,25 +1184,15 @@ If it does not match, nil is returned instead of the new string. Optional arg LITERAL means to take NEWTEXT literally. Optional arg GLOBAL means to replace all matches." (if global - (let ((result "") (start 0) mb me) - (while (string-match regexp string start) - (setq mb (match-beginning 0) - me (match-end 0) - result (concat result - (substring string start mb) - (if literal - newtext - (dired-expand-newtext string newtext))) - start me)) - (if mb ; matched at least once - (concat result (substring string start)) - nil)) - ;; not GLOBAL + (let ((start 0)) + (while (string-match regexp string start) + (let ((from-end (- (length string) (match-end 0)))) + (setq string (replace-match newtext t literal string)) + (setq start (- (length string) from-end)))) + string) (if (not (string-match regexp string 0)) nil - (concat (substring string 0 (match-beginning 0)) - (if literal newtext (dired-expand-newtext string newtext)) - (substring string (match-end 0)))))) + (replace-match newtext t literal string)))) (defun dired-make-absolute (file &optional dir) ;;"Convert FILE (a pathname relative to DIR) to an absolute pathname." -- 2.20.1