Mercurial > hg > xemacs-beta
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/utils/frame-icon.el Mon Aug 13 09:15:11 2007 +0200 @@ -0,0 +1,216 @@ +;; frame-icon.el - set up mode-specific icons for each frame under XEmacs + +;; Author: Michael Lamoureux <lamour@engin.umich.edu> +;; Keywords: lisp, extensions +;; date created: 8/3/93 + +;; This file is part of XEmacs. + +;; XEmacs 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. + +;; XEmacs 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 XEmacs; see the file COPYING. If not, write to the Free +;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +;; 02111-1307, USA. + +;;; Synched up with: Not in FSF. + +;;; Commentary: + +;; Modified by Bob Weiner <weiner@infodock.com>, 1/13/94 +;; Handle XEmacs 19.8 pixmaps properly. +;; Also added in more mode settings and added many new bitmaps. +;; Renamed from icon.el to frame-icon.el. +;; Made all definitions start with the same prefix, 'icon-'. +;; Added a provide clause. +;; +;; Modified by Bob Weiner, 2/24/95, to handle XEmacs 19.12. +;; Added set of unmap-frame-hook. +;; +;; Modified by Bob Weiner, 7/17/95, to handle XEmacs 19.12. +;; Changed to use new image-handling protocols and added backwards +;; compatibility functions for new image functions. +;; +;; Modified by Bob Weiner, 7/18/95. +;; Added icon-suffix variable so can use .xbm or .xpm icons. +;; +;; Most Icons were extracted from: /export.lcs.mit.edu:/contrib/AIcons +;; + +;;; Code: + +(defvar icon-directory (concat data-directory "frame-icon/") + "Directory of icons used by frame-icon.el.") + +(defvar icon-suffix ".xbm" + "Must be .xbm or .xpm, depending on the format of the icons in icon-directory.") + +(defconst icon-mode-alist + '( + (default . "question") + ;; For testing + (fundamental-mode . "match") + ;; + (archie-mode . "archie") + (asm-mode . "nuke") + (bbdb-mode . "eye") + (bookmark-menu-mode . "finder") + (Buffer-menu-mode . "help") + (c++-mode . "c++") + (c++-c-mode . "escherknot") + (c-mode . "c") + (awk-mode . "escherknot") + (cvs-mode . "tree") + (f90-mode . "wizard") + (xrdb-mode . "RIP") + ;; + (calc-edit-mode . "cray") + (calc-keypad . "cray") + (calc-mode . "cray") + (calc-trail-mode . "cray") + (MacEdit-mode . "cray") + ;; + (calendar-mode . "calendar") + (comint-mode . "terminal") + (perl-mode . "perl") + (csh-mode . "manpage2") + (db-edit-mode . "filing") + (db-view-mode . "filing") + (dired-mode . "filing") + (doctor-mode . "ying-yang-48") + (edit-faces-mode . "eye") + (Edit-options-mode . "swissknife") + (emacs-lisp-mode . "elisp") + (fortran-mode . "RIP") + (gdb-mode . "bug-48") + (gud-mode . "bug-48") + (gnus-article-mode . "news") + (gnus-group-mode . "news") + (gnus-summary-mode . "news") + (gopher-mode . "gopher") + (html-mode . "xmosaic") + (indented-text-mode . "page") + (Info-mode . "help") + (java-mode . "coffee") + (kotl-mode . "kotl") + (lisp-interaction-mode . "swissknife") + (lisp-mode . "lisp") + (lock-mode . "termlock") + (mail-mode . "scroll2") + (Manual-mode . "manpage") + (man-mode . "manpage") + (news-reply-mode . "match") + (outline-mode . "outline") + (perl-mode . "perl") + (edit-picture . "splat") + (pm-fdr-mode . "mail") + (pm-group-mode . "news") + (pm-msg-edit-mode . "mail") + (pm-msgsumm-mode . "mail") + (pm-mode . "mail") + (rdb-mode . "question") + (rmail-mode . "mail") + (rmail-edit-mode . "mail") + (rmail-summary-mode . "mail") + (scheme-interaction-mode . "swissknife") + (scheme-mode . "lisp") + (shell-mode . "terminal") + (sm-manual-mode . "manpage") + (sql-mode . "sql") + (tcl-mode . "radioactive") + (telnet-mode . "rlogin") + (texinfo-mode . "texinfo") + (text-mode . "page") + (unix-apropos-mode . "manpage") + (ups-mode . "hourglass") ; process listing mode + (vi-mode . "stopsign") + (vip-mode . "stopsign") + (vkill-mode . "load") + (vrml-mode . "drawing") + (vm-mode . "scroll2") + (vm-summary-mode . "scroll2") + (w3-mode . "world") + (waisq-mode . "library") + (wordstar-mode . "words") + (wrolo-mode . "phone") + ;; + (ams-tex-mode . "tex-48") + (foiltex-mode . "tex-48") + (latex-mode . "tex-48") + (LaTeX-mode . "tex-48") + (plain-tex-mode . "tex-48") + (plain-TeX-mode . "tex-48") + (slitex-mode . "tex-48") + (tex-mode . "tex-48") + ) + "Alist of (major-mode . non-suffixed-icon-file-name) elements. +Used to set frame icons based upon the current major mode. +For use with icon-set-frame. See also the variable, 'icon-suffix'.") + +(or (fboundp 'image-instance-p) (fset 'image-instance-p 'pixmapp)) +(or (fboundp 'image-instance-file-name) + (fset 'image-instance-file-name 'pixmap-file-name)) +(or (fboundp 'make-glyph) (fset 'make-glyph 'make-pixmap)) + +(defun icon-set-frame (iconified-frame) + "Set icon for selected frame according to the values in icon-mode-alist." + (save-excursion + (if (framep iconified-frame) + (select-frame iconified-frame)) + (let* ((icon-sym (intern (concat "icon-" (symbol-name major-mode)))) + (pix (and (boundp icon-sym) (symbol-value icon-sym))) + (image (or (cdr (assq major-mode icon-mode-alist)) + (cdr (assq 'default icon-mode-alist)))) + (image-file (expand-file-name (concat image icon-suffix) + icon-directory))) + (cond ((and (image-instance-p pix) + (equal image-file (image-instance-file-name pix))) + nil) + (t + ;; Ensure we don't create a copy of a pixmap already in + ;; icon-list due to use in a different major-mode. + (setq pix (set icon-sym + (car (delq + nil + (mapcar + (function + (lambda (pixmap) + (if (equal (image-instance-file-name + pixmap) + image-file) + pixmap))) + icon-list))))) + ;; If pix is nil, there was no entry in icon-list, so create a + ;; new one. + (or (image-instance-p pix) + (setq pix + (glyph-image-instance + (set icon-sym (make-glyph image-file))) + icon-list (cons pix icon-list))))) + (x-set-frame-icon-pixmap + (if (framep iconified-frame) + iconified-frame + ;; unpatched XEmacs 19.6 + (selected-frame)) + pix)))) + +(defvar icon-list nil + "List of existing pixmap objects used as frame icons by frame-icon.el.") + +;; Hook in so icons will be selected at iconify time +(if (string-match "XEmacs" emacs-version) + (add-hook 'unmap-frame-hook 'icon-set-frame) ;; XEmacs 19.12 + (add-hook 'unmap-screen-hook 'icon-set-frame)) ;; Lemacs 19.10 + + +(provide 'frame-icon) + +;;; frame-icon.el ends here