Commit | Line | Data |
---|---|---|
86584f24 | 1 | ;;; newsticker.el --- A Newsticker for Emacs. |
5629e04f | 2 | |
5df4f04c | 3 | ;; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 |
68515217 | 4 | ;; Free Software Foundation, Inc. |
5629e04f RS |
5 | |
6 | ;; Author: Ulf Jasper <ulf.jasper@web.de> | |
7 | ;; Filename: newsticker.el | |
8 | ;; URL: http://www.nongnu.org/newsticker | |
9 | ;; Created: 17. June 2003 | |
86584f24 | 10 | ;; Keywords: News, RSS, Atom |
8e39154d | 11 | ;; Time-stamp: "6. Dezember 2009, 19:15:18 (ulf)" |
86584f24 EZ |
12 | |
13 | ;; ====================================================================== | |
5629e04f | 14 | |
68515217 GM |
15 | ;; This file is part of GNU Emacs. |
16 | ||
874a927a | 17 | ;; GNU Emacs is free software: you can redistribute it and/or modify |
5629e04f | 18 | ;; it under the terms of the GNU General Public License as published by |
874a927a GM |
19 | ;; the Free Software Foundation, either version 3 of the License, or |
20 | ;; (at your option) any later version. | |
5629e04f | 21 | |
874a927a GM |
22 | ;; GNU Emacs is distributed in the hope that it will be useful, |
23 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
24 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
25 | ;; GNU General Public License for more details. | |
5629e04f RS |
26 | |
27 | ;; You should have received a copy of the GNU General Public License | |
874a927a | 28 | ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
5629e04f | 29 | |
114ba1d6 | 30 | (defconst newsticker-version "1.99" "Version number of newsticker.el.") |
dba0acf6 | 31 | |
5629e04f RS |
32 | ;; ====================================================================== |
33 | ;;; Commentary: | |
34 | ||
35 | ;; Overview | |
36 | ;; -------- | |
37 | ||
86584f24 EZ |
38 | ;; Newsticker provides a newsticker for Emacs. A newsticker is a thing |
39 | ;; that asynchronously retrieves headlines from a list of news sites, | |
40 | ;; prepares these headlines for reading, and allows for loading the | |
41 | ;; corresponding articles in a web browser. | |
42 | ||
43 | ;; Headlines consist of a title and (possibly) a small description. They | |
44 | ;; are contained in "RSS" (RDF Site Summary) or "Atom" files. Newsticker | |
45 | ;; should work with the following RSS formats: | |
46 | ;; * RSS 0.91 | |
47 | ;; (see http://backend.userland.com/rss091 or | |
48 | ;; http://my.netscape.com/publish/formats/rss-spec-0.91.html) | |
49 | ;; * RSS 0.92 | |
50 | ;; (see http://backend.userland.com/rss092) | |
51 | ;; * RSS 1.0 | |
52 | ;; (see http://purl.org/rss/1.0/spec) | |
53 | ;; * RSS 2.0 | |
54 | ;; (see http://blogs.law.harvard.edu/tech/rss) | |
55 | ;; as well as the following Atom formats: | |
56 | ;; * Atom 0.3 | |
57 | ;; * Atom 1.0 | |
58 | ;; (see http://www.ietf.org/internet-drafts/draft-ietf-atompub-format-11.txt) | |
59 | ;; That makes Newsticker.el an "Atom aggregator, "RSS reader", "RSS | |
60 | ;; aggregator", and "Feed Reader". | |
5629e04f RS |
61 | |
62 | ;; Newsticker provides several commands for reading headlines, navigating | |
63 | ;; through them, marking them as read/unread, hiding old headlines | |
86584f24 | 64 | ;; etc. Headlines can be displayed as plain text or as rendered HTML. |
5629e04f RS |
65 | |
66 | ;; Headlines can be displayed in the echo area, either scrolling like | |
67 | ;; messages in a stock-quote ticker, or just changing. | |
68 | ||
69 | ;; Newsticker allows for automatic processing of headlines by providing | |
70 | ;; hooks and (sample) functions for automatically downloading images and | |
71 | ;; enclosed files (as delivered by podcasts, e.g.). | |
72 | ||
5629e04f RS |
73 | ;; Requirements |
74 | ;; ------------ | |
86584f24 EZ |
75 | ;; Newsticker can be used with GNU Emacs version 21.1 or later as well as |
76 | ;; XEmacs. It requires an XML-parser (`xml.el') which is part of GNU | |
77 | ;; Emacs. If you are using XEmacs you want to get the `net-utils' package | |
5629e04f RS |
78 | ;; which contains `xml.el' for XEmacs. |
79 | ||
80 | ;; Newsticker requires a program which can retrieve files via http and | |
86584f24 | 81 | ;; prints them to stdout. By default Newsticker will use wget for this |
5629e04f RS |
82 | ;; task. |
83 | ||
86584f24 EZ |
84 | ;; Installation |
85 | ;; ------------ | |
86 | ||
87 | ;; If you are using Newsticker as part of GNU Emacs there is no need to | |
88 | ;; perform any installation steps in order to use Newsticker. Otherwise | |
89 | ;; place Newsticker in a directory where Emacs can find it. Add the | |
90 | ;; following line to your Emacs startup file (`~/.emacs'). | |
91 | ;; (add-to-list 'load-path "/path/to/newsticker/") | |
92 | ;; (autoload 'newsticker-start "newsticker" "Emacs Newsticker" t) | |
93 | ;; (autoload 'newsticker-show-news "newsticker" "Emacs Newsticker" t) | |
94 | ||
95 | ;; If you are using `imenu', which allows for navigating with the help of a | |
96 | ;; menu, you should add the following to your Emacs startup file | |
97 | ;; (`~/.emacs'). | |
98 | ;; (add-hook 'newsticker-mode-hook 'imenu-add-menubar-index) | |
99 | ||
100 | ;; That's it. | |
101 | ||
5629e04f RS |
102 | ;; Usage |
103 | ;; ----- | |
104 | ;; The command newsticker-show-news will display all available headlines in | |
86584f24 EZ |
105 | ;; a special buffer, called `*newsticker*'. It will also start the |
106 | ;; asynchronous download of headlines. The modeline in the `*newsticker*' | |
107 | ;; buffer informs whenever new headlines have arrived. Clicking | |
5629e04f RS |
108 | ;; mouse-button 2 or pressing RET in this buffer on a headline will call |
109 | ;; browse-url to load the corresponding news story in your favourite web | |
110 | ;; browser. | |
111 | ||
112 | ;; The scrolling, or flashing of headlines in the echo area, can be started | |
86584f24 | 113 | ;; with the command newsticker-start-ticker. It can be stopped with |
5629e04f RS |
114 | ;; newsticker-stop-ticker. |
115 | ||
116 | ;; If you just want to start the periodic download of headlines use the | |
86584f24 EZ |
117 | ;; command newsticker-start. Calling newsticker-stop will stop the |
118 | ;; periodic download, but will call newsticker-stop-ticker as well. | |
5629e04f RS |
119 | |
120 | ;; Configuration | |
121 | ;; ------------- | |
122 | ;; All Newsticker options are customizable, i.e. they can be changed with | |
123 | ;; Emacs customization methods: Call the command customize-group and enter | |
124 | ;; `newsticker' for the customization group. | |
125 | ||
126 | ;; All Newsticker options have reasonable default values, so that in most | |
127 | ;; cases it is not necessary to customize settings before starting | |
128 | ;; Newsticker for the first time. | |
129 | ||
130 | ;; Newsticker options are organized in the following groups. | |
131 | ||
132 | ;; * newsticker-feed contains options that define which news | |
133 | ;; feeds are retrieved and how this is done. | |
134 | ;; o newsticker-url-list defines the list of headlines which are | |
135 | ;; retrieved. | |
136 | ;; o newsticker-retrieval-interval defines how often headlines are | |
137 | ;; retrieved. | |
138 | ;; * newsticker-headline-processing contains options that define how the | |
139 | ;; retrieved headlines are processed. | |
140 | ;; o newsticker-keep-obsolete-items decides whether unread headlines that | |
141 | ;; have been removed from the feed are kept in the Newsticker cache. | |
142 | ;; * newsticker-layout contains options that define how the buffer for | |
86584f24 | 143 | ;; reading news headlines is formatted. |
5629e04f RS |
144 | ;; o newsticker-item-format defines how the title of a headline is |
145 | ;; formatted. | |
146 | ;; * newsticker-ticker contains options that define how headlines are shown | |
147 | ;; in the echo area. | |
148 | ;; o newsticker-display-interval and newsticker-scroll-smoothly define | |
149 | ;; how headlines are shown in the echo area. | |
150 | ;; * newsticker-hooks contains options for hooking other Emacs commands to | |
151 | ;; newsticker functions. | |
152 | ;; o newsticker-new-item-functions allows for automatic processing of | |
86584f24 | 153 | ;; headlines. See `newsticker-download-images', and |
5629e04f RS |
154 | ;; `newsticker-download-enclosures' for sample functions. |
155 | ;; * newsticker-miscellaneous contains other Newsticker options. | |
156 | ||
157 | ;; Please have a look at the customization buffers for the complete list of | |
158 | ;; options. | |
159 | ||
160 | ;; Remarks | |
161 | ;; ------- | |
162 | ;; This newsticker is designed do its job silently in the background | |
163 | ;; without disturbing you. However, it is probably impossible to prevent | |
164 | ;; such a tool from slightly attenuating your Editor's responsiveness every | |
165 | ;; once in a while. | |
166 | ||
86584f24 | 167 | ;; Byte-compiling newsticker.el is recommended. |
5629e04f RS |
168 | |
169 | ;; ====================================================================== | |
170 | ;;; History: | |
171 | ||
114ba1d6 UJ |
172 | ;; 1.99 |
173 | ;; * Lots! of changes. | |
174 | ||
175 | ;; 1.10x | |
176 | ;; * Support for download via url. Setting the new variable | |
177 | ;; `newsticker-download-method' to 'intern will make newsticker | |
178 | ;; use the url-package instead of the external program | |
179 | ;; wget. Default value is 'extern. | |
180 | ;; * Re-enabled `newsticker-default-face'. | |
181 | ;; * Workaround for broken extra-data. | |
182 | ||
13c0ee14 EZ |
183 | ;; 1.10 (2007-01-29) |
184 | ;; * Bugfixes mostly: `newsticker--decode-iso8601-date', | |
114ba1d6 | 185 | ;; `newsticker--sentinel', and others. |
13c0ee14 EZ |
186 | ;; * Renamed `newsticker--retrieval-timer-list' to |
187 | ;; `newsticker-retrieval-timer-list'. Removed | |
188 | ;; `newsticker-running-p' -- check newsticker-retrieval-timer-list | |
189 | ;; to find out whether newsticker is running. Removed | |
190 | ;; `newsticker-ticker-running-p'. | |
191 | ;; * Try to cache images in w3m-rendered HTML text. | |
192 | ;; * Other minor changes. | |
193 | ||
86584f24 EZ |
194 | ;; 1.9 (2005-11-01) |
195 | ;; * Rewrote feed parsing part. Newsticker now supports RSS 0.91, | |
196 | ;; 0.92, 1.0, 2.0 as well as Atom 0.3 and 1.0 -- thanks to Thien-Thi | |
197 | ;; Nguyen. | |
198 | ;; * Changed auto-marking mechanism: Replaced variable | |
199 | ;; `newsticker-auto-mark-filter' with new variable | |
200 | ;; `newsticker-auto-mark-filter-list', which allows for looking not | |
201 | ;; only at the title but also at the description of a headline. | |
202 | ;; * Call `newsticker--ticker-text-setup' only after all pending | |
203 | ;; downloads processes have finished. | |
204 | ;; * Improved handling of coding systems. | |
205 | ;; * Added magic autoload comments. | |
206 | ;; * Bugfixes: | |
207 | ;; - `hide-entry' was hiding too much when called for the last | |
208 | ;; headline, | |
209 | ;; - update mode-line and menu-bar when necessary, | |
210 | ;; - repaired `newsticker--imenu-goto', | |
211 | ;; - other minor things. | |
212 | ||
5629e04f RS |
213 | ;; 1.8 (2005-08-26) |
214 | ;; * Added commands `newsticker-show-extra' and `newsticker-hide-extra' | |
215 | ;; to show and hide extra RSS elements, bound to "sx" and "hx" | |
216 | ;; resp. Changed default value of `newsticker-show-all-rss-elements' | |
217 | ;; to nil. | |
218 | ;; * mode-line: Introduced special mode-line-format for newsticker. | |
219 | ;; * Get feed logos only once every 24 h. | |
220 | ;; * Default faces changed. | |
221 | ;; * Minor fixes. | |
222 | ||
223 | ;; 1.7 (2005-06-25) | |
224 | ;; * Tool-bar support: most important commands can be called from | |
225 | ;; tool-bar buttons. | |
226 | ;; * Auto-Narrowing introduced: *newsticker* buffer can be narrowed to | |
86584f24 EZ |
227 | ;; a single item (bound to key `xi') or a single feed (bound to |
228 | ;; `xf'). | |
5629e04f RS |
229 | ;; * Enclosure support: enclosed items are shown (see |
230 | ;; `newsticker-enclosure-face') and can be (automatically) downloaded | |
231 | ;; (see below). For those of you who read "podcasts". | |
232 | ;; * Added variable `newsticker-auto-mark-filter' for automatically | |
233 | ;; marking items as immortal or old. | |
234 | ;; * Added hook variable `newsticker-new-item-functions' for handling | |
235 | ;; new items. Added sample functions `newsticker-download-images', | |
236 | ;; and `newsticker-download-enclosures'. | |
237 | ;; * Added hook variable `newsticker-select-item-hook' which is run | |
238 | ;; after `newsticker-(next|previous)-(new-)?-item'. | |
239 | ;; * Added hook variable `newsticker-select-feed-hook' which is run | |
240 | ;; after `newsticker-(next|previous)-feed'. | |
241 | ;; * Added hook variable `newsticker-buffer-change-hook' which is run | |
242 | ;; after the contents or visibility of the newsticker buffer has | |
243 | ;; changed, e.g. after `newsticker-buffer-update' or | |
244 | ;; `newsticker-show-feed-desc'. | |
245 | ;; * Added command `newsticker-handle-url' for interactively launching | |
246 | ;; arbitrary programs for URLs, bound to `C-RET'. | |
247 | ;; * URLs in extra elements are clickable. | |
248 | ;; * Better support for w3, added command | |
249 | ;; `newsticker-w3m-show-inline-images' for displaying all inline | |
250 | ;; images. | |
86584f24 EZ |
251 | ;; * Insert an artificial headline which notifies about failed |
252 | ;; retrievals. | |
5629e04f RS |
253 | ;; * Use pubDate element (RSS 2.0) instead of retrieval time when |
254 | ;; available. | |
255 | ;; * Customizable options grouped. | |
256 | ;; * Bugfixes: `newsticker--imenu-create-index'; strip whitespace | |
257 | ;; from links; apply coding-system to extra-elements; time-comparison | |
258 | ;; for obsolete items; and others which I have forgotten. | |
86584f24 EZ |
259 | ;; * Workaround for another bug in xml-parse-region -- thanks to |
260 | ;; anonymous for sending patch. | |
5629e04f RS |
261 | ;; * Renamed invisible buffers ` *wget-newsticker-<feed>*' to |
262 | ;; ` *newsticker-wget-<feed>*'. | |
86584f24 EZ |
263 | ;; * Tested with GNU Emacs versions 21.3 and 22.0 and XEmacs |
264 | ;; 21.something. | |
5629e04f RS |
265 | |
266 | ;; 1.6 * Support for (some) optional RSS elements: guid, dc:date. See | |
267 | ;; `newsticker-show-all-rss-elements' `newsticker-extra-face'. | |
268 | ;; * Better support for w3m -- `newsticker-default-face' is obsolete | |
269 | ;; now, removed `newsticker-w3m-toggle-inline-image'. | |
86584f24 EZ |
270 | ;; * Added `newsticker-desc-comp-max' -- comparison of item |
271 | ;; descriptions can take quite some time. | |
5629e04f RS |
272 | ;; * Added `newsticker--buffer-make-item-completely-visible' to |
273 | ;; ensure that the current item is fully visible. | |
274 | ;; * Allow for non-positive retrieval-interval, which make newsticker | |
275 | ;; get news only once. | |
276 | ;; * Use :set for customizable variables. | |
277 | ;; * Added `newsticker-buffer-force-update', bound to key `U'. | |
278 | ;; * Added concept of obsolete items, see | |
279 | ;; `newsticker-keep-obsolete-items', `newsticker-obsolete-item-face', | |
280 | ;; `newsticker-obsolete-item-max-age'. | |
281 | ;; * Added `newsticker-add-url'. | |
282 | ;; * OPML export. | |
283 | ;; * Save pre-formatted titles => even better performance!! | |
284 | ;; * `newsticker-*-new-item' wraps at beginning/end of buffer. | |
285 | ;; * Always sort obsolete items to end of item list. | |
286 | ;; * Bugfixes: | |
287 | ;; - newsticker-hide-entry, | |
288 | ;; - changes of feed-titles led to duplicate feed items, | |
289 | ;; - faces for rendered HTML texts, | |
290 | ;; - length of ticker-text (for "exotic"/multibyte texts), | |
291 | ;; Thanks to Hiroshi Maruyama. | |
292 | ;; - suppress items with empty title and description | |
293 | ;; - newsticker-sort-method was ignored! | |
294 | ;; - prevent call of fill-region on HTML-rendered descriptions. | |
295 | ||
296 | ;; 1.5 * Rewrote the visibility stuff. newsticker does not inherit | |
297 | ;; outline anymore. Now you have complete freedom for | |
298 | ;; `newsticker-*-format'. | |
299 | ;; * Save pre-formatted descriptions => incredible performance boost!! | |
300 | ;; * Introduced `newsticker-(start|stop)-ticker'. | |
301 | ;; * Introduced statistics for heading-format and | |
302 | ;; `newsticker-statistics-face'. | |
303 | ;; * Introduced `newsticker-enable-logo-manipulations'. | |
304 | ;; * Compare link of items (as well as title and desc). | |
305 | ;; * Added `newsticker-start-hook' and `newsticker-stop-hook', thanks | |
306 | ;; to mace. | |
307 | ;; * Bugfixes -- thanks to Ryan Yeske, Jari Aalto, Bruce Ingalls. | |
308 | ;; * Tested with Emacs 21.3.50, 21.3.1, 21.2, 21.1; XEmacs 21.4.15 | |
309 | ||
310 | ;; 1.4 * Enabled HTML rendering, added `newsticker-html-renderer' to | |
311 | ;; choose a HTML rendering engine, thanks to Greg Scott for testing | |
312 | ;; * New Outline handling using text properties instead of "**" | |
313 | ;; prefixes. | |
314 | ;; * Added possibility to mark single item as old (bound to key | |
315 | ;; `o' (`newsticker-mark-item-at-point-as-read'). | |
316 | ;; * Added possibility to mark single item as immortal (bound to key | |
317 | ;; `i' (`newsticker-mark-item-at-point-as-immortal'). | |
318 | ;; * Added possibility to display feed logos. | |
319 | ;; * Added `newsticker-heading-format', `newsticker-item-format'. | |
320 | ;; * Added `newsticker-date-format'. | |
321 | ;; * Added `newsticker-justification'. | |
322 | ;; * Added `newsticker-automatically-mark-visited-items-as-old'. | |
323 | ;; * Added `newsticker-w3m-toggle-inline-image' which calls | |
324 | ;; `w3m-toggle-inline-image' if `newsticker-html-renderer' is | |
325 | ;; `w3m-region'. Exists for convenience only (bound to key | |
326 | ;; `RET'). | |
327 | ||
328 | ;; 1.3 * Compare title AND desc to check whether item is old, except | |
329 | ;; for feed desc | |
330 | ;; * Mark as not-up-to-date only after new items have arrived. | |
331 | ;; * Added XEmacs compatibility code, tested with XEmacs 21.4.13. | |
332 | ;; * Tested with Emacs 21.3.50 and Emacs 21.2.something. | |
333 | ;; * Bugfix: Apply coding-systems to feed title and description, | |
334 | ;; thanks to OHASHI Akira | |
335 | ;; * Bugfix: xml-parser-workaround did not work for japanese texts, | |
336 | ;; thanks to OHASHI Akira | |
337 | ;; * Kill wget-buffers unless newsticker-debug is not nil. | |
338 | ;; * Bugfix: xml-parser-workaround for "DOCTYPE rdf:RDF" | |
339 | ||
340 | ;; 1.2 Peter S Galbraith <psg@debian.org> | |
341 | ;; * Added `newsticker-url-list-defaults', splitting the URLs into | |
342 | ;; a customizable selection list, and a user add-on list. | |
343 | ;; * Minor checkdoc fixes. | |
344 | ||
345 | ;; 1.1 * Introduced optional feed-specific wget-arguments. | |
346 | ;; * Keep order of feeds as given in `newsticker-url-list' in | |
347 | ;; *newsticker* buffer. | |
348 | ;; * Ignore unsupported coding systems. | |
349 | ||
350 | ;; 1.0 * Introduced feed-specific retrieval-timers. | |
351 | ;; * Removed dependency on 'cl (cddddr). | |
352 | ;; * Thanks to Kevin Rodgers and T.V. Raman for their help. | |
353 | ;; * Use utf-8 for reading and writing cache data. | |
354 | ;; * Reported to work with Emacs 21.3.50. | |
355 | ||
356 | ;; 0.99 * Minor tweaks. | |
357 | ;; * Tested with Emacs 21.3.2 | |
358 | ||
359 | ;; 0.98 * Check exit status of wget processes. Keep cache data if | |
360 | ;; something went wrong. Throw error when old wget-processes | |
361 | ;; are hanging around. | |
362 | ;; * Introduced newsticker-specific faces. | |
363 | ;; * Added `newsticker-show-descriptions-of-new-items'. | |
364 | ;; * Added `newsticker-hide-old-items-in-newsticker-buffer'. | |
365 | ;; * Added `newsticker-(hide|show)-old-items'. | |
366 | ||
367 | ;; 0.97 * Minor tweaks. | |
368 | ||
369 | ;; 0.96 * Added caching. | |
370 | ;; * newsticker-mode inherits outline-mode. | |
371 | ;; * newsticker-mode supports imenu. | |
372 | ;; * Easy buffer-navigation with newsticker-mode's keymap. | |
373 | ;; * Some bugs fixed. | |
374 | ;; * Thanks to Moritz Epple for documentation tips. | |
375 | ||
376 | ;; 0.95 * Added newsticker-mode -- Thanks to T.V. Raman. | |
377 | ;; * Catch xml-parser errors -- Thanks to T.V. Raman. | |
378 | ;; * Remove stupid newlines in titles (headlines) -- Thanks to | |
379 | ;; Jeff Rancier. | |
380 | ||
381 | ;; 0.94 * Added clickerability and description for channel headings. | |
382 | ;; * Made it work for (at least some) rss 0.9<something> feeds. | |
383 | ||
384 | ;; 0.93 * Added some more sites. | |
385 | ;; * Do not flood the *Messages* buffer. | |
386 | ;; * First attempt at handling coding systems. | |
387 | ||
388 | ;; 0.92 * Added `newsticker-wget-name'. | |
389 | ;; * Try to display message only if minibuffer and echo area are | |
390 | ;; not in use already. | |
391 | ;; * Dirty workaround for newer versions of xml.el: Remove | |
392 | ;; whitespace in rdf. | |
393 | ;; * Tested with Emacs 21.3.2 and CVS-snapshot of 2003-06-21. | |
394 | ||
395 | ;; 0.91 * First bugfix: *newsticker* is read-only. | |
396 | ||
397 | ;; 0.9 * First release. | |
398 | ;; * Tested with Emacs 21.3.2 and wget 1.8.2. | |
399 | ||
5629e04f RS |
400 | ;; ====================================================================== |
401 | ;;; Code: | |
402 | ||
8e39154d UJ |
403 | (require 'newst-backend) |
404 | (require 'newst-ticker) | |
405 | (require 'newst-reader) | |
406 | (require 'newst-plainview) | |
407 | (require 'newst-treeview) | |
5629e04f RS |
408 | |
409 | (provide 'newsticker) | |
410 | ||
115f219d | 411 | ;; arch-tag: ab761dfa-67bc-4207-bc64-4307271dc381 |
5629e04f | 412 | ;;; newsticker.el ends here |