Revision: miles@gnu.org--gnu-2005/gnus--devo--0--patch-37
[gnus] / lisp / gnus-spec.el
index d39316a..201c5dd 100644 (file)
@@ -1,5 +1,5 @@
 ;;; 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 (featurep 'xemacs)
   "*If non-nil, use correct functions for dealing with wide characters."
+  :version "22.1"
   :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 "22.1"
   :group 'gnus-format
   :type 'boolean)
 
@@ -194,12 +196,14 @@ Return a list of updated types."
            (not (equal emacs-version
                        (cdr (assq 'version gnus-format-specs)))))
     (setq gnus-format-specs nil))
-  ;; 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))))
+  ;; 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)))))
 
   ;; Go through all the formats and see whether they need updating.
   (let (new-format entry type val updated)
@@ -279,21 +283,15 @@ Return a list of updated types."
 
 (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."