* gnus-art.el (gnus-mime-display-alternative): Use
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Sat, 5 Jan 2002 17:23:51 +0000 (17:23 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Sat, 5 Jan 2002 17:23:51 +0000 (17:23 +0000)
gnus-local-map-property.
(gnus-mime-display-alternative): Ditto.
(gnus-insert-mime-security-button): Ditto.
(gnus-insert-next-page-button): Ditto.
(gnus-button-prev-page): Take optional args.
(gnus-insert-prev-page-button): widget-convert.

* gnus-util.el (gnus-local-map-property): New function.

* gnus-art.el (gnus-prev-page-map): Use parent map.
(gnus-next-page-map): Ditto.

* gnus-spec.el (gnus-parse-format): Clean up.
(gnus-parse-format): Do complex formatting for %=.

* gnus-fun.el (gnus-display-x-face-in-from): Add the string
"X-Face: " to the data in the built-in scenario.

* gnus-spec.el (gnus-parse-simple-format): Use gnus-pad-form.
(gnus-correct-pad-form): Renamed.
(gnus-tilde-max-form): Clean up.
(gnus-pad-form): Use gnus-use-correct-string-widths.

* gnus-fun.el (gnus-display-x-face-in-from): Use native xface
support if that is available.

lisp/ChangeLog
lisp/gnus-art.el
lisp/gnus-fun.el
lisp/gnus-spec.el
lisp/gnus-util.el

index e0237df..fbba9f0 100644 (file)
@@ -1,5 +1,32 @@
 2002-01-05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
+       * gnus-art.el (gnus-mime-display-alternative): Use
+       gnus-local-map-property. 
+       (gnus-mime-display-alternative): Ditto.
+       (gnus-insert-mime-security-button): Ditto.
+       (gnus-insert-next-page-button): Ditto.
+       (gnus-button-prev-page): Take optional args.
+       (gnus-insert-prev-page-button): widget-convert.
+
+       * gnus-util.el (gnus-local-map-property): New function.
+
+       * gnus-art.el (gnus-prev-page-map): Use parent map.
+       (gnus-next-page-map): Ditto.
+
+       * gnus-spec.el (gnus-parse-format): Clean up.
+       (gnus-parse-format): Do complex formatting for %=.
+
+       * gnus-fun.el (gnus-display-x-face-in-from): Add the string
+       "X-Face: " to the data in the built-in scenario.
+
+       * gnus-spec.el (gnus-parse-simple-format): Use gnus-pad-form.
+       (gnus-correct-pad-form): Renamed.
+       (gnus-tilde-max-form): Clean up.
+       (gnus-pad-form): Use gnus-use-correct-string-widths.
+
+       * gnus-fun.el (gnus-display-x-face-in-from): Use native xface
+       support if that is available.
+
        * gnus-sum.el (gnus-thread-highest-number): New function.
        (gnus-thread-sort-by-most-recent-thread): New function.
        (gnus-thread-sort-functions): Doc fix.
index 3297117..5066ba9 100644 (file)
@@ -3972,14 +3972,11 @@ If no internal viewer is available, use an external viewer."
     (setq b (point))
     (gnus-eval-format
      gnus-mime-button-line-format gnus-mime-button-line-format-alist
-     `(keymap ,gnus-mime-button-map
-             ,@(if (>= (string-to-number emacs-version) 21)
-                   nil
-                 (list 'local-map gnus-mime-button-map))
-             gnus-callback gnus-mm-display-part
-             gnus-part ,gnus-tmp-id
-             article-type annotation
-             gnus-data ,handle))
+     `(,@(gnus-local-map-property gnus-mime-button-map)
+        gnus-callback gnus-mm-display-part
+        gnus-part ,gnus-tmp-id
+        article-type annotation
+        gnus-data ,handle))
     (setq e (point))
     (widget-convert-button
      'link b e
@@ -4232,12 +4229,9 @@ If no internal viewer is available, use an external viewer."
                       ',gnus-article-mime-handle-alist))
               (gnus-mime-display-alternative
                ',ihandles ',not-pref ',begend ,id))
-            ,@(if (>= (string-to-number emacs-version) 21)
-                  nil ;; XEmacs doesn't care
-                (list 'local-map gnus-mime-button-map))
+            ,@(gnus-local-map-property gnus-mime-button-map)
             ,gnus-mouse-face-prop ,gnus-article-mouse-face
             face ,gnus-article-button-face
-            keymap ,gnus-mime-button-map
             gnus-part ,id
             gnus-data ,handle))
          (widget-convert-button 'link from (point)
@@ -4259,12 +4253,9 @@ If no internal viewer is available, use an external viewer."
                         ',gnus-article-mime-handle-alist))
                 (gnus-mime-display-alternative
                  ',ihandles ',handle ',begend ,id))
-              ,@(if (>= (string-to-number emacs-version) 21)
-                    nil ;; XEmacs doesn't care
-                  (list 'local-map gnus-mime-button-map))
+              ,@(gnus-local-map-property gnus-mime-button-map)
               ,gnus-mouse-face-prop ,gnus-article-mouse-face
               face ,gnus-article-button-face
-              keymap ,gnus-mime-button-map
               gnus-part ,id
               gnus-data ,handle))
            (widget-convert-button 'link from (point)
@@ -5518,28 +5509,48 @@ specified by `gnus-button-alist'."
 (defvar gnus-next-page-line-format "%{%(Next page...%)%}\n")
 (defvar gnus-prev-page-line-format "%{%(Previous page...%)%}\n")
 
-(defvar gnus-prev-page-map nil)
-(unless gnus-prev-page-map
-  (setq gnus-prev-page-map (make-sparse-keymap))
-  (define-key gnus-prev-page-map gnus-mouse-2 'gnus-button-prev-page)
-  (define-key gnus-prev-page-map "\r" 'gnus-button-prev-page))
+(defvar gnus-prev-page-map
+  (let ((map (make-sparse-keymap)))
+    (unless (>= emacs-major-version 21)
+      ;; XEmacs doesn't care.
+      (set-keymap-parent map gnus-article-mode-map))
+    (define-key map gnus-mouse-2 'gnus-button-prev-page)
+    (define-key map "\r" 'gnus-button-prev-page)
+    map))
 
 (defun gnus-insert-prev-page-button ()
-  (let ((buffer-read-only nil))
+  (let ((b (point))
+       (buffer-read-only nil))
     (gnus-eval-format
      gnus-prev-page-line-format nil
-     `(gnus-prev t local-map ,gnus-prev-page-map
-                gnus-callback gnus-article-button-prev-page
-                article-type annotation))))
-
-(defvar gnus-next-page-map nil)
-(unless gnus-next-page-map
-  (setq gnus-next-page-map (make-keymap))
-  (suppress-keymap gnus-prev-page-map)
-  (define-key gnus-next-page-map gnus-mouse-2 'gnus-button-next-page)
-  (define-key gnus-next-page-map "\r" 'gnus-button-next-page))
-
-(defun gnus-button-next-page ()
+     `(,@(gnus-local-map-property gnus-prev-page-map)
+        gnus-prev t 
+        gnus-callback gnus-article-button-prev-page
+        article-type annotation))
+    (widget-convert-button
+     'link b (point)
+     :action 'gnus-button-prev-page
+     :button-keymap gnus-prev-page-map)))
+
+(defvar gnus-prev-page-map
+  (let ((map (make-sparse-keymap)))
+    (unless (>= emacs-major-version 21)
+      ;; XEmacs doesn't care.
+      (set-keymap-parent map gnus-article-mode-map))
+    (define-key map gnus-mouse-2 'gnus-button-prev-page)
+    (define-key map "\r" 'gnus-button-prev-page)
+    map))
+
+(defvar gnus-next-page-map
+  (let ((map (make-sparse-keymap)))
+    (unless (>= emacs-major-version 21)
+      ;; XEmacs doesn't care.
+      (set-keymap-parent map gnus-article-mode-map))
+    (define-key map gnus-mouse-2 'gnus-button-next-page)
+    (define-key map "\r" 'gnus-button-next-page)
+    map))
+
+(defun gnus-button-next-page (&optional args more-args)
   "Go to the next page."
   (interactive)
   (let ((win (selected-window)))
@@ -5547,7 +5558,7 @@ specified by `gnus-button-alist'."
     (gnus-article-next-page)
     (select-window win)))
 
-(defun gnus-button-prev-page ()
+(defun gnus-button-prev-page (&optional args more-args)
   "Go to the prev page."
   (interactive)
   (let ((win (selected-window)))
@@ -5556,12 +5567,17 @@ specified by `gnus-button-alist'."
     (select-window win)))
 
 (defun gnus-insert-next-page-button ()
-  (let ((buffer-read-only nil))
+  (let ((b (point))
+       (buffer-read-only nil))
     (gnus-eval-format gnus-next-page-line-format nil
-                     `(gnus-next
-                       t local-map ,gnus-next-page-map
-                       gnus-callback gnus-article-button-next-page
-                       article-type annotation))))
+                     `(,@(gnus-local-map-property gnus-next-page-map)
+                         gnus-next t 
+                         gnus-callback gnus-article-button-next-page
+                         article-type annotation))
+    (widget-convert-button
+     'link b (point)
+     :action 'gnus-button-next-page
+     :button-keymap gnus-next-page-map)))
 
 (defun gnus-article-button-next-page (arg)
   "Go to the next page."
@@ -5890,14 +5906,11 @@ For example:
     (gnus-eval-format
      gnus-mime-security-button-line-format
      gnus-mime-security-button-line-format-alist
-     `(keymap ,gnus-mime-security-button-map
-             ,@(if (>= (string-to-number emacs-version) 21)
-                   nil ;; XEmacs doesn't care
-                 (list 'local-map gnus-mime-security-button-map))
-             gnus-callback gnus-mime-security-press-button
-             gnus-line-format ,gnus-mime-security-button-line-format
-             article-type annotation
-             gnus-data ,handle))
+     `(,@(gnus-local-map-property gnus-mime-security-button-map)
+        gnus-callback gnus-mime-security-press-button
+        gnus-line-format ,gnus-mime-security-button-line-format
+        article-type annotation
+        gnus-data ,handle))
     (setq e (point))
     (widget-convert-button
      'link b e
index 9b033c3..978bccf 100644 (file)
@@ -169,17 +169,22 @@ colors of the displayed X-Faces."
   "Display the X-Face DATA in the From header."
   (let ((default-enable-multibyte-characters nil)
        pbm)
-    (when (and (gnus-image-type-available-p 'pbm)
-              (setq pbm (uncompface data)))
+    (when (or (gnus-image-type-available-p 'xface)
+             (and (gnus-image-type-available-p 'pbm)
+                  (setq pbm (uncompface data))))
       (save-excursion
        (save-restriction
          (article-narrow-to-head)
          (gnus-article-goto-header "from")
-         (gnus-add-image 'xface (gnus-put-image
-                                 (gnus-create-image
-                                  pbm 'pbm t
-                                  :ascent 'center
-                                  :face 'gnus-x-face)))
+         (gnus-add-image
+          'xface
+          (gnus-put-image
+           (if (gnus-image-type-available-p 'xface)
+               (gnus-create-image
+                (concat "X-Face: " data)
+                'xface t :ascent 'center :face 'gnus-x-face)
+             (gnus-create-image
+              pbm 'pbm t :ascent 'center :face 'gnus-x-face))))
          (gnus-add-wash-type 'xface))))))
 
 (provide 'gnus-fun)
index 92a9e80..fcdef46 100644 (file)
@@ -30,7 +30,7 @@
 
 (require 'gnus)
 
-(defcustom gnus-use-correct-string-widths t
+(defcustom gnus-use-correct-string-widths (featurep 'xemacs)
   "*If non-nil, use correct functions for dealing with wide characters."
   :group 'gnus-format
   :type 'boolean)
   "Return a form that limits EL to MAX-WIDTH."
   (let ((max (abs max-width))
        (length-fun (if gnus-use-correct-string-widths
-                     'gnus-correct-length
-                   'length))
+                       'gnus-correct-length
+                     'length))
        (substring-fun (if gnus-use-correct-string-widths
-                      'gnus-correct-substring
-                    'substring)))
+                          'gnus-correct-substring
+                        'substring)))
     (if (symbolp el)
        `(if (> (,length-fun ,el) ,max)
             ,(if (< max-width 0)
        (if (equal val ,ignore-value)
           "" val))))
 
-(defun gnus-correct-pad-form (el pad-width)
+(defun gnus-pad-form (el pad-width)
   "Return a form that pads EL to PAD-WIDTH accounting for multi-column
 characters correctly. This is because `format' may pad to columns or to
 characters when given a pad value."
   (let ((pad (abs pad-width))
        (side (< 0 pad-width)))
     (if (symbolp el)
-       `(let ((need (- ,pad (gnus-correct-length ,el))))
+       `(let ((need (- ,pad (,(if gnus-use-correct-string-widths
+                                  'gnus-correct-length
+                                'length)
+                             ,el))))
           (if (> need 0)
               (concat ,(when side '(make-string need ?\ ))
                       ,el
                       ,(when (not side) '(make-string need ?\ )))
             ,el))
       `(let* ((val (eval ,el))
-             (need (- ,pad (gnus-correct-length ,el))))
+             (need (- ,pad (,(if gnus-use-correct-string-widths
+                                 'gnus-correct-length
+                               'length) ,el))))
         (if (> need 0)
             (concat ,(when side '(make-string need ?\ ))
                     ,el
@@ -375,9 +380,9 @@ characters when given a pad value."
   ;; them will have the balloon-help text property.
   (let ((case-fold-search nil))
     (if (string-match
-       "\\`\\(.*\\)%[0-9]?[{(«]\\(.*\\)%[0-9]?[»})]\\(.*\n?\\)\\'"
-       format)
-      (gnus-parse-complex-format format spec-alist)
+        "\\`\\(.*\\)%[0-9]?[{(«]\\(.*\\)%[0-9]?[»})]\\(.*\n?\\)\\'\\|%[-0-9]*="
+        format)
+       (gnus-parse-complex-format format spec-alist)
       ;; This is a simple format.
       (gnus-parse-simple-format format spec-alist insert))))
 
@@ -572,7 +577,7 @@ characters when given a pad value."
                  (when max-width
                    (setq el (gnus-tilde-max-form el max-width)))
                  (when pad-width
-                   (setq el (gnus-correct-pad-form el pad-width)))
+                   (setq el (gnus-pad-form el pad-width)))
                  (push el flist)))
            (insert elem-type)
            (push (car elem) flist))))
index 14e1e59..96a9966 100644 (file)
@@ -1220,7 +1220,17 @@ SPEC is a predicate specifier that contains stuff like `or', `and',
     (if (memq (car spec) '(or and not))
        `(,(car spec) ,@(mapcar 'gnus-make-predicate-1 (cdr spec)))
       (error "Invalid predicate specifier: %s" spec)))))
-  
+
+(defun gnus-local-map-property (map)
+  "Return a list suitable for a text property list specifying keymap MAP."
+  (cond
+   ((featurep 'xemacs)
+    (list 'keymap map))
+   ((>= emacs-major-version 21)
+    nil)
+   (t
+    (list 'local-map map))))
+
 (provide 'gnus-util)
 
 ;;; gnus-util.el ends here