diff options
author | Richard M. Stallman <rms@gnu.org> | 2005-10-09 15:37:35 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 2005-10-09 15:37:35 +0000 |
commit | 827d67f3b670d6dee517ebcfb00fe81f80519bdb (patch) | |
tree | 256ae6a62527fdd4f07ee0d6e8e58d9398f227b6 /lisp/gnus | |
parent | 865729da260be99e14c91bbbea3a8108cf7d828c (diff) | |
download | emacs-827d67f3b670d6dee517ebcfb00fe81f80519bdb.tar.gz |
(format-spec): Propagate text properties of % spec.
Diffstat (limited to 'lisp/gnus')
-rw-r--r-- | lisp/gnus/format-spec.el | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/lisp/gnus/format-spec.el b/lisp/gnus/format-spec.el index fc34b50bc11..b2fde53b3f1 100644 --- a/lisp/gnus/format-spec.el +++ b/lisp/gnus/format-spec.el @@ -33,7 +33,8 @@ "Return a string based on FORMAT and SPECIFICATION. FORMAT is a string containing `format'-like specs like \"bash %u %k\", while SPECIFICATION is an alist mapping from format spec characters -to values." +to values. Any text properties on a %-spec itself are propagated to +the text that it generates." (with-temp-buffer (insert format) (goto-char (point-min)) @@ -47,10 +48,17 @@ to values." (let* ((num (match-string 1)) (spec (string-to-char (match-string 2))) (val (cdr (assq spec specification)))) - (delete-region (1- (match-beginning 0)) (match-end 0)) (unless val (error "Invalid format character: %s" spec)) - (insert (format (concat "%" num "s") val)))) + ;; Pad result to desired length. + (let ((text (format (concat "%" num "s") val))) + ;; Insert first, to preserve text properties. + (insert-and-inherit text) + ;; Delete the specifier body. + (delete-region (+ (match-beginning 0) (length text)) + (+ (match-end 0) (length text))) + ;; Delete the percent sign. + (delete-region (1- (match-beginning 0)) (match-beginning 0))))) ;; Signal an error on bogus format strings. (t (error "Invalid format string")))) |