comparison lisp/utils/frame-icon.el @ 100:4be1180a9e89 r20-1b2

Import from CVS: tag r20-1b2
author cvs
date Mon, 13 Aug 2007 09:15:11 +0200
parents
children
comparison
equal deleted inserted replaced
99:2d83cbd90d8d 100:4be1180a9e89
1 ;; frame-icon.el - set up mode-specific icons for each frame under XEmacs
2
3 ;; Author: Michael Lamoureux <lamour@engin.umich.edu>
4 ;; Keywords: lisp, extensions
5 ;; date created: 8/3/93
6
7 ;; This file is part of XEmacs.
8
9 ;; XEmacs is free software; you can redistribute it and/or modify it
10 ;; under the terms of the GNU General Public License as published by
11 ;; the Free Software Foundation; either version 2, or (at your option)
12 ;; any later version.
13
14 ;; XEmacs is distributed in the hope that it will be useful, but
15 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 ;; General Public License for more details.
18
19 ;; You should have received a copy of the GNU General Public License
20 ;; along with XEmacs; see the file COPYING. If not, write to the Free
21 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
22 ;; 02111-1307, USA.
23
24 ;;; Synched up with: Not in FSF.
25
26 ;;; Commentary:
27
28 ;; Modified by Bob Weiner <weiner@infodock.com>, 1/13/94
29 ;; Handle XEmacs 19.8 pixmaps properly.
30 ;; Also added in more mode settings and added many new bitmaps.
31 ;; Renamed from icon.el to frame-icon.el.
32 ;; Made all definitions start with the same prefix, 'icon-'.
33 ;; Added a provide clause.
34 ;;
35 ;; Modified by Bob Weiner, 2/24/95, to handle XEmacs 19.12.
36 ;; Added set of unmap-frame-hook.
37 ;;
38 ;; Modified by Bob Weiner, 7/17/95, to handle XEmacs 19.12.
39 ;; Changed to use new image-handling protocols and added backwards
40 ;; compatibility functions for new image functions.
41 ;;
42 ;; Modified by Bob Weiner, 7/18/95.
43 ;; Added icon-suffix variable so can use .xbm or .xpm icons.
44 ;;
45 ;; Most Icons were extracted from: /export.lcs.mit.edu:/contrib/AIcons
46 ;;
47
48 ;;; Code:
49
50 (defvar icon-directory (concat data-directory "frame-icon/")
51 "Directory of icons used by frame-icon.el.")
52
53 (defvar icon-suffix ".xbm"
54 "Must be .xbm or .xpm, depending on the format of the icons in icon-directory.")
55
56 (defconst icon-mode-alist
57 '(
58 (default . "question")
59 ;; For testing
60 (fundamental-mode . "match")
61 ;;
62 (archie-mode . "archie")
63 (asm-mode . "nuke")
64 (bbdb-mode . "eye")
65 (bookmark-menu-mode . "finder")
66 (Buffer-menu-mode . "help")
67 (c++-mode . "c++")
68 (c++-c-mode . "escherknot")
69 (c-mode . "c")
70 (awk-mode . "escherknot")
71 (cvs-mode . "tree")
72 (f90-mode . "wizard")
73 (xrdb-mode . "RIP")
74 ;;
75 (calc-edit-mode . "cray")
76 (calc-keypad . "cray")
77 (calc-mode . "cray")
78 (calc-trail-mode . "cray")
79 (MacEdit-mode . "cray")
80 ;;
81 (calendar-mode . "calendar")
82 (comint-mode . "terminal")
83 (perl-mode . "perl")
84 (csh-mode . "manpage2")
85 (db-edit-mode . "filing")
86 (db-view-mode . "filing")
87 (dired-mode . "filing")
88 (doctor-mode . "ying-yang-48")
89 (edit-faces-mode . "eye")
90 (Edit-options-mode . "swissknife")
91 (emacs-lisp-mode . "elisp")
92 (fortran-mode . "RIP")
93 (gdb-mode . "bug-48")
94 (gud-mode . "bug-48")
95 (gnus-article-mode . "news")
96 (gnus-group-mode . "news")
97 (gnus-summary-mode . "news")
98 (gopher-mode . "gopher")
99 (html-mode . "xmosaic")
100 (indented-text-mode . "page")
101 (Info-mode . "help")
102 (java-mode . "coffee")
103 (kotl-mode . "kotl")
104 (lisp-interaction-mode . "swissknife")
105 (lisp-mode . "lisp")
106 (lock-mode . "termlock")
107 (mail-mode . "scroll2")
108 (Manual-mode . "manpage")
109 (man-mode . "manpage")
110 (news-reply-mode . "match")
111 (outline-mode . "outline")
112 (perl-mode . "perl")
113 (edit-picture . "splat")
114 (pm-fdr-mode . "mail")
115 (pm-group-mode . "news")
116 (pm-msg-edit-mode . "mail")
117 (pm-msgsumm-mode . "mail")
118 (pm-mode . "mail")
119 (rdb-mode . "question")
120 (rmail-mode . "mail")
121 (rmail-edit-mode . "mail")
122 (rmail-summary-mode . "mail")
123 (scheme-interaction-mode . "swissknife")
124 (scheme-mode . "lisp")
125 (shell-mode . "terminal")
126 (sm-manual-mode . "manpage")
127 (sql-mode . "sql")
128 (tcl-mode . "radioactive")
129 (telnet-mode . "rlogin")
130 (texinfo-mode . "texinfo")
131 (text-mode . "page")
132 (unix-apropos-mode . "manpage")
133 (ups-mode . "hourglass") ; process listing mode
134 (vi-mode . "stopsign")
135 (vip-mode . "stopsign")
136 (vkill-mode . "load")
137 (vrml-mode . "drawing")
138 (vm-mode . "scroll2")
139 (vm-summary-mode . "scroll2")
140 (w3-mode . "world")
141 (waisq-mode . "library")
142 (wordstar-mode . "words")
143 (wrolo-mode . "phone")
144 ;;
145 (ams-tex-mode . "tex-48")
146 (foiltex-mode . "tex-48")
147 (latex-mode . "tex-48")
148 (LaTeX-mode . "tex-48")
149 (plain-tex-mode . "tex-48")
150 (plain-TeX-mode . "tex-48")
151 (slitex-mode . "tex-48")
152 (tex-mode . "tex-48")
153 )
154 "Alist of (major-mode . non-suffixed-icon-file-name) elements.
155 Used to set frame icons based upon the current major mode.
156 For use with icon-set-frame. See also the variable, 'icon-suffix'.")
157
158 (or (fboundp 'image-instance-p) (fset 'image-instance-p 'pixmapp))
159 (or (fboundp 'image-instance-file-name)
160 (fset 'image-instance-file-name 'pixmap-file-name))
161 (or (fboundp 'make-glyph) (fset 'make-glyph 'make-pixmap))
162
163 (defun icon-set-frame (iconified-frame)
164 "Set icon for selected frame according to the values in icon-mode-alist."
165 (save-excursion
166 (if (framep iconified-frame)
167 (select-frame iconified-frame))
168 (let* ((icon-sym (intern (concat "icon-" (symbol-name major-mode))))
169 (pix (and (boundp icon-sym) (symbol-value icon-sym)))
170 (image (or (cdr (assq major-mode icon-mode-alist))
171 (cdr (assq 'default icon-mode-alist))))
172 (image-file (expand-file-name (concat image icon-suffix)
173 icon-directory)))
174 (cond ((and (image-instance-p pix)
175 (equal image-file (image-instance-file-name pix)))
176 nil)
177 (t
178 ;; Ensure we don't create a copy of a pixmap already in
179 ;; icon-list due to use in a different major-mode.
180 (setq pix (set icon-sym
181 (car (delq
182 nil
183 (mapcar
184 (function
185 (lambda (pixmap)
186 (if (equal (image-instance-file-name
187 pixmap)
188 image-file)
189 pixmap)))
190 icon-list)))))
191 ;; If pix is nil, there was no entry in icon-list, so create a
192 ;; new one.
193 (or (image-instance-p pix)
194 (setq pix
195 (glyph-image-instance
196 (set icon-sym (make-glyph image-file)))
197 icon-list (cons pix icon-list)))))
198 (x-set-frame-icon-pixmap
199 (if (framep iconified-frame)
200 iconified-frame
201 ;; unpatched XEmacs 19.6
202 (selected-frame))
203 pix))))
204
205 (defvar icon-list nil
206 "List of existing pixmap objects used as frame icons by frame-icon.el.")
207
208 ;; Hook in so icons will be selected at iconify time
209 (if (string-match "XEmacs" emacs-version)
210 (add-hook 'unmap-frame-hook 'icon-set-frame) ;; XEmacs 19.12
211 (add-hook 'unmap-screen-hook 'icon-set-frame)) ;; Lemacs 19.10
212
213
214 (provide 'frame-icon)
215
216 ;;; frame-icon.el ends here