annotate lisp/net/newsticker-ticker.el @ 95767:efe53e2a05b0

Correct copyright years to reflect the original newsticker.el from which most of this code was extracted, not the year it was moved into this file. Header formatting fix.
author Glenn Morris <rgm@gnu.org>
date Tue, 10 Jun 2008 03:21:37 +0000
parents 4ab45b5c92cd
children 91e240b4d487
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
95678
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1 ;; newsticker-ticker.el --- modeline ticker for newsticker.
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2
95767
efe53e2a05b0 Correct copyright years to reflect the original newsticker.el from
Glenn Morris <rgm@gnu.org>
parents: 95684
diff changeset
3 ;; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
efe53e2a05b0 Correct copyright years to reflect the original newsticker.el from
Glenn Morris <rgm@gnu.org>
parents: 95684
diff changeset
4 ;; Free Software Foundation, Inc.
95678
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
5
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
6 ;; Author: Ulf Jasper <ulf.jasper@web.de>
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
7 ;; Filename: newsticker-ticker.el
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
8 ;; URL: http://www.nongnu.org/newsticker
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
9 ;; Keywords: News, RSS, Atom
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
10 ;; Time-stamp: "7. Juni 2008, 15:12:27 (ulf)"
95767
efe53e2a05b0 Correct copyright years to reflect the original newsticker.el from
Glenn Morris <rgm@gnu.org>
parents: 95684
diff changeset
11 ;; CVS-Version: $Id: newsticker-ticker.el,v 1.2 2008/06/08 18:09:06 miles Exp $
95678
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
12
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
13 ;; ======================================================================
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
14
95767
efe53e2a05b0 Correct copyright years to reflect the original newsticker.el from
Glenn Morris <rgm@gnu.org>
parents: 95684
diff changeset
15 ;; This file is part of GNU Emacs.
efe53e2a05b0 Correct copyright years to reflect the original newsticker.el from
Glenn Morris <rgm@gnu.org>
parents: 95684
diff changeset
16
95678
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
17 ;; GNU Emacs is free software: you can redistribute it and/or modify
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
18 ;; it under the terms of the GNU General Public License as published by
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
19 ;; the Free Software Foundation, either version 3 of the License, or
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
20 ;; (at your option) any later version.
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
21
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
22 ;; GNU Emacs is distributed in the hope that it will be useful,
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
23 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
24 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
25 ;; GNU General Public License for more details.
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
26
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
27 ;; You should have received a copy of the GNU General Public License
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
28 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
29
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
30 ;; ======================================================================
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
31
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
32 ;;; Commentary:
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
33
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
34 ;; See newsticker.el
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
35
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
36 ;; ======================================================================
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
37 ;;; Code:
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
38
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
39 (require 'newsticker-backend)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
40
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
41 (defvar newsticker--ticker-timer nil
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
42 "Timer for newsticker ticker.")
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
43
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
44 ;;;###autoload
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
45 (defun newsticker-ticker-running-p ()
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
46 "Check whether newsticker's actual ticker is running.
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
47 Return t if ticker is running, nil otherwise. Newsticker is
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
48 considered to be running if the newsticker timer list is not
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
49 empty."
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
50 (timerp newsticker--ticker-timer))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
51
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
52 ;; customization group ticker
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
53 (defgroup newsticker-ticker nil
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
54 "Settings for the headline ticker."
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
55 :group 'newsticker)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
56
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
57 (defun newsticker--set-customvar-ticker (symbol value)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
58 "Set newsticker-variable SYMBOL value to VALUE.
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
59 Calls all actions which are necessary in order to make the new
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
60 value effective."
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
61 (if (or (not (boundp symbol))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
62 (equal (symbol-value symbol) value))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
63 (set symbol value)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
64 ;; something must have changed -- restart ticker
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
65 (when (newsticker-running-p)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
66 (message "Restarting ticker")
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
67 (newsticker-stop-ticker)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
68 (newsticker--ticker-text-setup)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
69 (newsticker-start-ticker)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
70 (message ""))))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
71
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
72 (defcustom newsticker-ticker-interval
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
73 0.3
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
74 "Time interval for displaying news items in the echo area (seconds).
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
75 If equal or less than 0 no messages are shown in the echo area. For
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
76 smooth display (see `newsticker-scroll-smoothly') a value of 0.3 seems
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
77 reasonable. For non-smooth display a value of 10 is a good starting
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
78 point."
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
79 :type 'number
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
80 :set 'newsticker--set-customvar-ticker
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
81 :group 'newsticker-ticker)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
82
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
83 (defcustom newsticker-scroll-smoothly
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
84 t
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
85 "Decides whether to flash or scroll news items.
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
86 If t the news headlines are scrolled (more-or-less) smoothly in the echo
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
87 area. If nil one headline after another is displayed in the echo area.
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
88 The variable `newsticker-ticker-interval' determines how fast this
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
89 display moves/changes and whether headlines are shown in the echo area
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
90 at all. If you change `newsticker-scroll-smoothly' you should also change
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
91 `newsticker-ticker-interval'."
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
92 :type 'boolean
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
93 :group 'newsticker-ticker)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
94
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
95 (defcustom newsticker-hide-immortal-items-in-echo-area
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
96 t
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
97 "Decides whether to show immortal/non-expiring news items in the ticker.
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
98 If t the echo area will not show immortal items. See also
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
99 `newsticker-hide-old-items-in-echo-area'."
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
100 :type 'boolean
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
101 :set 'newsticker--set-customvar-ticker
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
102 :group 'newsticker-ticker)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
103
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
104 (defcustom newsticker-hide-old-items-in-echo-area
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
105 t
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
106 "Decides whether to show only the newest news items in the ticker.
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
107 If t the echo area will show only new items, i.e. only items which have
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
108 been added between the last two retrievals."
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
109 :type 'boolean
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
110 :set 'newsticker--set-customvar-ticker
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
111 :group 'newsticker-ticker)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
112
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
113 (defcustom newsticker-hide-obsolete-items-in-echo-area
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
114 t
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
115 "Decides whether to show obsolete items items in the ticker.
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
116 If t the echo area will not show obsolete items. See also
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
117 `newsticker-hide-old-items-in-echo-area'."
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
118 :type 'boolean
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
119 :set 'newsticker--set-customvar-ticker
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
120 :group 'newsticker-ticker)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
121
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
122 (defun newsticker--display-tick ()
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
123 "Called from the display timer.
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
124 This function calls a display function, according to the variable
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
125 `newsticker-scroll-smoothly'."
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
126 (if newsticker-scroll-smoothly
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
127 (newsticker--display-scroll)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
128 (newsticker--display-jump)))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
129
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
130 (defsubst newsticker--echo-area-clean-p ()
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
131 "Check whether somebody is using the echo area / minibuffer.
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
132 Return t if echo area and minibuffer are unused."
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
133 (not (or (active-minibuffer-window)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
134 (and (current-message)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
135 (not (string= (current-message)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
136 newsticker--prev-message))))))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
137
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
138 (defun newsticker--display-jump ()
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
139 "Called from the display timer.
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
140 This function displays the next ticker item in the echo area, unless
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
141 there is another message displayed or the minibuffer is active."
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
142 (let ((message-log-max nil));; prevents message text from being logged
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
143 (when (newsticker--echo-area-clean-p)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
144 (setq newsticker--item-position (1+ newsticker--item-position))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
145 (when (>= newsticker--item-position (length newsticker--item-list))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
146 (setq newsticker--item-position 0))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
147 (setq newsticker--prev-message
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
148 (nth newsticker--item-position newsticker--item-list))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
149 (message "%s" newsticker--prev-message))))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
150
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
151 (defun newsticker--display-scroll ()
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
152 "Called from the display timer.
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
153 This function scrolls the ticker items in the echo area, unless
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
154 there is another message displayed or the minibuffer is active."
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
155 (when (newsticker--echo-area-clean-p)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
156 (let* ((width (- (frame-width) 1))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
157 (message-log-max nil);; prevents message text from being logged
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
158 (i newsticker--item-position)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
159 subtext
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
160 (s-text newsticker--scrollable-text)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
161 (l (length s-text)))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
162 ;; don't show anything if there is nothing to show
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
163 (unless (< (length s-text) 1)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
164 ;; repeat the ticker string if it is shorter than frame width
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
165 (while (< (length s-text) width)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
166 (setq s-text (concat s-text s-text)))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
167 ;; get the width of the printed string
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
168 (setq l (length s-text))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
169 (cond ((< i (- l width))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
170 (setq subtext (substring s-text i (+ i width))))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
171 (t
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
172 (setq subtext (concat
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
173 (substring s-text i l)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
174 (substring s-text 0 (- width (- l i)))))))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
175 ;; Take care of multibyte strings, for which (string-width) is
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
176 ;; larger than (length).
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
177 ;; Actually, such strings may be smaller than (frame-width)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
178 ;; because return values of (string-width) are too large:
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
179 ;; (string-width "<japanese character>") => 2
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
180 (let ((t-width (1- (length subtext))))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
181 (while (> (string-width subtext) width)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
182 (setq subtext (substring subtext 0 t-width))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
183 (setq t-width (1- t-width))))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
184 ;; show the ticker text and save current position
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
185 (message "%s" subtext)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
186 (setq newsticker--prev-message subtext)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
187 (setq newsticker--item-position (1+ i))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
188 (when (>= newsticker--item-position l)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
189 (setq newsticker--item-position 0))))))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
190
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
191 ;;;###autoload
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
192 (defun newsticker-start-ticker ()
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
193 "Start newsticker's ticker (but not the news retrieval).
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
194 Start display timer for the actual ticker if wanted and not
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
195 running already."
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
196 (interactive)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
197 (if (and (> newsticker-ticker-interval 0)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
198 (not newsticker--ticker-timer))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
199 (setq newsticker--ticker-timer
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
200 (run-at-time newsticker-ticker-interval
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
201 newsticker-ticker-interval
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
202 'newsticker--display-tick))))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
203
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
204 (defun newsticker-stop-ticker ()
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
205 "Stop newsticker's ticker (but not the news retrieval)."
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
206 (interactive)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
207 (when newsticker--ticker-timer
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
208 (cancel-timer newsticker--ticker-timer)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
209 (setq newsticker--ticker-timer nil)))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
210
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
211 ;; ======================================================================
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
212 ;;; Manipulation of ticker text
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
213 ;; ======================================================================
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
214 (defun newsticker--ticker-text-setup ()
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
215 "Build the ticker text which is scrolled or flashed in the echo area."
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
216 ;; reset scrollable text
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
217 (setq newsticker--scrollable-text "")
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
218 (setq newsticker--item-list nil)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
219 (setq newsticker--item-position 0)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
220 ;; build scrollable text from cache data
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
221 (let ((have-something nil))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
222 (mapc
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
223 (lambda (feed)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
224 (let ((feed-name (symbol-name (car feed))))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
225 (let ((num-new (newsticker--stat-num-items (car feed) 'new))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
226 (num-old (newsticker--stat-num-items (car feed) 'old))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
227 (num-imm (newsticker--stat-num-items (car feed) 'immortal))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
228 (num-obs (newsticker--stat-num-items (car feed) 'obsolete)))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
229 (when (or (> num-new 0)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
230 (and (> num-old 0)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
231 (not newsticker-hide-old-items-in-echo-area))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
232 (and (> num-imm 0)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
233 (not newsticker-hide-immortal-items-in-echo-area))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
234 (and (> num-obs 0)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
235 (not newsticker-hide-obsolete-items-in-echo-area)))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
236 (setq have-something t)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
237 (mapc
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
238 (lambda (item)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
239 (let ((title (replace-regexp-in-string
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
240 "[\r\n]+" " "
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
241 (newsticker--title item)))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
242 (age (newsticker--age item)))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
243 (unless (string= title newsticker--error-headline)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
244 (when
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
245 (or (eq age 'new)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
246 (and (eq age 'old)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
247 (not newsticker-hide-old-items-in-echo-area))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
248 (and (eq age 'obsolete)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
249 (not
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
250 newsticker-hide-obsolete-items-in-echo-area))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
251 (and (eq age 'immortal)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
252 (not
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
253 newsticker-hide-immortal-items-in-echo-area)))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
254 (setq title (newsticker--remove-whitespace title))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
255 ;; add to flash list
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
256 (add-to-list 'newsticker--item-list
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
257 (concat feed-name ": " title) t)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
258 ;; and to the scrollable text
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
259 (setq newsticker--scrollable-text
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
260 (concat newsticker--scrollable-text
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
261 " " feed-name ": " title " +++"))))))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
262 (cdr feed))))))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
263 newsticker--cache)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
264 (when have-something
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
265 (setq newsticker--scrollable-text
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
266 (concat "+++ "
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
267 (format-time-string "%A, %H:%M"
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
268 newsticker--latest-update-time)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
269 " ++++++" newsticker--scrollable-text)))))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
270
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
271 (defun newsticker--ticker-text-remove (feed title)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
272 "Remove the item of FEED with TITLE from the ticker text."
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
273 ;; reset scrollable text
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
274 (setq newsticker--item-position 0)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
275 (let ((feed-name (symbol-name feed))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
276 (t-title (replace-regexp-in-string "[\r\n]+" " " title)))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
277 ;; remove from flash list
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
278 (setq newsticker--item-list (remove (concat feed-name ": " t-title)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
279 newsticker--item-list))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
280 ;; and from the scrollable text
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
281 (setq newsticker--scrollable-text
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
282 (replace-regexp-in-string
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
283 (regexp-quote (concat " " feed-name ": " t-title " +++"))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
284 ""
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
285 newsticker--scrollable-text))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
286 (if (string-match (concat "^\\+\\+\\+ [A-Z][a-z]+, "
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
287 "[012]?[0-9]:[0-9][0-9] \\+\\+\\+\\+\\+\\+$")
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
288 newsticker--scrollable-text)
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
289 (setq newsticker--scrollable-text ""))))
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
290
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
291 (provide 'newsticker-ticker)
95684
4ab45b5c92cd Add arch tagline
Miles Bader <miles@gnu.org>
parents: 95678
diff changeset
292
4ab45b5c92cd Add arch tagline
Miles Bader <miles@gnu.org>
parents: 95678
diff changeset
293 ;; arch-tag: faee3ebb-749b-4935-9835-7f36d4b700f0
95678
86fd39c6039a Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
294 ;;; newsticker-ticker.el ends here