]> code.delx.au - gnu-emacs/blobdiff - lisp/net/newst-reader.el
Sync with Tramp 2.3.0
[gnu-emacs] / lisp / net / newst-reader.el
index dd076bcf4f01547c7f7e9c0c031c303500e90e3b..9c29216ccaf5cf34e9bccc8f68e175cc9d432734 100644 (file)
@@ -1,11 +1,10 @@
 ;;; newst-reader.el --- Generic RSS reader functions.
 
-;; Copyright (C) 2003-201 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2016 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <ulf.jasper@web.de>
 ;; Filename:    newst-reader.el
 ;; URL:         http://www.nongnu.org/newsticker
-;; Time-stamp:  "6. Dezember 2009, 19:16:38 (ulf)"
 ;; Package:     newsticker
 
 ;; ======================================================================
@@ -67,6 +66,13 @@ This must be one of the functions `newsticker-plainview' or
   :group 'newsticker-reader)
 
 ;; image related things
+(defcustom newsticker-download-logos
+  t
+  "If non-nil newsticker downloads logo images of subscribed feeds."
+  :version "25.1"
+  :type 'boolean
+  :group 'newsticker-reader)
+
 (defcustom newsticker-enable-logo-manipulations
   t
   "If non-nil newsticker manipulates logo images.
@@ -101,32 +107,18 @@ window is used when filling.  See also `newsticker-justification'."
   :group 'newsticker-reader)
 
 (defcustom newsticker-html-renderer
-  nil
+  (if (fboundp 'libxml-parse-html-region)
+      #'shr-render-region)
   "Function for rendering HTML contents.
-If non-nil, newsticker.el will call this function whenever it finds
-HTML-like tags in item descriptions.  Possible functions are, for
-example, `w3m-region', `w3-region', and (if you have htmlr.el installed)
+If non-nil, newsticker.el will call this function whenever it
+finds HTML-like tags in item descriptions.
+Possible functions include `shr-render-region', `w3m-region', `w3-region', and
 `newsticker-htmlr-render'.
-
-In order to make sure that the HTML renderer is loaded when you
-run newsticker, you should add one of the following statements to
-your .emacs.  If you use w3m,
-
-  (autoload 'w3m-region \"w3m\"
-    \"Render region in current buffer and replace with result.\" t)
-
-  (autoload 'w3m-toggle-inline-image \"w3m\"
-    \"Toggle the visibility of an image under point.\" t)
-
-or, if you use w3,
-
-  (require 'w3-auto)
-
-or, if you use htmlr
-
-  (require 'htmlr)"
+Newsticker automatically loads the respective package w3m, w3, or
+htmlr if this option is set."
   :type '(choice :tag "Function"
                  (const :tag "None" nil)
+                 (const :tag "SHR" shr-render-region)
                  (const :tag "w3" w3-region)
                  (const :tag "w3m" w3m-region)
                  (const :tag "htmlr" newsticker-htmlr-render))
@@ -146,26 +138,23 @@ See `format-time-string' for a list of valid specifiers."
   :group 'newsticker-reader)
 
 (defface newsticker-feed-face
-  '((((class color) (background dark))
-     (:family "helvetica" :bold t :height 1.2 :foreground "misty rose"))
-    (((class color) (background light))
-     (:family "helvetica" :bold t :height 1.2 :foreground "black")))
+  '((default :weight bold :height 1.2)
+    (((class color) (background dark))  :foreground "white")
+    (((class color) (background light)) :foreground "black"))
   "Face for news feeds."
   :group 'newsticker-faces)
 
 (defface newsticker-extra-face
-  '((((class color) (background dark))
-     (:italic t :foreground "gray50" :height 0.8))
-    (((class color) (background light))
-     (:italic t :foreground "gray50" :height 0.8)))
+  '((default :slant italic :height 0.8)
+    (((class color) (background dark))  :foreground "gray50")
+    (((class color) (background light)) :foreground "gray50"))
   "Face for newsticker dates."
   :group 'newsticker-faces)
 
 (defface newsticker-enclosure-face
-  '((((class color) (background dark))
-     (:bold t :background "orange"))
-    (((class color) (background light))
-     (:bold t :background "orange")))
+  '((default :weight bold)
+    (((class color) (background dark))  :background "orange")
+    (((class color) (background light)) :background "orange"))
   "Face for enclosed elements."
   :group 'newsticker-faces)
 
@@ -203,15 +192,18 @@ KEYMAP will be applied."
                                    'nt-type 'desc))
         (insert "\n")))))
 
-(defun newsticker--print-extra-elements (item keymap)
+(defun newsticker--print-extra-elements (item keymap &optional htmlish)
   "Insert extra-elements of ITEM in a pretty form into the current buffer.
-KEYMAP is applied."
+KEYMAP is applied.  If HTMLISH is non-nil then HTML-markup is used
+for formatting."
   (let ((ignored-elements '(items link title description content
-                                  content:encoded dc:subject
-                                  dc:date entry item guid pubDate
+                                  content:encoded encoded
+                                  dc:subject subject
+                                  dc:date date entry item guid pubDate
                                   published updated
                                   enclosure))
         (left-column-width 1))
+    (if htmlish (insert "<ul>"))
     (mapc (lambda (extra-element)
             (when (listp extra-element) ;; take care of broken xml
                                         ;; data, 2007-05-25
@@ -226,15 +218,20 @@ KEYMAP is applied."
               (unless (memq (car extra-element) ignored-elements)
                 (newsticker--do-print-extra-element extra-element
                                                     left-column-width
-                                                    keymap))))
-          (newsticker--extra item))))
+                                                    keymap
+                                                    htmlish))))
+          (newsticker--extra item))
+    (if htmlish (insert "</ul>"))))
 
-(defun newsticker--do-print-extra-element (extra-element width keymap)
+(defun newsticker--do-print-extra-element (extra-element width keymap htmlish)
   "Actually print an EXTRA-ELEMENT using the given WIDTH.
-KEYMAP is applied."
+KEYMAP is applied.  If HTMLISH is non-nil then HTML-markup is used
+for formatting."
   (let ((name (symbol-name (car extra-element))))
-    (insert (format "%s: " name))
-    (insert (make-string (- width (length name)) ? )))
+    (if htmlish
+        (insert (format "<li>%s: " name))
+      (insert (format "%s: " name))
+      (insert (make-string (- width (length name)) ? ))))
   (let (;;(attributes (cadr extra-element)) ;FIXME!!!!
         (contents (cddr extra-element)))
     (cond ((listp contents)
@@ -255,30 +252,58 @@ KEYMAP is applied."
                  contents))
           (t
            (insert (format "%s" contents))))
-    (insert "\n")))
+    (if htmlish
+        (insert "</li>")
+      (insert "\n"))))
 
-(defun newsticker--image-read (feed-name-symbol disabled)
+(defun newsticker--image-read (feed-name-symbol disabled &optional max-height)
   "Read the cached image for FEED-NAME-SYMBOL from disk.
 If DISABLED is non-nil the image will be converted to a disabled look
-\(unless `newsticker-enable-logo-manipulations' is not t\).
+\(unless `newsticker-enable-logo-manipulations' is not t).
+Optional argument MAX-HEIGHT specifies the maximal image height.
 Return the image."
   (let ((image-name (concat (newsticker--images-dir)
-                            (symbol-name feed-name-symbol)))
-        (img nil))
+                            (symbol-name feed-name-symbol))))
     (when (file-exists-p image-name)
       (condition-case error-data
-          (setq img (create-image
-                     image-name nil nil
-                     :conversion (and newsticker-enable-logo-manipulations
-                                      disabled
-                                      'disabled)
-                     :mask (and newsticker-enable-logo-manipulations
-                                'heuristic)
-                     :ascent 70))
+          (create-image
+           image-name
+           (and (fboundp 'imagemagick-types)
+                (imagemagick-types)
+                'imagemagick)
+           nil
+           :conversion (and newsticker-enable-logo-manipulations
+                            disabled
+                            'disabled)
+           :mask (and newsticker-enable-logo-manipulations
+                      'heuristic)
+           :ascent 100
+           :max-height max-height)
         (error
          (message "Error: cannot create image for %s: %s"
-                  feed-name-symbol error-data))))
-    img))
+                  feed-name-symbol error-data))))))
+
+(defun newsticker--icon-read (feed-name-symbol)
+  "Read the cached icon for FEED-NAME-SYMBOL from disk.
+Return the image."
+  (catch 'icon
+    (when (file-exists-p (newsticker--icons-dir))
+      (dolist (file (directory-files (newsticker--icons-dir) t
+                             (concat (symbol-name feed-name-symbol) "\\..*")))
+        (condition-case error-data
+            (throw 'icon (create-image
+                          file (and (fboundp 'imagemagick-types)
+                                    (imagemagick-types)
+                                    'imagemagick)
+                          nil
+                          :ascent 'center
+                          :max-width 16
+                          :max-height 16))
+          (error
+           (message "Error: cannot create icon for %s: %s"
+                    feed-name-symbol error-data)))))
+    ;; Fallback: default icon.
+    (find-image '((:type png :file "newsticker/rss-feed.png" :ascent center)))))
 
 ;; the functions we need for retrieval and display
 ;;;###autoload
@@ -286,871 +311,19 @@ Return the image."
   "Start reading news.  You may want to bind this to a key."
   (interactive)
   (newsticker-start t) ;; will start only if not running
+  ;; Load the html rendering packages
+  (if newsticker-html-renderer
+      (cond ((eq newsticker-html-renderer 'w3m-region)
+             (require 'w3m))
+            ((eq newsticker-html-renderer 'w3-region)
+             (require 'w3-auto))
+            ((eq newsticker-html-renderer 'newsticker-htmlr-render)
+             (require 'htmlr))))
   (funcall newsticker-frontend))
 
 ;; ======================================================================
 ;;; Toolbar
 ;; ======================================================================
-(defconst newsticker--next-item-image
-  (and (fboundp 'image-type-available-p)
-       (image-type-available-p 'xpm)
-       (create-image "/* XPM */
-static char * next_xpm[] = {
-\"24 24 42 1\",
-\"     c None\",
-\".    c #000000\",
-\"+    c #7EB6DE\",
-\"@    c #82BBE2\",
-\"#    c #85BEE4\",
-\"$    c #88C1E7\",
-\"%    c #8AC3E8\",
-\"&    c #87C1E6\",
-\"*    c #8AC4E9\",
-\"=    c #8CC6EA\",
-\"-    c #8CC6EB\",
-\";    c #88C2E7\",
-\">    c #8BC5E9\",
-\",    c #8DC7EB\",
-\"'    c #87C0E6\",
-\")    c #8AC4E8\",
-\"!    c #8BC5EA\",
-\"~    c #8BC4E9\",
-\"{    c #88C1E6\",
-\"]    c #89C3E8\",
-\"^    c #86BFE5\",
-\"/    c #83BBE2\",
-\"(    c #82BBE1\",
-\"_    c #86C0E5\",
-\":    c #87C0E5\",
-\"<    c #83BCE2\",
-\"[    c #81B9E0\",
-\"}    c #81BAE1\",
-\"|    c #78B0D9\",
-\"1    c #7BB3DB\",
-\"2    c #7DB5DD\",
-\"3    c #7DB6DD\",
-\"4    c #72A9D4\",
-\"5    c #75ACD6\",
-\"6    c #76AED7\",
-\"7    c #77AFD8\",
-\"8    c #6BA1CD\",
-\"9    c #6EA4CF\",
-\"0    c #6FA6D1\",
-\"a    c #6298C6\",
-\"b    c #659BC8\",
-\"c    c #5C91C0\",
-\"                        \",
-\"                        \",
-\"       .                \",
-\"       ..               \",
-\"       .+.              \",
-\"       .@#.             \",
-\"       .#$%.            \",
-\"       .&*=-.           \",
-\"       .;>,,,.          \",
-\"       .;>,,,=.         \",
-\"       .')!==~;.        \",
-\"       .#{]*%;^/.       \",
-\"       .(#_':#<.        \",
-\"       .+[@</}.         \",
-\"       .|1232.          \",
-\"       .4567.           \",
-\"       .890.            \",
-\"       .ab.             \",
-\"       .c.              \",
-\"       ..               \",
-\"       .                \",
-\"                        \",
-\"                        \",
-\"                        \"};
-"
-                     'xpm t))
-  "Image for the next item button.")
-
-(defconst newsticker--previous-item-image
-  (and (fboundp 'image-type-available-p)
-       (image-type-available-p 'xpm)
-       (create-image "/* XPM */
-static char * previous_xpm[] = {
-\"24 24 39 1\",
-\"     c None\",
-\".    c #000000\",
-\"+    c #7BB3DB\",
-\"@    c #83BCE2\",
-\"#    c #7FB8DF\",
-\"$    c #89C2E7\",
-\"%    c #86BFE5\",
-\"&    c #83BBE2\",
-\"*    c #8CC6EA\",
-\"=    c #8BC4E9\",
-\"-    c #88C2E7\",
-\";    c #85BEE4\",
-\">    c #8DC7EB\",
-\",    c #89C3E8\",
-\"'    c #8AC4E8\",
-\")    c #8BC5EA\",
-\"!    c #88C1E6\",
-\"~    c #8AC4E9\",
-\"{    c #8AC3E8\",
-\"]    c #86C0E5\",
-\"^    c #87C0E6\",
-\"/    c #87C0E5\",
-\"(    c #82BBE2\",
-\"_    c #81BAE1\",
-\":    c #7FB7DF\",
-\"<    c #7DB6DD\",
-\"[    c #7DB5DD\",
-\"}    c #7CB4DC\",
-\"|    c #79B1DA\",
-\"1    c #76ADD7\",
-\"2    c #77AFD8\",
-\"3    c #73AAD4\",
-\"4    c #70A7D1\",
-\"5    c #6EA5D0\",
-\"6    c #6CA2CE\",
-\"7    c #689ECB\",
-\"8    c #6399C7\",
-\"9    c #6095C4\",
-\"0    c #5C90C0\",
-\"                        \",
-\"                        \",
-\"                .       \",
-\"               ..       \",
-\"              .+.       \",
-\"             .@#.       \",
-\"            .$%&.       \",
-\"           .*=-;.       \",
-\"          .>>*,%.       \",
-\"         .>>>*,%.       \",
-\"        .')**=-;.       \",
-\"       .;!,~{-%&.       \",
-\"        .;]^/;@#.       \",
-\"         .(@&_:+.       \",
-\"          .<[}|1.       \",
-\"           .2134.       \",
-\"            .567.       \",
-\"             .89.       \",
-\"              .0.       \",
-\"               ..       \",
-\"                .       \",
-\"                        \",
-\"                        \",
-\"                        \"};
-"
-                     'xpm t))
-  "Image for the previous item button.")
-
-(defconst newsticker--previous-feed-image
-  (and (fboundp 'image-type-available-p)
-       (image-type-available-p 'xpm)
-       (create-image "/* XPM */
-static char * prev_feed_xpm[] = {
-\"24 24 52 1\",
-\"     c None\",
-\".    c #000000\",
-\"+    c #70A7D2\",
-\"@    c #75ADD6\",
-\"#    c #71A8D3\",
-\"$    c #79B1DA\",
-\"%    c #7BB3DB\",
-\"&    c #7DB5DD\",
-\"*    c #83BBE2\",
-\"=    c #7EB6DE\",
-\"-    c #78B0D9\",
-\";    c #7FB7DE\",
-\">    c #88C2E7\",
-\",    c #85BEE4\",
-\"'    c #80B9E0\",
-\")    c #80B8DF\",
-\"!    c #8CC6EA\",
-\"~    c #89C3E8\",
-\"{    c #86BFE5\",
-\"]    c #81BAE1\",
-\"^    c #7CB4DC\",
-\"/    c #7FB8DF\",
-\"(    c #8DC7EB\",
-\"_    c #7BB3DC\",
-\":    c #7EB7DE\",
-\"<    c #8BC4E9\",
-\"[    c #8AC4E9\",
-\"}    c #8AC3E8\",
-\"|    c #87C0E6\",
-\"1    c #87C0E5\",
-\"2    c #83BCE2\",
-\"3    c #75ACD6\",
-\"4    c #7FB7DF\",
-\"5    c #77AED8\",
-\"6    c #71A8D2\",
-\"7    c #70A7D1\",
-\"8    c #76ADD7\",
-\"9    c #6CA2CE\",
-\"0    c #699FCC\",
-\"a    c #73AAD4\",
-\"b    c #6BA1CD\",
-\"c    c #669CC9\",
-\"d    c #6298C5\",
-\"e    c #689ECB\",
-\"f    c #6499C7\",
-\"g    c #6095C3\",
-\"h    c #5C91C0\",
-\"i    c #5E93C2\",
-\"j    c #5B90C0\",
-\"k    c #588CBC\",
-\"l    c #578CBC\",
-\"m    c #5589BA\",
-\"                        \",
-\"                        \",
-\"     ...          .     \",
-\"     .+.         ..     \",
-\"     .@.        .#.     \",
-\"     .$.       .%@.     \",
-\"     .&.      .*=-.     \",
-\"     .;.     .>,'%.     \",
-\"     .).    .!~{]^.     \",
-\"     ./.   .(!~{]_.     \",
-\"     .:.  .!!<>,'%.     \",
-\"     .&. .~[}>{*=-.     \",
-\"     .$.  .|1,2/%@.     \",
-\"     .3.   .*]4%56.     \",
-\"     .7.    .^$8#9.     \",
-\"     .0.     .a7bc.     \",
-\"     .d.      .efg.     \",
-\"     .h.       .ij.     \",
-\"     .k.        .l.     \",
-\"     .m.         ..     \",
-\"     ...          .     \",
-\"                        \",
-\"                        \",
-\"                        \"};
-"
-                     'xpm t))
-  "Image for the previous feed button.")
-
-(defconst newsticker--next-feed-image
-  (and (fboundp 'image-type-available-p)
-       (image-type-available-p 'xpm)
-       (create-image "/* XPM */
-static char * next_feed_xpm[] = {
-\"24 24 57 1\",
-\"     c None\",
-\".    c #000000\",
-\"+    c #6CA2CE\",
-\"@    c #75ADD6\",
-\"#    c #71A8D3\",
-\"$    c #79B1DA\",
-\"%    c #7EB7DE\",
-\"&    c #7DB5DD\",
-\"*    c #81BAE1\",
-\"=    c #85BEE4\",
-\"-    c #78B0D9\",
-\";    c #7FB7DE\",
-\">    c #83BCE3\",
-\",    c #87C1E6\",
-\"'    c #8AC4E9\",
-\")    c #7BB3DB\",
-\"!    c #80B8DF\",
-\"~    c #88C2E7\",
-\"{    c #8BC5E9\",
-\"]    c #8DC7EB\",
-\"^    c #7CB4DC\",
-\"/    c #7FB8DF\",
-\"(    c #84BDE3\",
-\"_    c #7BB3DC\",
-\":    c #83BCE2\",
-\"<    c #87C0E6\",
-\"[    c #8AC4E8\",
-\"}    c #8BC5EA\",
-\"|    c #8CC6EA\",
-\"1    c #88C1E6\",
-\"2    c #89C3E8\",
-\"3    c #8AC3E8\",
-\"4    c #7EB6DE\",
-\"5    c #82BBE1\",
-\"6    c #86C0E5\",
-\"7    c #87C0E5\",
-\"8    c #75ACD6\",
-\"9    c #7AB2DA\",
-\"0    c #81B9E0\",
-\"a    c #82BBE2\",
-\"b    c #71A8D2\",
-\"c    c #70A7D1\",
-\"d    c #74ACD6\",
-\"e    c #699FCC\",
-\"f    c #6EA5D0\",
-\"g    c #72A9D4\",
-\"h    c #669CC9\",
-\"i    c #6298C5\",
-\"j    c #679DCA\",
-\"k    c #6BA1CD\",
-\"l    c #6095C3\",
-\"m    c #5C91C0\",
-\"n    c #5F94C2\",
-\"o    c #5B90C0\",
-\"p    c #588CBC\",
-\"q    c #578CBC\",
-\"r    c #5589BA\",
-\"                        \",
-\"                        \",
-\"     .          ...     \",
-\"     ..         .+.     \",
-\"     .@.        .#.     \",
-\"     .$%.       .@.     \",
-\"     .&*=.      .-.     \",
-\"     .;>,'.     .).     \",
-\"     .!=~{].    .^.     \",
-\"     ./(~{]].   ._.     \",
-\"     .%:<[}||.  .).     \",
-\"     .&*=12'3~. .-.     \",
-\"     .$45=6<7.  .@.     \",
-\"     .8940a:.   .b.     \",
-\"     .cd-)&.    .+.     \",
-\"     .efg8.     .h.     \",
-\"     .ijk.      .l.     \",
-\"     .mn.       .o.     \",
-\"     .p.        .q.     \",
-\"     ..         .r.     \",
-\"     .          ...     \",
-\"                        \",
-\"                        \",
-\"                        \"};
-"
-                     'xpm t))
-  "Image for the next feed button.")
-
-(defconst newsticker--mark-read-image
-  (and (fboundp 'image-type-available-p)
-       (image-type-available-p 'xpm)
-       (create-image "/* XPM */
-static char * mark_read_xpm[] = {
-\"24 24 44 1\",
-\"     c None\",
-\".    c #C20000\",
-\"+    c #BE0000\",
-\"@    c #C70000\",
-\"#    c #CE0000\",
-\"$    c #C90000\",
-\"%    c #BD0000\",
-\"&    c #CB0000\",
-\"*    c #D10000\",
-\"=    c #D70000\",
-\"-    c #D30000\",
-\";    c #CD0000\",
-\">    c #C60000\",
-\",    c #D40000\",
-\"'    c #DA0000\",
-\")    c #DE0000\",
-\"!    c #DB0000\",
-\"~    c #D60000\",
-\"{    c #D00000\",
-\"]    c #DC0000\",
-\"^    c #E00000\",
-\"/    c #E40000\",
-\"(    c #E10000\",
-\"_    c #DD0000\",
-\":    c #D80000\",
-\"<    c #E50000\",
-\"[    c #E70000\",
-\"}    c #E60000\",
-\"|    c #E20000\",
-\"1    c #E90000\",
-\"2    c #E80000\",
-\"3    c #E30000\",
-\"4    c #DF0000\",
-\"5    c #D90000\",
-\"6    c #CC0000\",
-\"7    c #C10000\",
-\"8    c #C30000\",
-\"9    c #BF0000\",
-\"0    c #B90000\",
-\"a    c #BC0000\",
-\"b    c #BB0000\",
-\"c    c #B80000\",
-\"d    c #B50000\",
-\"e    c #B70000\",
-\"                        \",
-\"                        \",
-\"                        \",
-\"    .              +    \",
-\"   +@#            $.%   \",
-\"    &*=          -;>    \",
-\"     ,')        !~{     \",
-\"      ]^/      (_:      \",
-\"       (<[    }|)       \",
-\"        <[1  2<|        \",
-\"         }222[<         \",
-\"          }}}<          \",
-\"          333|          \",
-\"         _4^4)]         \",
-\"        ~:'  5=-        \",
-\"       6{-    *#$       \",
-\"      7>$      @89      \",
-\"     0a+        %bc     \",
-\"    ddc          edd    \",
-\"   ddd            ddd   \",
-\"    d              d    \",
-\"                        \",
-\"                        \",
-\"                        \"};
-"
-                    'xpm t))
-   "Image for the mark read button.")
-
-(defconst newsticker--mark-immortal-image
-  (and (fboundp 'image-type-available-p)
-       (image-type-available-p 'xpm)
-       (create-image "/* XPM */
-static char * mark_immortal_xpm[] = {
-\"24 24 93 2\",
-\"     c None\",
-\".    c #171717\",
-\"+    c #030303\",
-\"@    c #000000\",
-\"#    c #181818\",
-\"$    c #090909\",
-\"%    c #FFC960\",
-\"&    c #FFCB61\",
-\"*    c #FFCB62\",
-\"=    c #FFC961\",
-\"-    c #FFC75F\",
-\";    c #FFC65E\",
-\">    c #FFCA61\",
-\",    c #FFCD63\",
-\"'    c #FFCF65\",
-\")    c #FFD065\",
-\"!    c #FFCE64\",
-\"~    c #FFC35C\",
-\"{    c #FFC45D\",
-\"]    c #FFD166\",
-\"^    c #FFD267\",
-\"/    c #FFD368\",
-\"(    c #FFD167\",
-\"_    c #FFC05A\",
-\":    c #010101\",
-\"<    c #040404\",
-\"[    c #FFCC62\",
-\"}    c #FFD569\",
-\"|    c #FFD56A\",
-\"1    c #FFC860\",
-\"2    c #FFC25B\",
-\"3    c #FFBB56\",
-\"4    c #020202\",
-\"5    c #060606\",
-\"6    c #FFC15B\",
-\"7    c #FFC85F\",
-\"8    c #FFD469\",
-\"9    c #FFD66A\",
-\"0    c #FFBC57\",
-\"a    c #1B1B1B\",
-\"b    c #070707\",
-\"c    c #FFBA55\",
-\"d    c #FFB451\",
-\"e    c #FFB954\",
-\"f    c #FFB350\",
-\"g    c #FFB652\",
-\"h    c #FFBE58\",
-\"i    c #FFCD64\",
-\"j    c #FFD066\",
-\"k    c #FFC059\",
-\"l    c #FFB14E\",
-\"m    c #0B0B0B\",
-\"n    c #FFBB55\",
-\"o    c #FFC15A\",
-\"p    c #FFB552\",
-\"q    c #FFAD4B\",
-\"r    c #080808\",
-\"s    c #FFAF4C\",
-\"t    c #FFB853\",
-\"u    c #FFA948\",
-\"v    c #050505\",
-\"w    c #FFB04E\",
-\"x    c #FFB753\",
-\"y    c #FFBC56\",
-\"z    c #FFC55D\",
-\"A    c #FFC55E\",
-\"B    c #FFC45C\",
-\"C    c #FFBD57\",
-\"D    c #FFB854\",
-\"E    c #FFB34F\",
-\"F    c #FFAB4A\",
-\"G    c #FFA545\",
-\"H    c #FFAA49\",
-\"I    c #FFB04D\",
-\"J    c #FFB551\",
-\"K    c #FFBF58\",
-\"L    c #FFB24F\",
-\"M    c #FFAC4A\",
-\"N    c #FFA646\",
-\"O    c #FFA344\",
-\"P    c #FFA848\",
-\"Q    c #FFB14F\",
-\"R    c #FFAF4D\",
-\"S    c #FFA546\",
-\"T    c #FFA243\",
-\"U    c #FFA445\",
-\"V    c #FFAE4C\",
-\"W    c #FFA444\",
-\"X    c #FFA142\",
-\"Y    c #FF9F41\",
-\"Z    c #0A0A0A\",
-\"`    c #FF9E40\",
-\" .   c #FF9F40\",
-\"                                                \",
-\"                                                \",
-\"                                                \",
-\"                  . + @ @ + #                   \",
-\"              $ @ % & * * = - + +               \",
-\"            @ ; > , ' ) ' ! * - ~ @             \",
-\"          @ { > ! ] ^ / / ( ' * ; _ :           \",
-\"        < _ ; [ ) / } | } / ] , 1 2 3 4         \",
-\"        5 6 7 , ] 8 9 9 9 } ^ ! = ~ 0 a         \",
-\"      b c 6 - , ] 8 9 9 9 } ^ ! % ~ 0 d 5       \",
-\"      : e _ ; * ) / 8 } } / ] , 1 2 3 f 5       \",
-\"      : g h { = i j ^ / ^ ] ! * ; k e l m       \",
-\"      : f n o ; > , ' ) ' ! * - 2 0 p q r       \",
-\"      : s g 0 6 ; % > * * = - ~ h t l u r       \",
-\"      v u w x y k ~ z A z B o C D E F G b       \",
-\"        5 H I J e 0 h K h C c x L M N .         \",
-\"        4 O P q Q d g x g J L R H S T <         \",
-\"          @ T U P F q V q M H N W X +           \",
-\"            @ Y T O W G G W O X Y @             \",
-\"              4 Z ` Y Y Y  .` 4 4               \",
-\"                  5 : : @ @ Z                   \",
-\"                                                \",
-\"                                                \",
-\"                                                \"};
-"
-                     'xpm t))
-  "Image for the mark immortal button.")
-
-(defconst newsticker--narrow-image
-  (and (fboundp 'image-type-available-p)
-       (image-type-available-p 'xpm)
-       (create-image "/* XPM */
-static char * narrow_xpm[] = {
-\"24 24 48 1\",
-\"     c None\",
-\".    c #000000\",
-\"+    c #969696\",
-\"@    c #9E9E9E\",
-\"#    c #A4A4A4\",
-\"$    c #AAAAAA\",
-\"%    c #AEAEAE\",
-\"&    c #B1B1B1\",
-\"*    c #B3B3B3\",
-\"=    c #B4B4B4\",
-\"-    c #B2B2B2\",
-\";    c #AFAFAF\",
-\">    c #ABABAB\",
-\",    c #A6A6A6\",
-\"'    c #A0A0A0\",
-\")    c #989898\",
-\"!    c #909090\",
-\"~    c #73AAD4\",
-\"{    c #7AB2DA\",
-\"]    c #7FB8DF\",
-\"^    c #84BDE3\",
-\"/    c #88C2E7\",
-\"(    c #8BC5E9\",
-\"_    c #8DC7EB\",
-\":    c #8CC6EA\",
-\"<    c #89C3E8\",
-\"[    c #86BFE5\",
-\"}    c #81BAE1\",
-\"|    c #7BB3DC\",
-\"1    c #75ACD6\",
-\"2    c #6DA4CF\",
-\"3    c #979797\",
-\"4    c #A3A3A3\",
-\"5    c #A8A8A8\",
-\"6    c #ADADAD\",
-\"7    c #ACACAC\",
-\"8    c #A9A9A9\",
-\"9    c #A5A5A5\",
-\"0    c #9A9A9A\",
-\"a    c #929292\",
-\"b    c #8C8C8C\",
-\"c    c #808080\",
-\"d    c #818181\",
-\"e    c #838383\",
-\"f    c #848484\",
-\"g    c #858585\",
-\"h    c #868686\",
-\"i    c #828282\",
-\"                        \",
-\"                        \",
-\"                        \",
-\"   ..................   \",
-\"   .+@#$%&*=*-;>,')!.   \",
-\"   ..................   \",
-\"                        \",
-\"                        \",
-\"   ..................   \",
-\"   .~{]^/(___:<[}|12.   \",
-\"   ..................   \",
-\"                        \",
-\"                        \",
-\"   ..................   \",
-\"   .!3@45>666789'0ab.   \",
-\"   ..................   \",
-\"                        \",
-\"                        \",
-\"   ..................   \",
-\"   .cccdefghhgficccc.   \",
-\"   ..................   \",
-\"                        \",
-\"                        \",
-\"                        \"};
-"
-                     'xpm t))
-  "Image for the narrow image button.")
-
-(defconst newsticker--get-all-image
-  (and (fboundp 'image-type-available-p)
-       (image-type-available-p 'xpm)
-       (create-image "/* XPM */
-static char * get_all_xpm[] = {
-\"24 24 70 1\",
-\"     c None\",
-\".    c #000000\",
-\"+    c #F3DA00\",
-\"@    c #F5DF00\",
-\"#    c #F7E300\",
-\"$    c #F9E700\",
-\"%    c #FAEA00\",
-\"&    c #FBEC00\",
-\"*    c #FBED00\",
-\"=    c #FCEE00\",
-\"-    c #FAEB00\",
-\";    c #F9E800\",
-\">    c #F8E500\",
-\",    c #F6E000\",
-\"'    c #F4DB00\",
-\")    c #F1D500\",
-\"!    c #EFD000\",
-\"~    c #B7CA00\",
-\"{    c #BFD100\",
-\"]    c #C5D700\",
-\"^    c #CBDB00\",
-\"/    c #CFDF00\",
-\"(    c #D2E200\",
-\"_    c #D4E400\",
-\":    c #D3E300\",
-\"<    c #D0E000\",
-\"[    c #CCDD00\",
-\"}    c #C7D800\",
-\"|    c #C1D300\",
-\"1    c #BACC00\",
-\"2    c #B1C500\",
-\"3    c #A8BC00\",
-\"4    c #20A900\",
-\"5    c #22AF00\",
-\"6    c #24B500\",
-\"7    c #26B900\",
-\"8    c #27BC00\",
-\"9    c #27BE00\",
-\"0    c #28BF00\",
-\"a    c #27BD00\",
-\"b    c #26BA00\",
-\"c    c #25B600\",
-\"d    c #23B100\",
-\"e    c #21AB00\",
-\"f    c #1FA400\",
-\"g    c #1C9B00\",
-\"h    c #21AA00\",
-\"i    c #24B300\",
-\"j    c #25B800\",
-\"k    c #25B700\",
-\"l    c #24B400\",
-\"m    c #23B000\",
-\"n    c #1FA500\",
-\"o    c #1D9E00\",
-\"p    c #20A800\",
-\"q    c #21AC00\",
-\"r    c #23B200\",
-\"s    c #22AD00\",
-\"t    c #1D9F00\",
-\"u    c #20A700\",
-\"v    c #1EA100\",
-\"w    c #1C9C00\",
-\"x    c #1DA000\",
-\"y    c #1B9800\",
-\"z    c #1A9600\",
-\"A    c #1A9700\",
-\"B    c #1A9500\",
-\"C    c #199200\",
-\"D    c #189100\",
-\"E    c #178C00\",
-\"                        \",
-\"                        \",
-\"                        \",
-\"                        \",
-\"   ...................  \",
-\"   .+@#$%&*=*&-;>,')!.  \",
-\"   ...................  \",
-\"                        \",
-\"   ...................  \",
-\"   .~{]^/(___:<[}|123.  \",
-\"   ...................  \",
-\"                        \",
-\"   ...................  \",
-\"    .45678909abcdefg.   \",
-\"     .h5icj7jklmeno.    \",
-\"      .pq5drrmshft.     \",
-\"       .fu4h4pnvw.      \",
-\"        .oxvxtwy.       \",
-\"         .zAAzB.        \",
-\"          .CCD.         \",
-\"           .E.          \",
-\"            .           \",
-\"                        \",
-\"                        \"};
-"
-                     'xpm t))
-  "Image for the get all image button.")
-
-(defconst newsticker--update-image
-  (and (fboundp 'image-type-available-p)
-       (image-type-available-p 'xpm)
-       (create-image "/* XPM */
-static char * update_xpm[] = {
-\"24 24 37 1\",
-\"     c None\",
-\".    c #076D00\",
-\"+    c #0A8600\",
-\"@    c #0A8800\",
-\"#    c #098400\",
-\"$    c #087200\",
-\"%    c #087900\",
-\"&    c #098500\",
-\"*    c #098100\",
-\"=    c #087600\",
-\"-    c #097E00\",
-\";    c #097F00\",
-\">    c #0A8700\",
-\",    c #0A8C00\",
-\"'    c #097C00\",
-\")    c #098300\",
-\"!    c #0A8900\",
-\"~    c #0A8E00\",
-\"{    c #0B9200\",
-\"]    c #087700\",
-\"^    c #076E00\",
-\"/    c #076C00\",
-\"(    c #076B00\",
-\"_    c #076A00\",
-\":    c #076900\",
-\"<    c #076800\",
-\"[    c #066700\",
-\"}    c #066500\",
-\"|    c #066400\",
-\"1    c #066300\",
-\"2    c #066600\",
-\"3    c #066200\",
-\"4    c #076700\",
-\"5    c #065E00\",
-\"6    c #066100\",
-\"7    c #065F00\",
-\"8    c #066000\",
-\"                        \",
-\"                        \",
-\"                        \",
-\"    .    +@@@+#         \",
-\"    $% &@      +*       \",
-\"    =-#          ;      \",
-\"    %*>,          '     \",
-\"    ')!~{          =    \",
-\"                   ]$   \",
-\"   ^                ^   \",
-\"   .                .   \",
-\"   /                (   \",
-\"   _                :   \",
-\"   <                [   \",
-\"   }                |   \",
-\"   [[                   \",
-\"    1          $.:23    \",
-\"     3          4}35    \",
-\"      6          655    \",
-\"       76      85 55    \",
-\"        5555555    5    \",
-\"                        \",
-\"                        \",
-\"                        \"};
-"
-                     'xpm t))
-   "Image for the update button.")
-
-(defconst newsticker--browse-image
-  (and (fboundp 'image-type-available-p)
-       (image-type-available-p 'xpm)
-       (create-image "/* XPM */
-static char * visit_xpm[] = {
-\"24 24 39 1\",
-\"     c None\",
-\".    c #000000\",
-\"+    c #FFFFFF\",
-\"@    c #00E63D\",
-\"#    c #00E83E\",
-\"$    c #00E73D\",
-\"%    c #00E93E\",
-\"&    c #00E63C\",
-\"*    c #00E53C\",
-\"=    c #00E23B\",
-\"-    c #00E33B\",
-\";    c #00E83D\",
-\">    c #00E13A\",
-\",    c #00DD38\",
-\"'    c #00DE38\",
-\")    c #00E23A\",
-\"!    c #00E43C\",
-\"~    c #00DF39\",
-\"{    c #00DB37\",
-\"]    c #00D634\",
-\"^    c #00D734\",
-\"/    c #00E039\",
-\"(    c #00DC37\",
-\"_    c #00D835\",
-\":    c #00D332\",
-\"<    c #00CD2F\",
-\"[    c #00DB36\",
-\"}    c #00D433\",
-\"|    c #00CF30\",
-\"1    c #00DA36\",
-\"2    c #00D936\",
-\"3    c #00D533\",
-\"4    c #00D131\",
-\"5    c #00CE2F\",
-\"6    c #00CC2F\",
-\"7    c #00CA2D\",
-\"8    c #00C62B\",
-\"9    c #00C52A\",
-\"0    c #00BE27\",
-\"                        \",
-\"                        \",
-\"            .           \",
-\"           .+.          \",
-\"          .+++.         \",
-\"         .++.++.        \",
-\"        .++.@.++.       \",
-\"       .++.##$.++.      \",
-\"      .++.%%%#&.++.     \",
-\"     .++.$%%%#*=.++.    \",
-\"    .++.-@;##$*>,.++.   \",
-\"   .++.')!&@@*=~{].++.  \",
-\"  .++.^{~>---)/(_:<.++. \",
-\"   .++.^[,~/~'(_}|.++.  \",
-\"    .++.]_1[12^:|.++.   \",
-\"     .++.:}33:45.++.    \",
-\"      .++.<5567.++.     \",
-\"       .++.889.++.      \",
-\"        .++.0.++.       \",
-\"         .++.++.        \",
-\"          .+++.         \",
-\"           .+.          \",
-\"            .           \",
-\"                        \"};
-"
-                     'xpm t))
-  "Image for the browse button.")
 
 (defun newsticker-browse-url-item (feed item)
   "Convert FEED ITEM to html and call `browse-url' on result."