comparison lisp/net/newst-treeview.el @ 106408:53d1b718f76a

Newsticker fixes/changes.
author Ulf Jasper <ulf.jasper@web.de>
date Fri, 04 Dec 2009 19:27:42 +0000
parents 2a70bc301f41
children e341c53bc4af
comparison
equal deleted inserted replaced
106407:1119f2c554bc 106408:53d1b718f76a
5 ;; Author: Ulf Jasper <ulf.jasper@web.de> 5 ;; Author: Ulf Jasper <ulf.jasper@web.de>
6 ;; Filename: newst-treeview.el 6 ;; Filename: newst-treeview.el
7 ;; URL: http://www.nongnu.org/newsticker 7 ;; URL: http://www.nongnu.org/newsticker
8 ;; Created: 2007 8 ;; Created: 2007
9 ;; Keywords: News, RSS, Atom 9 ;; Keywords: News, RSS, Atom
10 ;; Time-stamp: "15. April 2009, 19:51:17 (ulf)" 10 ;; Time-stamp: "4. Dezember 2009, 20:07:40 (ulf)"
11 11
12 ;; ====================================================================== 12 ;; ======================================================================
13 13
14 ;; This file is part of GNU Emacs. 14 ;; This file is part of GNU Emacs.
15 15
595 (newsticker--treeview-list-update-faces)))) 595 (newsticker--treeview-list-update-faces))))
596 596
597 (defun newsticker--treeview-list-highlight-start () 597 (defun newsticker--treeview-list-highlight-start ()
598 "Return position of selection in treeview list buffer." 598 "Return position of selection in treeview list buffer."
599 (with-current-buffer (newsticker--treeview-list-buffer) 599 (with-current-buffer (newsticker--treeview-list-buffer)
600 (goto-char (point-min)) 600 (save-excursion
601 (next-single-property-change (point) :nt-selected))) 601 (goto-char (point-min))
602 (next-single-property-change (point) :nt-selected))))
602 603
603 (defun newsticker--treeview-list-update (clear-buffer) 604 (defun newsticker--treeview-list-update (clear-buffer)
604 "Update the faces and highlight in the treeview list buffer. 605 "Update the faces and highlight in the treeview list buffer.
605 If CLEAR-BUFFER is non-nil the list buffer is completely erased." 606 If CLEAR-BUFFER is non-nil the list buffer is completely erased."
606 (save-excursion 607 (save-excursion
663 'help-echo (concat "Sort by " name) 664 'help-echo (concat "Sort by " name)
664 'mouse-face 'highlight 665 'mouse-face 'highlight
665 'face face 666 'face face
666 'keymap newsticker-treeview-list-sort-button-map))) 667 'keymap newsticker-treeview-list-sort-button-map)))
667 668
669 (defun newsticker--treeview-list-select (item)
670 "Select ITEM in treeview's list buffer."
671 (newsticker--treeview-list-clear-highlight)
672 (let (pos num-lines)
673 (save-current-buffer
674 (set-buffer (newsticker--treeview-list-buffer))
675 (goto-char (point-min))
676 (catch 'found
677 (while t
678 (let ((it (get-text-property (point) :nt-item)))
679 (when (eq it item)
680 (newsticker--treeview-list-update-highlight)
681 (newsticker--treeview-list-update-faces)
682 (newsticker--treeview-item-show
683 item (get-text-property (point) :nt-feed))
684 (throw 'found t)))
685 (forward-line 1)
686 (when (eobp)
687 (goto-char (point-min))
688 (throw 'found nil)))))))
689
668 ;; ====================================================================== 690 ;; ======================================================================
669 ;;; item window 691 ;;; item window
670 ;; ====================================================================== 692 ;; ======================================================================
671 (defun newsticker--treeview-item-show-text (title description) 693 (defun newsticker--treeview-item-show-text (title description)
672 "Show text in treeview item buffer consisting of TITLE and DESCRIPTION." 694 "Show text in treeview item buffer consisting of TITLE and DESCRIPTION."
680 (insert title) 702 (insert title)
681 (put-text-property (point-min) (point) 'face 'newsticker-feed-face) 703 (put-text-property (point-min) (point) 'face 'newsticker-feed-face)
682 (insert "\n\n" description) 704 (insert "\n\n" description)
683 (when newsticker-justification 705 (when newsticker-justification
684 (fill-region (point-min) (point-max) newsticker-justification)) 706 (fill-region (point-min) (point-max) newsticker-justification))
685 (newsticker-treeview-mode) 707 (newsticker-treeview-item-mode)
686 (goto-char (point-min))))) 708 (goto-char (point-min)))))
687 709
688 (defun newsticker--treeview-item-show (item feed-name-symbol) 710 (defun newsticker--treeview-item-show (item feed-name-symbol)
689 "Show news ITEM coming from FEED-NAME-SYMBOL in treeview item buffer." 711 "Show news ITEM coming from FEED-NAME-SYMBOL in treeview item buffer."
690 (setq newsticker--treeview-current-feed (symbol-name feed-name-symbol)) 712 (setq newsticker--treeview-current-feed (symbol-name feed-name-symbol))
714 marker2)) 736 marker2))
715 (when (and newsticker-justification 737 (when (and newsticker-justification
716 (not is-rendered-HTML)) 738 (not is-rendered-HTML))
717 (fill-region marker1 marker2 newsticker-justification)) 739 (fill-region marker1 marker2 newsticker-justification))
718 740
719 (newsticker-treeview-mode) 741 (newsticker-treeview-item-mode)
720 (goto-char (point-min)) 742 (goto-char (point-min))
721 ;; insert logo at top 743 ;; insert logo at top
722 (let* ((newsticker-enable-logo-manipulations nil) 744 (let* ((newsticker-enable-logo-manipulations nil)
723 (img (newsticker--image-read feed-name-symbol nil))) 745 (img (newsticker--image-read feed-name-symbol nil)))
724 (if (and (display-images-p) img) 746 (if (and (display-images-p) img)
785 (set-window-buffer (newsticker--treeview-item-window) 807 (set-window-buffer (newsticker--treeview-item-window)
786 (newsticker--treeview-item-buffer))) 808 (newsticker--treeview-item-buffer)))
787 (set-buffer (newsticker--treeview-item-buffer)) 809 (set-buffer (newsticker--treeview-item-buffer))
788 (let ((inhibit-read-only t)) 810 (let ((inhibit-read-only t))
789 (erase-buffer)) 811 (erase-buffer))
790 (newsticker-treeview-mode))) 812 (newsticker-treeview-item-mode)))
791 813
792 ;; ====================================================================== 814 ;; ======================================================================
793 ;;; Tree window 815 ;;; Tree window
794 ;; ====================================================================== 816 ;; ======================================================================
795 (defun newsticker--treeview-tree-expand (tree) 817 (defun newsticker--treeview-tree-expand (tree)
1191 1213
1192 (defun newsticker-treeview-update () 1214 (defun newsticker-treeview-update ()
1193 "Update all treeview buffers and windows. 1215 "Update all treeview buffers and windows.
1194 Note: does not update the layout." 1216 Note: does not update the layout."
1195 (interactive) 1217 (interactive)
1196 (newsticker--group-manage-orphan-feeds) 1218 (let ((cur-item (newsticker--treeview-get-selected-item)))
1197 (newsticker--treeview-list-update t) 1219 (newsticker--group-manage-orphan-feeds)
1198 (newsticker--treeview-item-update) 1220 (newsticker--treeview-list-update t)
1199 (newsticker--treeview-tree-update-tags) 1221 (newsticker--treeview-item-update)
1200 (cond (newsticker--treeview-current-feed 1222 (newsticker--treeview-tree-update-tags)
1201 (newsticker--treeview-list-items newsticker--treeview-current-feed)) 1223 (cond (newsticker--treeview-current-feed
1202 (newsticker--treeview-current-vfeed 1224 (newsticker--treeview-list-items newsticker--treeview-current-feed))
1203 (newsticker--treeview-list-items-with-age 1225 (newsticker--treeview-current-vfeed
1204 (intern newsticker--treeview-current-vfeed)))) 1226 (newsticker--treeview-list-items-with-age
1205 (newsticker--treeview-tree-update-highlight) 1227 (intern newsticker--treeview-current-vfeed))))
1206 (newsticker--treeview-list-update-highlight)) 1228 (newsticker--treeview-tree-update-highlight)
1229 (newsticker--treeview-list-update-highlight)
1230 (let ((cur-feed (or newsticker--treeview-current-feed
1231 newsticker--treeview-current-vfeed)))
1232 (if (and cur-feed cur-item)
1233 (newsticker--treeview-list-select cur-item)))))
1207 1234
1208 (defun newsticker-treeview-quit () 1235 (defun newsticker-treeview-quit ()
1209 "Quit newsticker treeview." 1236 "Quit newsticker treeview."
1210 (interactive) 1237 (interactive)
1211 (setq newsticker--sentinel-callback nil) 1238 (setq newsticker--sentinel-callback nil)
1305 current-item-counts 1332 current-item-counts
1306 dont-wrap-trees) 1333 dont-wrap-trees)
1307 "Move to next new or immortal item. 1334 "Move to next new or immortal item.
1308 Will move to next feed until an item is found. Will not move if 1335 Will move to next feed until an item is found. Will not move if
1309 optional argument CURRENT-ITEM-COUNTS is t and current item is 1336 optional argument CURRENT-ITEM-COUNTS is t and current item is
1310 new or immortal." 1337 new or immortal. Will not move from virtual to ordinary feed
1338 tree or vice versa if optional argument DONT-WRAP-TREES is non-nil."
1311 (interactive) 1339 (interactive)
1312 (newsticker--treeview-restore-layout) 1340 (newsticker--treeview-restore-layout)
1313 (newsticker--treeview-list-clear-highlight) 1341 (newsticker--treeview-list-clear-highlight)
1314 (unless (catch 'found 1342 (unless (catch 'found
1315 (let ((move (not current-item-counts))) 1343 (let ((move (not current-item-counts)))
1529 (newsticker--treeview-get-second-child node)))) 1557 (newsticker--treeview-get-second-child node))))
1530 (node 1558 (node
1531 (widget-apply-action node))))) 1559 (widget-apply-action node)))))
1532 1560
1533 (defun newsticker--treeview-first-feed () 1561 (defun newsticker--treeview-first-feed ()
1534 "Jump to the depth-first feed in the newsticker-groups tree." 1562 "Jump to the depth-first feed in the `newsticker-groups' tree."
1535 (newsticker-treeview-jump 1563 (newsticker-treeview-jump
1536 (car (reverse (newsticker--group-get-feeds newsticker-groups t))))) 1564 (car (reverse (newsticker--group-get-feeds newsticker-groups t)))))
1537 1565
1538 (defun newsticker-treeview-next-feed (&optional stay-in-tree) 1566 (defun newsticker-treeview-next-feed (&optional stay-in-tree)
1539 "Move to next feed. 1567 "Move to next feed.
1861 (defvar newsticker-treeview-list-menu 1889 (defvar newsticker-treeview-list-menu
1862 (let ((menu (make-sparse-keymap "Newsticker List"))) 1890 (let ((menu (make-sparse-keymap "Newsticker List")))
1863 (define-key menu [newsticker-treeview-mark-list-items-old] 1891 (define-key menu [newsticker-treeview-mark-list-items-old]
1864 (list 'menu-item "Mark all items old" 1892 (list 'menu-item "Mark all items old"
1865 'newsticker-treeview-mark-list-items-old)) 1893 'newsticker-treeview-mark-list-items-old))
1894 (define-key menu [newsticker-treeview-mark-item-old]
1895 (list 'menu-item "Mark current item old"
1896 'newsticker-treeview-mark-item-old))
1897 (define-key menu [newsticker-treeview-toggle-item-immortal]
1898 (list 'menu-item "Mark current item immortal (toggle)"
1899 'newsticker-treeview-toggle-item-immortal))
1900 (define-key menu [newsticker-treeview-get-news]
1901 (list 'menu-item "Get news for current feed"
1902 'newsticker-treeview-get-news))
1866 menu) 1903 menu)
1867 "Map for newsticker tree menu.") 1904 "Map for newsticker list menu.")
1905
1906 (defvar newsticker-treeview-item-menu
1907 (let ((menu (make-sparse-keymap "Newsticker Item")))
1908 (define-key menu [newsticker-treeview-mark-item-old]
1909 (list 'menu-item "Mark current item old"
1910 'newsticker-treeview-mark-item-old))
1911 (define-key menu [newsticker-treeview-toggle-item-immortal]
1912 (list 'menu-item "Mark current item immortal (toggle)"
1913 'newsticker-treeview-toggle-item-immortal))
1914 (define-key menu [newsticker-treeview-get-news]
1915 (list 'menu-item "Get news for current feed"
1916 'newsticker-treeview-get-news))
1917 menu)
1918 "Map for newsticker item menu.")
1868 1919
1869 (defvar newsticker-treeview-mode-map 1920 (defvar newsticker-treeview-mode-map
1870 (let ((map (make-sparse-keymap 'newsticker-treeview-mode-map))) 1921 (let ((map (make-sparse-keymap 'newsticker-treeview-mode-map)))
1871 (define-key map " " 'newsticker-treeview-next-page) 1922 (define-key map " " 'newsticker-treeview-next-page)
1872 (define-key map "a" 'newsticker-add-url) 1923 (define-key map "a" 'newsticker-add-url)
1927 'sort-by-title)))) 1978 'sort-by-title))))
1928 (setq header-line-format header)) 1979 (setq header-line-format header))
1929 (define-key newsticker-treeview-list-mode-map [down-mouse-3] 1980 (define-key newsticker-treeview-list-mode-map [down-mouse-3]
1930 newsticker-treeview-list-menu)) 1981 newsticker-treeview-list-menu))
1931 1982
1983 (define-derived-mode newsticker-treeview-item-mode newsticker-treeview-mode
1984 "Item"
1985 (define-key newsticker-treeview-item-mode-map [down-mouse-3]
1986 newsticker-treeview-item-menu))
1987
1932 (defun newsticker-treeview-tree-click (event) 1988 (defun newsticker-treeview-tree-click (event)
1933 "Handle click EVENT on a tag in the newsticker tree." 1989 "Handle click EVENT on a tag in the newsticker tree."
1934 (interactive "e") 1990 (interactive "e")
1935 (newsticker--treeview-restore-layout) 1991 (newsticker--treeview-restore-layout)
1936 (save-excursion 1992 (save-excursion