/lisp/about.el
Lisp | 2262 lines | 2026 code | 130 blank | 106 comment | 121 complexity | 093f6d0f892c78a01a996cb714ed012b MD5 | raw file
Possible License(s): GPL-3.0, BSD-3-Clause
Large files files are truncated, but you can click here to view the full file
- ;;; about.el --- the About The Authors page (shameless self promotion).
- ;; Copyright (c) 1997, 2005 Free Software Foundation, Inc.
- ;; Copyright (C) 2001, 2005 Ben Wing.
- ;; Keywords: extensions
- ;; Version: 2.5
- ;; Maintainer: XEmacs Development Team
- ;; 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
- ;;; Synched up with: Not in FSF.
- ;; Original code: Jamie Zawinski <jwz@jwz.org>
- ;; Text: Ben Wing <ben@xemacs.org>, Jamie Zawinski <jwz@jwz.org>
- ;; Hard: Amiga 1000, Progressive Peripherals Frame Grabber.
- ;; Soft: FG 2.0, DigiPaint 3.0, pbmplus (dec 91), xv 3.0.
- ;; Modified for 19.11 by Eduardo Pelegri-Llopart <pelegri@eng.sun.com>
- ;; and Chuck Thompson <cthomp@xemacs.org>
- ;; More hacking for 19.12 by Chuck Thompson and Ben Wing.
- ;; 19.13 and 19.14 updating done by Chuck Thompson.
- ;; 19.15 and 20.0 updating done by Steve Baur and Martin Buchholz.
- ;; Completely rewritten for 20.3 by Hrvoje Niksic <hniksic@xemacs.org>.
- ;; The original had no version numbers; I numbered the rewrite as 2.0.
- ;; Extensively revamped and most text rewritten by Ben Wing
- ;; <ben@xemacs.org> for 21.4.
- ;; Many things in this file are to gag. Ideally, we should just use
- ;; HTML (or some other extension, e.g. info) for this sort of thing.
- ;; However, W3 loads too long and is too large to be dumped with
- ;; XEmacs.
- ;; If you think this is ugly now -- o boy, you should have seen it
- ;; before.
- (require 'wid-edit)
- ;; People in this list have their individual links from the main page,
- ;; or from the `Legion' page. If they have an image, it should be
- ;; named after the CAR of the list element (baw -> baw.png).
- ;;
- ;; If you add to this list, you'll want to update
- ;; `about-personal-info' and `about-hackers', and add the name to one
- ;; of the three mutually exclusive lists just below.
- (defface about-headline-face
- '((((class color) (background dark))
- (:foreground "red" :bold t))
- ;; red4 is hardly different from black on windows.
- (((class color) (background light)
- (type mswindows))
- (:foreground "red" :bold t))
- (((class color) (background light))
- (:foreground "red4" :bold t))
- (((class grayscale) (background light))
- (:foreground "LightGray" :bold t))
- (((class grayscale) (background dark))
- (:foreground "DimGray" :bold t))
- (t (:bold t)))
- "Face used for color-highlighted headlines in the About page.")
- (defface about-link-face
- '((((class color) (background dark))
- (:foreground "blue" :underline t))
- ;; blue4 is hardly different from black on windows.
- (((class color) (background light) (type mswindows))
- (:foreground "blue3" :underline t))
- (((class color) (background light))
- (:foreground "blue4" :underline t))
- (((class grayscale) (background light))
- (:foreground "DimGray" :bold t :italic t :underline t))
- (((class grayscale) (background dark))
- (:foreground "LightGray" :bold t :italic t :underline t))
- (t (:underline t)))
- "Face used for links in the About page.")
- (defvar xemacs-hackers
- '(
- ;; to sort the stuff below, use M-x sort-regexp-fields RET
- ;; ^.*$ RET (\([a-z]*\) RET
- (adrian "Adrian Aichner" "adrian@xemacs.org")
- (aidan "Aidan Kehoe" "aidan@xemacs.org")
- (aj "Andreas Jaeger" "aj@xemacs.org")
- (ajc "Andrew Cosgriff" "ajc@xemacs.org")
- (alastair "Alastair Houghton" "alastair@xemacs.org")
- (alexm "Alexey Mahotkin" "alexm@xemacs.org")
- (baw "Barry Warsaw" "bwarsaw@xemacs.org")
- (ben "Ben Wing" "ben@xemacs.org")
- (bw "Bob Weiner" "weiner@xemacs.org")
- (cgw "Charles Waldman" "cgw@xemacs.org")
- (chr "Christian Nybř" "chr@xemacs.org")
- (craig "Craig Lanning" "craig@xemacs.org")
- (cthomp "Chuck Thompson" "cthomp@xemacs.org")
- (daiki "Daiki Ueno" "daiki@xemacs.org")
- (dan "Dan Holmsand" "dan@xemacs.org")
- (darrylo "Darryl Okahata" "darrylo@xemacs.org")
- (devin "Matthieu Devin" "devin@xemacs.org")
- (dkindred "Darrell Kindred" "dkindred@xemacs.org")
- (dmoore "David Moore" "dmoore@xemacs.org")
- (didier "Didier Verna" "didier@xemacs.org")
- (eb "Eric Benson" "eb@xemacs.org")
- (fabrice "Fabrice Popineau" "fabrice@xemacs.org")
- (golubev "Ilya Golubev" "golubev@xemacs.org")
- (gunnar "Gunnar Evermann" "gunnar@xemacs.org")
- (hbs "Harlan Sexton" "hbs@xemacs.org")
- (hisashi "Hisashi Miyashita" "hisashi@xemacs.org")
- (hmuller "Hans Muller" "hmuller@xemacs.org")
- (hniksic "Hrvoje Niksic" "hniksic@xemacs.org")
- (hobley "David hobley" "hobley@xemacs.org")
- (james "Jerry James" "james@xemacs.org")
- (jan "Jan Vroonhof" "jan@xemacs.org")
- (jareth "Jareth Hein" "jareth@xemacs.org")
- (jas "Simon Josefsson" "simon@xemacs.org")
- (jason "Jason R. Mastaler" "jason@xemacs.org")
- (jens "Jens Lautenbacher" "jens@xemacs.org")
- (jmiller "Jeff Miller" "jmiller@xemacs.org")
- (jonathan "Jonathan Harris" "jonathan@xemacs.org")
- (juhp "Jens-Ulrik Holger Petersen" "petersen@xemacs.org")
- (jwz "Jamie Zawinski" "jwz@xemacs.org")
- (kazz "IENAGA Kazuyuki" "ienaga@xemacs.org")
- (kirill "Kirill Katsnelson" "kirill@xemacs.org")
- (kyle "Kyle Jones" "kyle@xemacs.org")
- (larsi "Lars Magne Ingebrigtsen" "larsi@xemacs.org")
- (marcpa "Marc Paquette" "marcpa@xemacs.org")
- (martin "Martin Buchholz" "martin@xemacs.org")
- (mcook "Michael R. Cook" "mcook@xemacs.org")
- (mly "Richard Mlynarik" "mly@xemacs.org")
- (morioka "MORIOKA Tomohiko" "morioka@xemacs.org")
- (mta "Mike Alexander" "mta@xemacs.org")
- (ograf "Oliver Graf" "ograf@xemacs.org")
- (olivier "Olivier Galibert" "olivier@xemacs.org")
- (oscar "Oscar Figueiredo" "oscar@xemacs.org")
- (pelegri "Eduardo Pelegri-Llopart" "pelegri@xemacs.org")
- (pez "Peter Pezaris" "pez@xemacs.org")
- (piper "Andy Piper" "andy@xemacs.org")
- (pittman "Daniel Pittman" "pittman@xemacs.org")
- (purvis "Malcolm Purvis" "malcolmp@xemacs.org")
- (rickc "Rick Campbell" "rickc@xemacs.org")
- (rose "John Rose" "rose@xemacs.org")
- (rossini "Anthony Rossini" "rossini@xemacs.org")
- (scop "Ville Skyttä" "scop@xemacs.org")
- (slb "Steve Baur" "steve@xemacs.org")
- (sperber "Michael Sperber" "mike@xemacs.org")
- (stig "Jonathan Stigelman" "stig@xemacs.org")
- (stigb "Stig Bjorlykke" "stigb@xemacs.org")
- (thiessel "Marcus Thiessel" "marcus@xemacs.org")
- (tomonori "Tomonori Ikeyama" "tomonori@xemacs.org")
- (tuck "Matt Tucker" "tuck@xemacs.org")
- (turnbull "Stephen Turnbull" "stephen@xemacs.org")
- (vin "Vin Shelton" "acs@xemacs.org")
- (viteno "Norbert Koch" "viteno@xemacs.org")
- (vladimir "Vladimir Ivanovic" "vladimir@xemacs.org")
- (wmperry "William Perry" "wmperry@xemacs.org")
- (yoshiki "Yoshiki Hayashi" "yoshiki@xemacs.org")
- )
- "Alist of XEmacs hackers.")
- (defvar about-current-release-maintainers
- ;; this list should not necessarily be in sorted order.
- '(adrian james piper purvis sperber turnbull vin viteno))
- (defvar about-other-current-hackers
- ;; to sort this list or the one below, use:
- ;; M-x sort-regexp-fields RET [a-z]+ RET \(.*\) RET
- '(ben daiki darrylo didier fabrice golubev hniksic jan jason jmiller
- jonathan kazz kirill larsi martin morioka mta ograf olivier oscar rossini
- pittman scop tomonori tuck wmperry yoshiki))
- (defvar about-once-and-future-hackers
- '(aj ajc alastair baw bw cgw chr craig cthomp dan devin dkindred dmoore eb
- gunnar hbs hisashi hmuller hobley jareth jas jens juhp jwz kyle marcpa
- mcook mly ograf pelegri pez rickc rose slb stig stigb thiessel vladimir))
- ;; The CAR of alist elements is a valid argument to `about-url-link'.
- ;; It is preferred to a simple string, because it makes maintenance
- ;; easier. Please add new URLs to this list.
- (defvar about-url-alist
- ;; to sort the stuff below, use M-x sort-regexp-fields RET
- ;; ^.*$ RET (\([a-z]*\) RET
- '((ajc . "http://www-personal.monash.edu.au/~ajc/")
- (alastair . "http://website.lineone.net/~ajhoughton/")
- (baw . "http://barry.wooz.org/")
- (ben . "http://www.666.com/ben/")
- (ben-xemacs . "http://www.xemacs.org/Architecting-XEmacs/index.html")
- (beopen . "http://www.beopen.com/")
- (cc-mode . "http://cc-mode.sourceforge.net/")
- (chr . "http://www.xemacs.org/faq/")
- (daiki . "http://deisui.bug.org/diary/servlet/view")
- (dkindred . "http://www.cs.cmu.edu/People/dkindred/me.html")
- (dmoore . "http://oj.egbt.org/dmoore/")
- (didier . "http://didier.lrde.org/")
- (dvljazz . "http://www.didierverna.com/")
- (fabrice . "http://www.ese-metz.fr/~popineau/")
- (fptex . "http://www.fptex.org/")
- (james . "http://www.cs.usu.edu/~jerry/")
- (jas . "http://josefsson.org/")
- (jason . "http://www.mastaler.com/")
- (juhp . "http://www.01.246.ne.jp/~juhp/")
- (jwz . "http://www.jwz.org/")
- (kazz . "http://www.imasy.or.jp/~kazz/")
- (kyle . "http://www.wonderworks.com/kyle/")
- (larsi . "http://quimby.gnus.org/lmi/")
- (marcpa . "http://www.positron911.com/products/power.htm")
- (ograf . "http://www.fga.de/~ograf/")
- (pez . "http://cbs.sportsline.com/")
- (piper . "http://www.andypiper.com/")
- (rossini . "http://faculty.washington.edu/rossini/")
- (stigb . "http://www.tihlde.hist.no/~stigb/")
- (turnbull . "http://turnbull.sk.tsukuba.ac.jp/yaseppochi-gumi.html")
- (vin . "http://www.upa.org/")
- (vladimir . "http://www.leonora.org/~vladimir/")
- (wget . "http://sunsite.dk/wget/")
- (xemacs . "http://www.xemacs.org/")
- (xemacs-cvs . "http://cvs.xemacs.org/")
- (xemacs-lists . "http://www.xemacs.org/Lists/"))
- "Some of the more important URLs.")
- (defvar about-left-margin 3)
- (defun about-lookup-url (name)
- (let ((result (cdr (assq name about-url-alist))))
- (assert result)
- result))
- ;; Insert a URL link in the buffer. TEXT-TO-INSERT is the text that will
- ;; be hyperlinked; if omitted, the URL is used. HELP-ECHO is some text that
- ;; will be displayed when the mouse moves over the link.
- (defun about-url-link (url &optional text-to-insert help-echo)
- (assert url)
- (when (symbolp url)
- (setq url (about-lookup-url url)))
- (when (and text-to-insert (symbolp text-to-insert))
- (setq text-to-insert (about-lookup-url text-to-insert)))
- (widget-create 'url-link
- :button-prefix ""
- :button-suffix ""
- :help-echo help-echo
- :tag (or text-to-insert url)
- url))
- ;; Insert a mail link in the buffer.
- (defun about-mailto-link (address)
- (lexical-let ((address address))
- (widget-create 'link
- :tag address
- :button-prefix ""
- :button-suffix ""
- :action (lambda (widget &optional event)
- (compose-mail address))
- :help-echo (format "Send mail to %s" address))))
- ;; Attach a face to a string, in order to be inserted into the buffer.
- ;; Make sure that the extent is duplicable, but unique. Returns the
- ;; string.
- (defun about-with-face (string face)
- (let ((ext (make-extent 0 (length string) string)))
- (set-extent-property ext 'duplicable t)
- (set-extent-property ext 'unique t)
- (set-extent-property ext 'start-open t)
- (set-extent-property ext 'end-open t)
- (set-extent-face ext face))
- string)
- ;; Switch to buffer NAME. If it doesn't exist, make it and switch to it.
- (defun about-get-buffer (name)
- (cond ((get-buffer name)
- (switch-to-buffer name)
- (delete-other-windows)
- (goto-char (point-min))
- name)
- (t
- (switch-to-buffer name)
- (delete-other-windows)
- (buffer-disable-undo)
- ;; #### This is a temporary fix until wid-edit gets fixed right.
- ;; We don't do everything that widget-button-click does -- i.e.
- ;; we don't change the link color on button down -- but that's
- ;; not important.
- (add-local-hook
- 'mouse-track-click-hook
- #'(lambda (event count)
- (cond
- ((widget-event-point event)
- (let* ((pos (widget-event-point event))
- (button (get-char-property pos 'button)))
- (when button
- (widget-apply-action button event)
- t))))))
- (set-specifier left-margin-width about-left-margin (current-buffer))
- (set (make-local-variable 'widget-button-face) 'about-link-face)
- nil)))
- ;; Set up the stuff needed by widget. Allowed types are `bury' and
- ;; `kill'. The reason why we offer both types is performance: when a
- ;; large buffer is merely buried, `about' will find it again when the
- ;; user requests it, instead of recreating it. Small buffers can be
- ;; killed because it is cheap to generate their contents.
- (defun about-finish-buffer (&optional type)
- (or type (setq type 'bury))
- (widget-insert "\n")
- (if (eq type 'bury)
- (widget-create 'link
- :help-echo "Bury this buffer"
- :action (lambda (widget event)
- (if event
- ;; For some reason,
- ;; (bury-buffer (event-buffer event))
- ;; doesn't work.
- (with-selected-window (event-window event)
- (bury-buffer))
- (bury-buffer)))
- :tag "Bury")
- (widget-create 'link
- :help-echo "Kill this buffer"
- :action (lambda (widget event)
- (if event
- (kill-buffer (event-buffer event))
- (kill-buffer (current-buffer))))
- :tag "Kill"))
- (widget-insert " this buffer and return to previous.\n")
- (use-local-map (make-sparse-keymap))
- (set-keymap-parent (current-local-map) widget-keymap)
- (if (eq type 'bury)
- (progn
- (local-set-key "q" 'bury-buffer)
- (local-set-key "l" 'bury-buffer))
- (let ((dispose (lambda () (interactive) (kill-buffer (current-buffer)))))
- (local-set-key "q" dispose)
- (local-set-key "l" dispose)))
- (local-set-key " " 'scroll-up)
- (local-set-key [backspace] 'scroll-down)
- (local-set-key "\177" 'scroll-down)
- (widget-setup)
- (goto-char (point-min))
- (toggle-read-only 1)
- (set-buffer-modified-p nil))
- ;; Make the appropriate number of spaces.
- (defun about-center (string-or-glyph)
- (let ((n (- (startup-center-spaces string-or-glyph) about-left-margin)))
- (make-string (if (natnump n) n 0) ?\ )))
- ;; Main entry page.
- ;;;###autoload
- (defun about-xemacs ()
- "Describe the True Editor and its minions."
- (interactive)
- (unless (about-get-buffer "*About XEmacs*")
- (widget-insert (about-center xemacs-logo))
- (widget-create 'default
- :format "%t"
- :tag-glyph xemacs-logo)
- (widget-insert "\n")
- (let* ((emacs-short-version
- (cond (emacs-beta-version (format "%d.%d.%d"
- emacs-major-version
- emacs-minor-version
- emacs-beta-version))
- (emacs-patch-level (format "%d.%d.%d"
- emacs-major-version
- emacs-minor-version
- emacs-patch-level))
- (t (format "%d.%d"
- emacs-major-version
- emacs-minor-version))))
- (emacs-release-date
- (if (and (boundp 'xemacs-release-date)
- (stringp xemacs-release-date)
- (string-match "^\\([0-9]\\{4\\}\\)-\\([0-9][0-9]\\)-"
- xemacs-release-date))
- (format "%s %s"
- (aref [ "January" "February" "March" "April"
- "May" "June" "July" "August"
- "September" "October" "November" "December" ]
- (1- (string-to-number
- (match-string 2 xemacs-release-date))))
- (match-string 1 xemacs-release-date))
- "February 2005 (defaulted in about.el)"))
- (emacs-variant-info (if (and xemacs-extra-name
- (stringp xemacs-extra-name)
- (< 0 (length xemacs-extra-name)))
- (format " %s" xemacs-extra-name)
- ""))
- (emacs-about-version (format "version %s of %s%s"
- emacs-short-version
- emacs-release-date
- emacs-variant-info)))
- (widget-insert (about-center emacs-about-version))
- (widget-create 'link :help-echo "What's new in XEmacs"
- :action 'about-news
- emacs-about-version))
- (widget-insert
- "\n\n"
- (about-with-face "XEmacs" 'bold-italic)
- " is a powerful, highly customizable open source text editor and
- application development system, with full GUI support. It is protected
- under the GNU Public License and related to other versions of Emacs, in
- particular GNU Emacs. Its emphasis is on modern graphical user
- interface support and an open software development model, similar to
- Linux. XEmacs has an active development community numbering in the
- hundreds (and thousands of active beta testers on top of this), and runs
- on all versions of MS Windows, on Linux, and on nearly every other
- version of Unix in existence. ")
- (widget-create 'link :help-echo "An XEmacs history lesson"
- :action 'about-collaboration
- :button-prefix ""
- :button-suffix ""
- "Support for XEmacs")
- (widget-insert
- " has been supplied by
- Sun Microsystems, University of Illinois, Lucid, ETL/Electrotechnical
- Laboratory, Amdahl Corporation, BeOpen, and others, as well as the
- unpaid time of a great number of individual developers.
- XEmacs has many ")
- (widget-create 'link :help-echo "See a list of XEmacs advantages over GNU Emacs"
- :action 'about-advantages
- :button-prefix ""
- :button-suffix ""
- "advantages")
- (widget-insert (format " over GNU Emacs. In addition, XEmacs %d.%d
- provides many " emacs-major-version emacs-minor-version))
- (widget-create 'link
- :help-echo (format
- "See a list of new features in XEmacs %d.%d"
- emacs-major-version emacs-minor-version)
- :action 'about-news
- :button-prefix ""
- :button-suffix ""
- "new features")
- (widget-insert " not found in previous versions of XEmacs.
- More details on XEmacs's functionality, including bundled packages, can
- be obtained through the ")
- (widget-create 'info-link
- :help-echo "Browse the info system"
- :button-prefix ""
- :button-suffix ""
- :tag "info"
- "(dir)")
- (widget-insert
- " on-line information system.\n
- The XEmacs web page can be browsed, using any WWW browser at\n
- \t\t ")
- (about-url-link 'xemacs nil "Visit XEmacs WWW page")
- (widget-insert "\n
- Note that W3 (XEmacs's own browser), might need customization (due to
- firewalls) in order to work correctly.
- XEmacs is the result of the time and effort of many people. The
- developers responsible for this release are:\n\n")
- (labels ((setup-person (who)
- (widget-insert "\t* ")
- (let* ((entry (assq who xemacs-hackers))
- (name (cadr entry))
- (address (caddr entry)))
- (widget-create 'link
- :help-echo (concat "Find out more about " name)
- :button-prefix ""
- :button-suffix ""
- :action 'about-maintainer
- :tag name
- :value who)
- (widget-insert (format " <%s>\n" address)))))
- ;; Setup persons responsible for this release.
- (mapc #'setup-person about-current-release-maintainers)
- (widget-insert "\n\t* ")
- (widget-create 'link :help-echo "A legion of XEmacs hackers"
- :action 'about-hackers
- :button-prefix ""
- :button-suffix ""
- "The full list of contributors...")
- (widget-insert "\n
- The current package release engineer is Norbert Koch.
- Andreas Jaeger was the first package release engineer following the split
- of the XEmacs code base into core implementation and packaged Lisp.
- He was succeeded by Steve Youngs, then Ville Skyttä.\n\n")
- (setup-person 'viteno)
- (setup-person 'aj)
- (setup-person 'scop)
- (widget-insert "
- Vin Shelton is the maintainer of the stable branch, 21.4.
- Stephen Turnbull was the project manager for the release. Andy Piper
- maintained the Windows branch until the release was declared stable.\n\n")
- (setup-person 'vin)
- (setup-person 'turnbull)
- (setup-person 'piper)
- (widget-insert "
- Ben Wing and Martin Buchholz were heavy code contributors and maintainers
- for 21.2 (the development branch leading to 21.4).\n\n")
- (setup-person 'martin)
- (setup-person 'ben)
- (widget-insert "
- Steve Baur was the primary maintainer for 19.15 through 21.0.\n\n")
- (setup-person 'slb)
- (widget-insert "
- Chuck Thompson and Ben Wing were the maintainers for 19.11 through 19.14
- and heavy code contributors for 19.8 through 19.10.\n\n")
- (setup-person 'cthomp)
- (setup-person 'ben)
- (widget-insert "
- Jamie Zawinski was the maintainer for 19.0 through 19.10 (the entire
- history of Lucid Emacs).\n\n")
- (setup-person 'jwz))
- (about-finish-buffer)
- ;; it looks horrible with the cursor on the first line, since it's
- ;; so big.
- (goto-line 2)))
- ;; View news
- (defun about-news (&rest ignore)
- (view-emacs-news)
- (message "%s" (substitute-command-keys
- "Press \\[kill-buffer] to exit this buffer")))
- (defun about-collaboration (&rest ignore)
- (unless (about-get-buffer "*About Collaboration*")
- (let ((title "Why Another Version of Emacs"))
- (widget-insert
- "\n"
- (about-center title)
- (about-with-face title 'bold)))
- (widget-insert
- "\n\n"
- (about-with-face "The Lucid, Inc. Point of View"
- 'italic)
- " (quite outdated)\n
- At the time of the inception of Lucid Emacs (the former name of
- XEmacs), Lucid's latest product was Energize, a C/C++ development
- environment. Rather than invent (and force our users to learn) a new
- user interface, we chose to build part of our environment on top of
- the world's best editor, GNU Emacs. (Though our product is
- commercial, the work we did on GNU Emacs is free software, and is
- useful in its own right.)
- We needed a version of Emacs with mouse-sensitive regions, multiple
- fonts, the ability to mark sections of a buffer as read-only, the
- ability to detect which parts of a buffer have been modified, and many
- other features.
- For our purposes, the existing version of Epoch was not sufficient; it
- did not allow us to put arbitrary pixmaps/icons in buffers, `undo' did
- not restore changes to regions, regions did not overlap and merge
- their attributes in the way we needed, and several other things.
- We could have devoted our time to making Epoch do what we needed (and,
- in fact, we spent some time doing that in 1990) but, since the FSF
- planned to include Epoch-like features in their version 19, we decided
- that our efforts would be better spent improving Emacs 19 instead of
- Epoch.
- Our original hope was that our changes to Emacs would be incorporated
- into the \"official\" v19. However, scheduling conflicts arose, and
- we found that, given the amount of work still remaining to be done, we
- didn't have the time or manpower to do the level of coordination that
- would be necessary to get our changes accepted by the FSF.
- Consequently, we released our work as a forked branch of Emacs,
- instead of delaying any longer.
- Roughly a year after Lucid Emacs 19.0 was released, a beta version of
- the FSF branch of Emacs 19 was released. The FSF version is better in
- some areas, and worse in others, as reflects the differing focus of
- our development efforts.
- We plan to continue developing and supporting Lucid Emacs, and merging
- in bug fixes and new features from the FSF branch as appropriate; we
- do not plan to discard any of the functionality that we implemented
- which RMS has chosen not to include in his version.
- Certain elements of Lucid Emacs, or derivatives of them, have been
- ported to the FSF version. We have not been doing work in this
- direction, because we feel that Lucid Emacs has a cleaner and more
- extensible substrate, and that any kind of merger between the two
- branches would be far easier by merging the FSF changes into our
- version than the other way around.
- We have been working closely with the Epoch developers to merge in the
- remaining Epoch functionality which Lucid Emacs does not yet have.
- Epoch and Lucid Emacs will soon be one and the same thing. Work is
- being done on a compatibility package which will allow Epoch 4 code to
- run in XEmacs with little or no change.\n\n"
- (about-with-face "The Sun Microsystems, Inc. Point of View"
- 'italic)
- "\n
- Emacs 18 has been around for a long, long time. Version 19 was
- supposed to be the successor to v18 with X support. It was going to
- be available \"real soon\" for a long time (some people remember
- hearing about v19 as early as 1984!), but it never came out. v19
- development was going very, very slowly, and from the outside it
- seemed that it was not moving at all. In the meantime other people
- gave up waiting for v19 and decided to build their own X-aware
- Emacsen. The most important of these was probably Epoch, which came
- from the University of Illinois (\"UofI\") and was based on v18.
- Around 1990, the Developer Products group within Sun Microsystems
- Inc., decided that it wanted an integrated editor. (This group is now
- known as DevPro. It used to be known as SunPro - the name was changed
- in mid-1994.) They contracted with the University of Illinois to
- provide a number of basic enhancements to the functionality in Epoch.
- UofI initially was planning to deliver this on top of Epoch code.
- In the meantime, (actually some time before they talked with UofI)
- Lucid had decided that it also wanted to provide an integrated
- environment with an integrated editor. Lucid decided that the Version
- 19 base was a better one than Version 18 and thus decided not to use
- Epoch but instead to work with Richard Stallman, the head of the Free
- Software Foundation and principal author of Emacs, on getting v19 out.
- At some point Stallman and Lucid parted ways. Lucid kept working and
- got a v19 out that they called Lucid Emacs 19.
- After Lucid's v19 came out it became clear to us (the UofI and Sun)
- that the right thing to do was to push for an integration of both
- Lucid Emacs and Epoch, and to get the deliverables that Sun was asking
- from the University of Illinois on top of this integrated platform.
- Until 1994, Sun and Lucid both actively supported XEmacs as part of
- their product suite and invested a comparable amount of effort into
- it. Substantial portions of the current code have originated under
- the support of Sun, either directly within Sun, or at UofI but paid
- for by Sun. This code was kept away from Lucid for a while, but later
- was made available to them. Initially Lucid didn't know that Sun was
- supporting UofI, but later Sun was open about it.
- Around 1992 DevPro-originated code started showing up in Lucid Emacs,
- starting with the infusion of the Epoch redisplay code. The separate
- code bases at Lucid, Sun, and the University of Illinois were merged,
- allowing a single XEmacs to evolve from that point on.
- Sun originally called the integrated product ERA, for \"Emacs
- Rewritten Again\". SunPro and Lucid eventually came to an agreement
- to find a name for the product that was not specific to either
- company. An additional constraint that Lucid placed on the name was
- that it must contain the word \"Emacs\" in it -- thus \"ERA\" was not
- acceptable. The tentatively agreed-upon name was \"XEmacs\", and this
- has been the name of the program since version 19.11.)
- As of 1997, Sun is shipping XEmacs as part of its Developer Products
- integrated programming environment \"Sun WorkShop\". Sun is
- continuing to support XEmacs development, with focus on
- internationalization and quality improvement.\n\n"
- (about-with-face "Lucid goes under" 'italic)
- "\n
- Around mid-'94, Lucid went out of business. Lucid founder Richard
- Gabriel's book \"Patterns of Software\", which is highly recommended
- reading in any case, documents the demise of Lucid and suggests
- lessons to be learned for the whole software development community.
- Development on XEmacs, however, has continued unabated under the
- auspices of Sun Microsystems and the University of Illinois, with help
- from Amdahl Corporation and INS Engineering Corporation. Sun plans to
- continue to support XEmacs into the future.\n\n"
- (about-with-face "The Amdahl Corporation point of view"
- 'italic)
- "\n
- Amdahl Corporation's Storage Products Group (SPG) uses XEmacs as the
- focal point of a environment for development of the microcode used in
- Amdahl's large-scale disk arrays, or DASD's. SPG has joint ventures
- with Japanese companies, and decided in late 1994 to contract out for
- work on XEmacs in order to hasten the development of Mule support
- \(i.e. support for Japanese, Chinese, etc.) in XEmacs and as a gesture
- of goodwill towards the XEmacs community for all the work they have
- done on making a powerful, modern, freely available text editor.
- Through this contract, Amdahl provided a large amount of work in
- XEmacs in the form of rewriting the basic text-processing mechanisms
- to allow for Mule support and writing a large amount of the support
- for multiple devices.
- Although Amdahl is no longer hiring a full-time contractor, they are
- still funding part-time work on XEmacs and providing resources for
- further XEmacs development.\n\n"
- (about-with-face "The INS Engineering point of view"
- 'italic)
- "\n
- INS Engineering Corporation, based in Tokyo, bought rights to sell
- Energize when Lucid went out of business. Unhappy with the
- performance of the Japanese support in XEmacs 19.11, INS also
- contributed to the XEmacs development from late 1994 to early
- 1995.\n")
- (about-finish-buffer)))
- (defun about-advantages (&rest ignore)
- (unless (about-get-buffer "*About Advantages*")
- (let ((title "XEmacs Advantages over GNU Emacs"))
- (widget-insert
- "\n"
- (about-center title)
- (about-with-face title 'bold)))
- (widget-insert
- "\n
- * Much better GUI support:
- -- a real toolbar
- -- more comprehensive and better-designed menubars
- -- horizontal and vertical scrollbars in all windows
- -- proper dialog boxes
- -- tabs for selecting buffers
- -- support for variable-width and variable height fonts
- -- support for arbitrary pixmaps and widgets in a buffer
- -- face support on TTY's, including color
- Many of these are now available in GNU Emacs 21, but the XEmacs
- implementations are generally more efficient, and the XEmacs APIs are
- generally more in line with modern programming practices.
- * An installable package system, with a huge number of packages available
- that have been tested and are known to work with the latest version
- of XEmacs.
- * Comprehensive support for the GTK toolkit.
- * An open development community, with contributions welcome and no need
- to sign over your copyright to any organization. (Please send
- contributions to xemacs-patches@xemacs.org. See http://www.xemacs.org
- for more information on XEmacs mailing lists, and other info.)
- * Support for display on multiple simultaneous X and/or TTY devices.
- * Powerful, flexible control over the display characteristics of most
- of the visual aspects of XEmacs through the use of specifiers, which
- allow separate values to be specified for individual buffers,
- windows, frames, devices, device classes, and device types.
- * A clean, modern, abstracted Lisp interface to the menubar, toolbar,
- window-system events, key combinations, extents (regions in a buffer
- with specific properties), and all other display aspects.
- * Proper integration with Xt and Motif (including Motif menubars and
- scrollbars). Motif look-alike menubars and scrollbars are provided
- for those systems without real Motif support.
- * Many improvements to the multilingual support, such as the ability to
- enter text for complex languages using the XIM mechanism and
- localization of menubar text for the Japanese locale.
- \n\n")
- (about-finish-buffer)))
- (defvar about-glyphs nil
- "Cached glyphs")
- ;; Return a maintainer's glyph
- (defun about-maintainer-glyph (who)
- (let ((glyph (cdr (assq who about-glyphs))))
- (unless glyph
- (let ((file (expand-file-name
- (concat (symbol-name who)
- (if (memq (device-class)
- '(color grayscale))
- "" "m")
- ".png")
- (locate-data-directory "photos")))
- (data nil))
- (setq glyph
- (cond ((stringp data)
- (make-glyph
- (if (featurep 'png)
- `([png :data ,data]
- [string :data "[Image]"])
- `([string :data "[Image]"]))))
- ((eq data 'error)
- (make-glyph [string :data "[Error]"]))
- (file
- (make-glyph
- (if (featurep 'png)
- `([png :file ,file]
- [string :data "[Image]"])
- `([string :data "[Image]"]))))
- (t
- (make-glyph [nothing]))))
- (set-glyph-property glyph 'baseline 100)
- ;; Cache the glyph
- (push (cons who glyph) about-glyphs)))
- glyph))
- ;; Insert personal info about a maintainer. See also
- ;; `about-hacker-contribution'. Note that the info in
- ;; `about-hacker-contribution' is automatically displayed in the
- ;; person's own page, so there is no need to duplicate it.
- (defun about-personal-info (entry)
- (ecase (car entry)
- ;; you can sort the stuff below with something like
- ;;(sort-regexp-fields nil
- ;; " *(\\([^()]\\|([^()]*)\\|(\\([^()]\\|([^()]*)\\)*)\\)*)\n"
- ;; " *(\\([a-z]*\\)"
- ;; (region-beginning) (region-end))
- (adrian
- (widget-insert
- "\
- Sorry, no personal information available about me yet.\n"))
- (aj
- (widget-insert "\
- I'm a software developer working for the SuSE Labs of the Linux
- distributor SuSE. My main task is to improve the GNU C library.")
- (widget-insert ".\n"))
- (ajc
- (widget-insert "\
- When not helping maintain the XEmacs website, Andrew is a Network
- Software Engineer(tm) for Monash University in Australia, maintaining
- webservers and doing random other things. As well as spending spare
- time being an Eager Young Space Cadet and fiddling with XEmacs/Gnus
- et. al., he spends his time pursuing, among other things, a Life.
- Some of this currently involves doing an A-Z (by country) of
- restaurants with friends, and has, in the past, involved dyeing his
- hair various colours (see ")
- (about-url-link 'ajc nil "Visit Andrew's home page")
- (widget-insert ".\n"))
- (alastair
- (widget-insert
- "\
- Alastair, apart from being an all-round hacker, occasional contributor
- to free software projects and general good egg(!), currently works for
- Telsis, a manufacturer of telephony equipment on the south coast of
- England. He'd quite like to have his own company one day, but has yet
- to think of that killer product...
- See also ")
- (about-url-link 'alastair nil "Visit Alastair's home page")
- (widget-insert ".\n"))
- (baw
- (widget-insert "\
- As of November 2000, I am a software engineer with the Pythonlabs at
- Digital Creations. Pythonlabs is the core team developing and
- maintaining the Python open source, object-oriented scripting
- language. Digital Creations is the publisher of Zope, an open source
- content management system written in Python.
- In addition to my Python and Zope work, I am lead developer for the
- GNU Mailman project, a mailing list management system written,
- naturally, in Python. See the trend?
- On the side I play bass with a number of Washington DC area bands and
- also write poems about cows, milk, and fathers. Here's a sample, and
- drop me an email if you live in the NYC to Charlotte region; I'll let
- you know when the band's playing in your area. It'd be cool to meet
- you, and talking about XEmacs would make my wife very happy by helping
- to fend off the legions of groupies that seem to follow me everywhere.
- Milk Me Daddy
- (C) 1990 Warsaw
- ===============
- Oh daddy with your fingers pink
- From whose udders do you drink?
- Thy milk offends with putrid stink
- I'll vomit now, lactose I think
- If I could dream, I'd be a cow
- Not horse, or mule, or barnyard sow
- The cud I'd chew would drip and how!
- So milk me daddy, milk me now!
- My bovine nature knows no bounds
- I'd naught awake at midnight sounds
- Of teens approaching o'er the grounds
- To tip with glee, then screech like clowns
- And so I stare into this glass
- Of sweaty juice, I gulp so fast
- Each drop I lick, down to the last
- The vertigo I know will pass
- My mother smiles and pats my head
- She's proud of me, so she has said
- My pop just now gets out of bed
- His eyes quite comatose and red
- He'll empathize my milky fate
- Whilest sopping gravy from his plate
- And as the hour is getting late
- His belly taut with all he ate
- He isn't often quite so chatty
- His arteries clogged with meat so fatty
- With burps that launch soup, thick and splatty
- Oh how I wish you'd milk me daddy\n\n\t")
- (about-url-link 'baw nil "Visit Barry's home page")
- (widget-insert "\n"))
- (ben
- (widget-insert
- "\
- Since September 1992, I've worked on XEmacs as a contractor for
- various companies and more recently as an unpaid volunteer.
- Alas, life has not been good to me recently. This former San Francisco
- \"Mission Critter\" developed insidious hand and neck problems after a
- brief stint working on a Java-based VRML toolkit for the now defunct
- Dimension X, and I was forced to quit working. I was exiled first to
- \"Stroller Valley\" and later all the way to Tucson, Arizona, and for two
- years was almost completely disabled due to pain. More recently I have
- fought my way back with loads and loads of narcotic painkillers, and after
- a stint as an art student at the University of Arizona I'm currently a
- Ph.D. student in linguistics at the University of Texas, Austin.\n\n")
- (widget-insert "Architecting XEmacs: ")
- (about-url-link 'ben-xemacs nil "Find the miracles in store for XEmacs")
- (widget-insert "\nBen's home page: ")
- (about-url-link 'ben nil "Visit Ben's page")
- (widget-insert "\n"))
- (bw
- (widget-insert "\
- His interests include user interfaces, information management, CASE
- tools, communications and enterprise integration.\n"))
- (cgw
- (widget-insert
- "\
- Sorry, no personal information available about me yet.\n"))
- (chr
- (widget-insert "\
- Christian is a student at the Norwegian School of Economics and
- Business Administration in Bergen, Norway. He used to work for an
- internet startup called New Media Science, doing scripting and
- violation of HTML DTD's. After graduation, spring 1999, he'll be
- looking for a job involving lisp programming, French and Russian.\n"))
- (craig
- (widget-insert
- "\
- Sorry, no personal information available about me yet.\n"))
- (cthomp
- (widget-insert "\
- Chuck is a senior system and network administrator for the Computer
- Science department at the Unversity of Illinois. In one previous life
- he spent every waking hour working on XEmacs. In another he dabbled
- as a project manager for a streaming video startup (RIP). His current
- reason for not having time to contribute to XEmacs is the Thompson
- Twins.\n"))
- (daiki
- (about-url-link 'daiki nil "Visit Daiki's page"))
- (dan
- (widget-insert
- "\
- Sorry, no personal information available about me yet.\n"))
- (darrylo
- (widget-insert
- "\
- Perennial Emacs hacker since 1986 or so, when he first started on GNU
- Emacs 17.something. Over the years, he's developed \"OEmacs\", the first
- version of GNU Emacs 19 for MSDOS, and \"bigperl\", a 32-bit version of
- Perl4 for MSDOS. In recent years, reality has intruded and he no longer
- has much time for playing with cool programs. What little time he has
- now goes to XEmacs hacking, where he's worked on speeding up dired under
- MS Windows, and to feeding his two cats.\n"))
- (devin
- (widget-insert
- "\
- Sorry, no personal information available about me yet.\n"))
- (dkindred
- (widget-insert "\
- Darrell is currently a doctoral student in computer science at
- Carnegie Mellon University, but he's trying hard to kick that
- habit.
- See ")
- (about-url-link 'dkindred nil "Visit Darrell's WWW page")
- (widget-insert ".\n"))
- (dmoore
- (widget-insert "\
- David is a student in the Computer Systems Laboratory at UCSD. When
- he manages to have free time, he usually spends it on 200 mile bicycle
- rides, learning German or showing people the best mail & news
- environment he's found in 10 years. (That'd be XEmacs, Gnus and bbdb,
- of course.) He can be found at `druidmuck.egbt.org 4201' at various
- hours of the day.
- He has a page at ")
- (about-url-link 'dmoore nil "Visit David's home page")
- (widget-insert ".\n"))
- (didier
- (widget-insert "\
- Didier has a Ph.D. in Computer Science and is currently working as an
- assistant professor for an engineering school in Paris). He gives
- lectures on Operating Systems, Computer Graphics, Functional Programming
- and Typesetting. His research interests include Genericity, Object
- Orientation and Functional Programming, all in one language:
- ... Common Lisp.
- Apart from the world of XEmacs and Emacs Lisp, Didier is also the author
- of several LaTeX packages (FiNK, FiXme, QCM and CurVe) and an occasional
- contributor to other Free Software projects (the GNU Autotools most
- notably; he was one of the technical reviewers for the \"Goat Book\").
- But all of this is only 60% true... Two days per week, Didier is indeed
- a semi-professional Jazz guitar player (and singer), which means that he
- doesn't quite earn his crust with it, but things may very well reverse in
- the future...\n")
- (widget-insert "\nVisit Didier's scientific website: ")
- (about-url-link 'didier nil "Visit Didier's scientific website")
- (widget-insert "\nVisit Didier's musical website: ")
- (about-url-link 'dvljazz nil "Visit Didier's musical website")
- (widget-insert "\n"))
- (eb
- (widget-insert
- "\
- Sorry, no personal information available about me yet.\n"))
- (fabrice
- (widget-insert
- "\
- I'm a computer science researcher and teacher in a French electrical
- engineering institution called Supelec. My fields of interest are
- symbolic artificial intelligence, theoretical computer science, functional
- languages ... and TeX.
- Lately, my hacking time has been devoted to porting the Web2C/teTeX
- distribution of TeX for Unix to Win32, and I'm still maintaining it.
- It is included in the TeX Live cdrom edited by Sebastian Rahtz.\n")
- (widget-insert "Visit fpTeX home page: ")
- (about-url-link 'fptex nil "Visit fpTeX home page")
- (widget-insert "\nFabrice's home page: ")
- (about-url-link 'fabrice nil "Visit Fabrice's page")
- (widget-insert "\n"))
- (golubev
- (widget-insert
- "\
- I appreciate power of XEmacs, but elementary editing operations should
- be done by single keystrokes with no modifiers. So would not use
- XEmacs until discovered viper, and now can't live without viper.
- Occasionally dislike something in there or in other free software, and
- try to get it fixed. .plan file contains classic \(perhaps reinvented
- independently\) formula:
- Hacking world for ever
- \(borrowed from \"Hacking X for Y\" in ")
- (about-url-link "http://www.jargon.org/"
- "Jargon File" "www.jargon.org")
- (widget-insert ").\n"))
- (gunnar
- (widget-insert
- "\
- Sorry, no personal information available about me yet.\n"))
- (hbs
- (widget-insert
- "\
- Sorry, no personal information available about me yet.\n"))
- (hisashi
- (widget-insert
- "\
- Sorry, no personal information available about me yet.\n"))
- (hmuller
- (widget-insert
- "\
- Sorry, no personal information available about me yet.\n"))
- (hniksic
- (widget-insert "\
- Hrvoje thinks he works in the server-side web business. In reality,
- he cranks out huge quantities of HTML, Tcl, and Java for the German
- branch of ")
- (about-url-link "http://www.arsdigita.com/"
- "ArsDigita, Inc." "www.arsdigita.com")
- ;; Avoid literal I18N characters in strings. *Displaying* a
- ;; Latin 1 character should always be safe, though, with or
- ;; without Mule.
- (let ((muenchen (format "M%cnchen" (make-char 'latin-iso8859-1 252))))
- (widget-insert (format "\
- He joined the ranks of Gastarbeiters only
- recently; he is trying to learn German and get attuned to %s
- and Bav^H^H^HGermany.\n" muenchen)))
- (widget-insert "\
- Before ArsDigita, he worked as a programmer at ")
- (about-url-link "http://www.iskon.hr/" "Iskon," "www.iskon.hr")
- (widget-insert " a fast-growing
- Croatian ISP. Even before that, he worked part-time for academic
- institutions like ")
- (about-url-link "http://www.srce.hr/" "SRCE" "www.srce.hr")
- (widget-insert " and ")
- (about-url-link "http://www.carnet.hr/" "CARNet," "www.carnet.hr")
- (widget-insert " and tried to attend university.
- He takes perverse pleasure in building and maintaining free software
- in his free time. Apart from XEmacs, his major contribution is ")
- (about-url-link 'wget "Wget," "Wget home page")
- (widget-insert "
- his very own creation, now jointly maintained by a happy crew.
- He dreams of having a home page.\n"))
- (hobley
- (widget-insert "\
- I used to do real work, but now I am a Project Manager for one of the
- Telco's in Australia. In my spare time I like to get back to basics and
- muck around with things. As a result I started the NT port. Hopefully I
- will get to finish it sometime sooner rather than later. I do vaguely
- remember University where it seems like I had more spare time that I can
- believe now. Oh well, such is life.\n"))
- (james
- (widget-insert
- "\
- Jerry James was managing a software development project as a Ph.D.
- student when two of his M.S. student helpers convinced him to switch
- from FSF Emacs to XEmacs. He thought that Gnus looked a lot cooler in
- XEmacs, and soon had a web page containing small patches to XEmacs
- 20.3, which were picked up by the Debian Linux distribution.
- He has since given up his native California, to join the faculty at the
- University of Kansas. He is learning to like the weather in Lawrence,
- Kansas, where he lives with his wife and 3 children. (Ed. note: I guess
- he didn't like the weather enough; he is now teaching at Utah State
- University.)
- His work on XEmacs mostly consists of extensions to the loadable module
- support in XEmacs, which was introduced by J. Kean Johnston and others.
- He has a ")
- (about-url-link 'james "home page" "Visit Jerry's home page")
- (widget-insert " (doesn't everybody?)\n"))
- (jan
- (widget-insert "\
- Jan Vroonhof has been using XEmacs since he needed to write .tex files
- for his work as a physics and maths student at the Univerisity of Leiden.
- His XEmacs hacking started when XEmacs kept freezing up under a his
- window manager. He submitted a fix and has been hooked every since.
- XEmacs has followed him first to Switzerland where he did a maths
- doctorate at the ETH in Zurich, working on a conjecture by Migdal on
- the behavior of vertex corrections in Electron-Phonon theory. Finally
- sharing a house with his loved one, he now lives in Oxford (UK)
- working on the Jeode Java Virtual Machine, which like XEmacs is
- portable, implements a language, includes a non-trivial bit of
- graphics and a garbage collector, but is multithreaded to boot!
- Unfortunately his XEmacs time is directly limited by the amount of
- traffic on the M40.\n"))
- (jas
- (widget-insert "\
- Simon lives in Stockholm where he has discovered that computers
- can be a powerful procrastinating tool. Combined with a
- frustrating desire to see computers simply work, he spends most
- of his time complaining. Occasionally he rises up to the task
- and produces something that others may complain about, which
- brings him increased satisfaction with every bug report. Today
- he is pretending to be a network security guy, with a preference
- for standardization issues, while secretly longing to start a
- cafe or becoming a theoretical computer scientist. His personal
- interest is literature, and to some extent traveling, but will
- try anything for fun, such as juggling, skiing, wine, and
- long-distance biking.
- See: ")
- (about-url-link 'jas nil "Visit Simon's homepage")
- (widget-insert ".\n"))
- (jareth
- (widget-insert "\
- Jareth Hein is a mountain boy who abandoned his home state of Colorado
- for the perpetual state of chaos known as Tokyo in a failed attempt to
- become a cel-animator, and a more successful one to become a
- computer-game programmer. As he happens to be bilingual (guess which
- two?) he's been doing quite a bit of MULE hacking. He's also getting
- his hands dirty in the graphics areas as well.\n"))
- (jason
- (widget-insert "\
- Jason resides in Northern New Mexico where he works as a Systems
- Scientist(tm) in the Los Alamos National Laboratory's Advanced
- Computing Group.
- See: ")
- (about-url-link 'jason nil "Visit Jason's homepage")
- (widget-insert ".\n"))
- (jens
- (widget-insert "\
- I'm currently working for 1&1 Internet AG, a large Domain and Webspace
- Provider in Germany and Europe. I do mostly Java/XML/OO/Component
- stuff today. I'm interested EJB, Corba and other middleware or
- distributed Systems. Besides work, I occasionally hack on The Gimp
- and other gtk/gnome related projects. Maybe the advent of XEmacs/Gtk
- will get me back to spend some time again hacking on XEmacs in…
Large files files are truncated, but you can click here to view the full file