Mercurial > emacs
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 |