;;; gnus-spec.el --- format spec functions for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
;; Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
(defcustom gnus-use-correct-string-widths t
"*If non-nil, use correct functions for dealing with wide characters."
+ :version "21.4"
:group 'gnus-format
:type 'boolean)
(defcustom gnus-make-format-preserve-properties (featurep 'xemacs)
"*If non-nil, use a replacement `format' function which preserves
text properties. This is only needed on XEmacs, as FSF Emacs does this anyway."
+ :version "21.4"
:group 'gnus-format
:type 'boolean)
gnus-format-specs-compiled nil)
(gnus-product-variable-touch 'gnus-format-specs
'gnus-format-specs-compiled))
- ;; Flush the group format spec cache if there's the grouplens stuff.
- (let ((spec (assq 'group gnus-format-specs)))
- (when (and (memq 'group types)
- (string-match " gnus-tmp-grouplens[ )]"
- (gnus-prin1-to-string (cdr spec))))
- (setq gnus-format-specs (delq spec gnus-format-specs)
- spec (assq 'group gnus-format-specs-compiled)
- gnus-format-specs-compiled (delq spec gnus-format-specs-compiled))))
+ ;; Flush the group format spec cache if there's the grouplens stuff
+ ;; or it doesn't support decoded group names.
+ (when (memq 'group types)
+ (let* ((spec (assq 'group gnus-format-specs))
+ (sspec (gnus-prin1-to-string (nth 2 spec))))
+ (when (or (string-match " gnus-tmp-grouplens[ )]" sspec)
+ (not (string-match " gnus-tmp-decoded-group[ )]" sspec)))
+ (setq gnus-format-specs (delq spec gnus-format-specs)
+ spec (assq 'group gnus-format-specs-compiled)
+ gnus-format-specs-compiled (delq spec
+ gnus-format-specs-compiled)))))
;; Go through all the formats and see whether they need updating.
(let (new-format type val unchanged updated)
(defun gnus-spec-tab (column)
(if (> column 0)
- `(insert (make-string (max (- ,column (current-column)) 0) ? ))
+ `(insert-char ? (max (- ,column (current-column)) 0))
(let ((column (abs column)))
- (if gnus-use-correct-string-widths
- `(progn
- (if (> (current-column) ,column)
- (while (progn
- (delete-backward-char 1)
- (> (current-column) ,column))))
- (insert (make-string (max (- ,column (current-column)) 0) ? )))
- `(progn
- (if (> (current-column) ,column)
- (delete-region (point)
- (- (point) (- (current-column) ,column)))
- (insert (make-string (max (- ,column (current-column)) 0)
- ? ))))))))
+ `(if (> (current-column) ,column)
+ (let ((end (point)))
+ (if (= (move-to-column ,column) ,column)
+ (delete-region (point) end)
+ (delete-region (1- (point)) end)
+ (insert " ")))
+ (insert-char ? (max (- ,column (current-column)) 0))))))
(defun gnus-correct-length (string)
"Return the correct width of STRING."