From 5c927015eeba89a83299536e7b2ffcf294fdbc6c Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 14 Jun 1993 18:53:40 +0000 Subject: [PATCH] (picture-replace-match): New function. --- lisp/textmodes/picture.el | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/lisp/textmodes/picture.el b/lisp/textmodes/picture.el index b8a1ec0c5c2..3b6a5fe232c 100644 --- a/lisp/textmodes/picture.el +++ b/lisp/textmodes/picture.el @@ -263,6 +263,28 @@ With positive argument insert that many lines." (forward-line -1) (insert contents)))) +;; Like replace-match, but overwrites. +(defun picture-replace-match (newtext fixedcase literal) + (let (ocolumn change pos) + (goto-char (setq pos (match-end 0))) + (setq ocolumn (current-column)) + ;; Make the replacement and undo it, to see how it changes the length. + (let ((buffer-undo-list nil) + list1) + (replace-match newtext fixedcase literal) + (setq change (- (current-column) ocolumn)) + (setq list1 buffer-undo-list) + (while list1 + (setq list1 (primitive-undo 1 list1)))) + (goto-char pos) + (if (> change 0) + (delete-region (point) + (progn + (move-to-column-force (+ change (current-column))) + (point)))) + (replace-match newtext fixedcase literal) + (if (< change 0) + (insert-char ?\ (- change))))) ;; Picture Tabs