Mercurial > emacs
diff lisp/gnus-cus.el @ 13401:178d730efae2
entered into RCS
author | Lars Magne Ingebrigtsen <larsi@gnus.org> |
---|---|
date | Sat, 04 Nov 1995 03:54:42 +0000 |
parents | |
children | 850f1cfd3535 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/gnus-cus.el Sat Nov 04 03:54:42 1995 +0000 @@ -0,0 +1,546 @@ +;;; gnus-cus.el --- User friendly customization of Gnus +;; Copyright (C) 1995 Free Software Foundation, Inc. +;; +;; Author: Per Abrahamsen <abraham@iesd.auc.dk> +;; Keywords: help, news +;; Version: 0.1 + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to +;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + +;;; Commentary: + +;;; Code: + +(require 'custom) +(require 'gnus-ems) + +;; The following is just helper functions and data, not ment to be set +;; by the user. +(defun gnus-make-face (color) + ;; Create entry for face with COLOR. + (custom-face-lookup color nil nil nil nil nil)) + +(defvar gnus-face-light-name-list + '("light blue" "light cyan" "light yellow" "light pink" + "pale green" "beige" "orange" "magenta" "violet" "medium purple" + "turquoise")) + +(defvar gnus-face-dark-name-list + '("RoyalBlue" "firebrick" + "dark green" "OrangeRed" "dark khaki" "dark violet" + "SteelBlue4")) +; CornflowerBlue SeaGreen OrangeRed SteelBlue4 DeepPink3 +; DarkOlviveGreen4 + +(custom-declare '() + '((tag . "GNUS") + (doc . "\ +The coffe-brewing, all singing, all dancing, kitchen sink newsreader.") + (type . group) + (data ((tag . "Visual") + (doc . "\ +GNUS can be made colorful and fun or grey and dull as you wish.") + (type . group) + (data ((tag . "Visual") + (doc . "Enable visual features. +If `visual' is disabled, there will be no menus and few faces. Most of +the visual customization options below will be ignored. GNUS will use +less space and be faster as a result.") + (default . t) + (name . gnus-visual) + (type . toggle)) + ((tag . "WWW Browser") + (doc . "\ +WWW Browser to call when clicking on an URL button in the article buffer. + +You can choose between one of the predefined browsers, or `Other'.") + (name . gnus-button-url) + (calculate . (cond ((boundp 'browse-url-browser-function) + browse-url-browser-function) + ((fboundp 'w3-fetch) + 'w3-fetch) + ((eq window-system 'x) + 'gnus-netscape-open-url))) + (type . choice) + (data ((tag . "W3") + (type . const) + (default . w3-fetch)) + ((tag . "Netscape") + (type . const) + (default . gnus-netscape-open-url)) + ((prompt . "Other") + (doc . "\ +You must specify the name of a Lisp function here. The lisp function +should open a WWW browser when called with an URL (a string). +") + (default . __uninitialized__) + (type . symbol)))) + ((tag . "Mouse Face") + (doc . "\ +Face used for group or summary buffer mouse highlighting. +The line beneath the mouse pointer will be highlighted with this +face.") + (name . gnus-mouse-face) + (calculate . (if (boundp 'gnus-mouse-face) + gnus-mouse-face + 'highlight)) + (type . face)) + ((tag . "Article Display") + (doc . "Controls how the article buffer will look. + +The list below contains various filters you can use to change the look +of the article. If you leave the list empty, the article will appear +exactly as it is stored on the disk. The list entries will hide or +highlight various parts of the article, making it easier to find the +information you want.") + (name . gnus-article-display-hook) + (type . list) + (default . (gnus-article-hide-headers-if-wanted + gnus-article-treat-overstrike + gnus-article-maybe-highlight)) + (data ((type . repeat) + (header . nil) + (data (tag . "Filter") + (type . choice) + (data ((tag . "Treat Overstrike") + (doc . "\ +Convert use of overstrike into bold and underline. + +Two identical letters separated by a backspace are displayed as a +single bold letter, while a letter followed by a backspace and an +underscore will be displayed as a single underlined letter. This +technique was developed for old line printers (think about it), and is +still in use on some newsgroups, in particular the ClariNet +hierearchy. +") + (type . const) + (default . + gnus-article-treat-overstrike)) + ((tag . "Word Wrap") + (doc . "\ +Format too long lines. +") + (type . const) + (default . gnus-article-word-wrap)) + ((tag . "Remove CR") + (doc . "\ +Remove carriage returns from an article. +") + (type . const) + (default . gnus-article-remove-cr)) + ((tag . "Display X-Face") + (doc . "\ +Look for an X-Face header and display it if present. + +See also `X Face Command' for a definition of the external command +used for decoding and displaying the face. +") + (type . const) + (default . gnus-article-display-x-face)) + ((tag . "Unquote Printable") + (doc . "\ +Tranform MIME quoted printable into 8-bit characters. + +Quoted printable is often seen by strings like `=EF' where you would +expect a non-English letter. +") + (type . const) + (default . + gnus-article-de-quoted-unreadable)) + ((tag . "Universal Time") + (doc . "\ +Convert date header to universal time. +") + (type . const) + (default . gnus-article-date-ut)) + ((tag . "Local Time") + (doc . "\ +Convert date header to local timezone. +") + (type . const) + (default . gnus-article-date-local)) + ((tag . "Lapsed Time") + (doc . "\ +Replace date header with a header showing the articles age. +") + (type . const) + (default . gnus-article-date-lapsed)) + ((tag . "Highlight") + (doc . "\ +Highlight headers, citations, signature, and buttons. +") + (type . const) + (default . gnus-article-highlight)) + ((tag . "Maybe Highlight") + (doc . "\ +Highlight headers, signature, and buttons if `Visual' is turned on. +") + (type . const) + (default . + gnus-article-maybe-highlight)) + ((tag . "Highlight Some") + (doc . "\ +Highlight headers, signature, and buttons. +") + (type . const) + (default . gnus-article-highlight-some)) + ((tag . "Highlight Headers") + (doc . "\ +Highlight headers as specified by `Article Header Highligting'. +") + (type . const) + (default . + gnus-article-highlight-headers)) + ((tag . "Highlight Signature") + (doc . "\ +Highlight the signature as specified by `Article Signature Face'. +") + (type . const) + (default . + gnus-article-highlight-signature)) + ((tag . "Citation") + (doc . "\ +Highlight the citations as specified by `Citation Faces'. +") + (type . const) + (default . + gnus-article-highlight-citation)) + ((tag . "Hide") + (doc . "\ +Hide unwanted headers, excess citation, and the signature. +") + (type . const) + (default . gnus-article-hide)) + ((tag . "Hide Headers If Wanted") + (doc . "\ +Hide headers, but allow user to display them with `t' or `v'. +") + (type . const) + (default . + gnus-article-hide-headers-if-wanted)) + ((tag . "Hide Headers") + (doc . "\ +Hide unwanted headers and possibly sort them as well. +Most likely you want to use `Hide Headers If Wanted' instead. +") + (type . const) + (default . gnus-article-hide-headers)) + ((tag . "Hide Signature") + (doc . "\ +Hide the signature. +") + (type . const) + (default . gnus-article-hide-signature)) + ((tag . "Hide Excess Citations") + (doc . "\ +Hide excess citation. + +Excess is defined by `Citation Hide Percentage' and `Citation Hide Absolute'. +") + (type . const) + (default . + gnus-article-hide-citation-maybe)) + ((tag . "Hide Citations") + (doc . "\ +Hide all cited text. +") + (type . const) + (default . gnus-article-hide-citation)) + ((tag . "Add Buttons") + (doc . "\ +Make URL's into clickable buttons. +") + (type . const) + (default . gnus-article-add-buttons)) + ((prompt . "Other") + (doc . "\ +Name of Lisp function to call. + +Push the `Filter' button to select one of the predefined filters. +") + (type . symbol))))))) + ((tag . "Article Button Face") + (doc . "\ +Face used for highlighting buttons in the article buffer. + +An article button is a piece of text that you can activate by pressing +`RET' or `mouse-2' above it.") + (name . gnus-article-button-face) + (default . bold) + (type . face)) + ((tag . "Article Mouse Face") + (doc . "\ +Face used for mouse highlighting in the article buffer. + +Article buttons will be displayed in this face when the cursor is +above them.") + (name . gnus-article-mouse-face) + (default . highlight) + (type . face)) + ((tag . "Article Signature Face") + (doc . "\ +Face used for highlighting a signature in the article buffer.") + (name . gnus-signature-face) + (default . italic) + (type . face)) + ((tag . "Article Header Highlighting") + (doc . "\ +Controls highlighting of article header. + +Below is a list of article header names, and the faces used for +displaying the name and content of the header. The `Header' field +should contain the name of the header. The field actually contains a +regular expression that should match the beginning of the header line, +but if you don't know what a regular expression is, just write the +name of the header. The second field is the `Name' field, which +determines how the the header name (i.e. the part of the header left +of the `:') is displayed. The third field is the `Content' field, +which determines how the content (i.e. the part of the header right of +the `:') is displayed. + +If you leave the last `Header' field in the list empty, the `Name' and +`Content' fields will determine how headers not listed above are +displayed. + +If you only want to change the display of the name part for a specific +header, specify `None' in the `Content' field. Similarly, specify +`None' in the `Name' field if you only want to leave the name part +alone.") + (name . gnus-header-face-alist) + (type . list) + (calculate . (cond ((not (eq gnus-display-type 'color)) + '(("" bold italic))) + ((eq gnus-background-mode 'dark) + (list (list "From" nil + (custom-face-lookup + "dark blue" nil nil t t nil)) + (list "Subject" nil + (custom-face-lookup + "pink" nil nil t t nil)) + (list "Newsgroups:.*," nil + (custom-face-lookup + "yellow" nil nil t t nil)) + (list "" + (custom-face-lookup + "cyan" nil nil t nil nil) + (custom-face-lookup + "forestgreen" + nil nil nil t nil)))) + (t + (list (list "From" nil + (custom-face-lookup + "RoyalBlue" + nil nil t t nil)) + (list "Subject" nil + (custom-face-lookup + "firebrick" + nil nil t t nil)) + (list "Newsgroups:.*," nil + (custom-face-lookup + "indianred" nil nil t t nil)) + (list "" + (custom-face-lookup + "DarkGreen" + nil nil t nil nil) + (custom-face-lookup + "DarkGreen" + nil nil nil t nil)))))) + (data ((type . repeat) + (header . nil) + (data (type . list) + (compact . t) + (data ((type . string) + (prompt . "Header") + (tag . "Header ")) + "\n " + ((type . face) + (prompt . "Name") + (tag . "Name ")) + "\n " + ((type . face) + (tag . "Content")) + "\n"))))) + ((tag . "Attribution Face") + (doc . "\ +Face used for attribution lines. +It is merged with the face for the cited text belonging to the attribution.") + (name . gnus-cite-attribution-face) + (default . underline) + (type . face)) + ((tag . "Citation Faces") + (doc . "\ +List of faces used for highlighting citations. + +When there are citations from multiple articles in the same message, +Gnus will try to give each citation from each article its own face. +This should make it easier to see who wrote what.") + (name . gnus-cite-face-list) + (import . gnus-custom-import-cite-face-list) + (type . list) + (calculate . (cond ((not (eq gnus-display-type 'color)) + '(italic)) + ((eq gnus-background-mode 'dark) + (mapcar 'gnus-make-face + gnus-face-light-name-list)) + (t + (mapcar 'gnus-make-face + gnus-face-dark-name-list)))) + (data ((type . repeat) + (header . nil) + (data (type . face) + (tag . "Face"))))) + ((tag . "Citation Hide Percentage") + (doc . "\ +Only hide excess citation if above this percentage of the body.") + (name . gnus-cite-hide-percentage) + (default . 50) + (type . integer)) + ((tag . "Citation Hide Absolute") + (doc . "\ +Only hide excess citation if above this number of lines in the body.") + (name . gnus-cite-hide-absolute) + (default . 10) + (type . integer)) + ((tag . "Summary Selected Face") + (doc . "\ +Face used for highlighting the current article in the summary buffer.") + (name . gnus-summary-selected-face) + (default . underline) + (type . face)) + ((tag . "Summary Line Highlighting") + (doc . "\ +Controls the higlighting of summary buffer lines. + +Below is a list of `Form'/`Face' pairs. When deciding how a a +particular summary line should be displayed, each form is +evaluated. The content of the face field after the first true form is +used. You can change how those summary lines are displayed, by +editing the face field. + +It is also possible to change and add form fields, but currently that +requires an understanding of Lisp expressions. Hopefully this will +change in a future release. For now, you can use the following +variables in the Lisp expression: + +score: The article's score +default: The default article score. +below: The score below which articles are automatically marked as read. +mark: The article's mark.") + (name . gnus-summary-highlight) + (type . list) + (calculate . (cond ((not (eq gnus-display-type 'color)) + '(((> score default) . bold) + ((< score default) . italic))) + ((eq gnus-background-mode 'dark) + (list (cons '(= mark gnus-canceled-mark) + (custom-face-lookup "yellow" "black" nil nil nil nil)) + (cons '(and (> score default) + (or (= mark gnus-dormant-mark) + (= mark gnus-ticked-mark))) + (custom-face-lookup "pink" nil nil t nil nil)) + (cons '(and (< score default) + (or (= mark gnus-dormant-mark) + (= mark gnus-ticked-mark))) + (custom-face-lookup "pink" nil nil nil t nil)) + (cons '(or (= mark gnus-dormant-mark) + (= mark gnus-ticked-mark)) + (custom-face-lookup "pink" nil nil nil nil nil)) + + (cons '(and (> score default) (= mark gnus-ancient-mark)) + (custom-face-lookup "dark blue" nil nil t nil nil)) + (cons '(and (< score default) (= mark gnus-ancient-mark)) + (custom-face-lookup "SkyBlue" nil nil nil t nil)) + (cons '(= mark gnus-ancient-mark) + (custom-face-lookup "SkyBlue" nil nil nil nil nil)) + + (cons '(and (> score default) (= mark gnus-unread-mark)) + (custom-face-lookup "white" nil nil t nil nil)) + (cons '(and (< score default) (= mark gnus-unread-mark)) + (custom-face-lookup "white" nil nil nil t nil)) + (cons '(= mark gnus-unread-mark) + (custom-face-lookup "white" nil nil nil nil nil)) + + (cons '(> score default) 'bold) + (cons '(< score default) 'italic))) + (t + (list (cons '(= mark gnus-canceled-mark) + (custom-face-lookup "yellow" "black" nil nil nil nil)) + (cons '(and (> score default) + (or (= mark gnus-dormant-mark) + (= mark gnus-ticked-mark))) + (custom-face-lookup "firebrick" nil nil t nil nil)) + (cons '(and (< score default) + (or (= mark gnus-dormant-mark) + (= mark gnus-ticked-mark))) + (custom-face-lookup "firebrick" nil nil nil t nil)) + (cons '(or (= mark gnus-dormant-mark) + (= mark gnus-ticked-mark)) + (custom-face-lookup "firebrick" nil nil nil nil nil)) + + (cons '(and (> score default) (= mark gnus-ancient-mark)) + (custom-face-lookup "RoyalBlue" nil nil t nil nil)) + (cons '(and (< score default) (= mark gnus-ancient-mark)) + (custom-face-lookup "RoyalBlue" nil nil nil t nil)) + (cons '(= mark gnus-ancient-mark) + (custom-face-lookup "RoyalBlue" nil nil nil nil nil)) + + (cons '(and (> score default) (/= mark gnus-unread-mark)) + (custom-face-lookup "DarkGreen" nil nil t nil nil)) + (cons '(and (< score default) (/= mark gnus-unread-mark)) + (custom-face-lookup "DarkGreen" nil nil nil t nil)) + (cons '(/= mark gnus-unread-mark) + (custom-face-lookup "DarkGreen" nil nil nil nil nil)) + + (cons '(> score default) 'bold) + (cons '(< score default) 'italic))))) + (data ((type . repeat) + (header . nil) + (data (type . pair) + (compact . t) + (data ((type . sexp) + (width . 60) + (tag . "Form")) + "\n " + ((type . face) + (tag . "Face")) + "\n"))))) + ;; Do not define `gnus-button-alist' before we have + ;; some `complexity' attribute so we can hide it from + ;; beginners. + ))))) + +(defun gnus-custom-import-cite-face-list (custom alist) + ;; Backward compatible groking of light and dark. + (cond ((eq alist 'light) + (setq alist (mapcar 'gnus-make-face gnus-face-light-name-list))) + ((eq alist 'dark) + (setq alist (mapcar 'gnus-make-face gnus-face-dark-name-list)))) + (funcall (custom-super custom 'import) custom alist)) + +;(defun gnus-custom-import-swap-alist (custom alist) +; ;; Swap key and value in CUSTOM ALIST. +; (let ((swap (mapcar (lambda (e) (cons (cdr e) (car e))) alist))) +; (funcall (custom-super custom 'import) custom swap))) + +;(defun gnus-custom-export-swap-alist (custom alist) +; ;; Swap key and value in CUSTOM ALIST. +; (let ((swap (mapcar (lambda (e) (cons (cdr e) (car e))) alist))) +; (funcall (custom-super custom 'export) custom swap))) + +(provide 'gnus-cus) + +;;; gnus-cus.el ends here