From 63a686a3d18465a8c96b8cc4a273c295f8a5a379 Mon Sep 17 00:00:00 2001 From: tomo Date: Wed, 15 Jul 2009 06:58:54 +0000 Subject: [PATCH] XEmacs 21.4.22. --- ChangeLog | 9 + etc/photos/vin.png | Bin 14106 -> 34818 bytes etc/photos/vinm.png | Bin 18053 -> 14813 bytes lib-src/ChangeLog | 9 + lisp/ChangeLog | 30 ++ lisp/about.el | 10 +- lisp/auto-autoloads.el | 185 +++++++++--- lisp/autoload.el | 145 ++++++---- lisp/easy-mmode.el | 601 +++++++++++++++++++++++++++++++++++++++ lisp/printer.el | 4 +- lwlib/ChangeLog | 4 + man/ChangeLog | 4 + netinstall/ChangeLog | 4 + nt/ChangeLog | 8 + nt/config.inc.samp | 2 + nt/xemacs.mak | 13 +- src/ChangeLog | 26 ++ src/glyphs-gtk.c | 4 +- src/mule-ccl.c | 2 +- src/syswindows.h | 2 +- tests/ChangeLog | 8 + tests/automated/regexp-tests.el | 17 ++ version.sh | 4 +- 23 files changed, 985 insertions(+), 106 deletions(-) create mode 100644 lisp/easy-mmode.el diff --git a/ChangeLog b/ChangeLog index 5c790dd..9c0e2b2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2008-12-28 Vin Shelton + + * XEmacs 21.4.22 is released + +2007-11-22 Vin Shelton + + * etc/photos/vin.png: + * etc/photos/vinm.png: Updated. + 2007-10-07 Vin Shelton * XEmacs 21.4.21 is released diff --git a/etc/photos/vin.png b/etc/photos/vin.png index 3d5fb275fdfd54814a1328e38ac59ce39b0081fc..7f7c7af59d5b221676e964f57048eee2e181ba09 100644 GIT binary patch literal 34818 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 F{{igMMv4Fc diff --git a/etc/photos/vinm.png b/etc/photos/vinm.png index 94587f5e66662217b6fc95cc9c454c04f4eb0d2d..787ce0a86ffb583f784aaa711b08c8bfbd1cc1a7 100644 GIT binary patch literal 14813 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 D+y@tw literal 18053 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 Y0RuvNMdRFDaR2}S07*qoM6N<$f + + * XEmacs 21.4.22 is released + +2008-01-09 Vin Shelton + + * winclient.c: Create CONNECT_RETRIES and increase retry count + from 5 to 10. + 2007-10-07 Vin Shelton * XEmacs 21.4.21 is released diff --git a/lisp/ChangeLog b/lisp/ChangeLog index aaa3047..da37a63 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,33 @@ +2008-12-28 Vin Shelton + + * XEmacs 21.4.22 is released + +2008-12-30 Vin Shelton + + * easy-mmode.el: Added easy-mmode.el so autoload.el will work + during building even if no packages are found. + +2008-05-13 Aidan Kehoe + + * printer.el (generic-print-region): + (generic-print-buffer): + Use #'valid-device-type-p instead of #'valid-specifier-tag-p to + check if the msprinter device is available, now that msprinter is + always available as a specifier tag. + +2008-12-24 Vin Shelton + + * about.el: Add Francisco to my bio! + +2008-12-23 Vin Shelton + + * autoload.el: Move operator definitions to autoload-operators.el + in the xemacs-base package. + +2007-11-22 Vin Shelton + + * about.el (about-hacker-contribution): Updated my bio. + 2007-10-07 Vin Shelton * XEmacs 21.4.21 is released diff --git a/lisp/about.el b/lisp/about.el index ef91a55..bee1b8e 100644 --- a/lisp/about.el +++ b/lisp/about.el @@ -1391,12 +1391,12 @@ Stephen lives with his Japanese wife and children in Tsukuba, Japan, where he is a professor of economics at the University of Tsukuba.\n")) (vin (widget-insert "\ -I'm a software engineer and manager for Teradyne in Boston. I used -to play a lot of Ultimate - see ") +I'm a software engineer and manager for Adaptive Optics Associates +in Cambridge, Massachusetts. I used to play a lot of Ultimate (see\n") (about-url-link 'vin nil "Visit the Ultimate Players Association homepage") - (widget-insert " for more details. -Nowadays I'm a family man, so I spend a lot of time with my wife, -Becky, and my son, Noah.\n")) + (widget-insert " for more details), but I don't have time to +play much any more. Nowadays I'm a family man, so I spend most of +my time with my wife, Becky, and our sons, Noah and Francisco.\n")) (vladimir (widget-insert "\ Former technical lead for XEmacs at Sun. He is now writing a book on diff --git a/lisp/auto-autoloads.el b/lisp/auto-autoloads.el index 835ba1f..d780b34 100644 --- a/lisp/auto-autoloads.el +++ b/lisp/auto-autoloads.el @@ -963,25 +963,92 @@ Find packages matching a given keyword." t nil) ;;;*** -;;;### (autoloads (font-lock-set-defaults-1 font-lock-fontify-buffer turn-off-font-lock turn-on-font-lock font-lock-mode) "font-lock" "lisp/font-lock.el") - -(defcustom font-lock-auto-fontify t "*Whether font-lock should automatically fontify files as they're loaded.\nThis will only happen if font-lock has fontifying keywords for the major\nmode of the file. You can get finer-grained control over auto-fontification\nby using this variable in combination with `font-lock-mode-enable-list' or\n`font-lock-mode-disable-list'." :type 'boolean :group 'font-lock) - -(defcustom font-lock-mode-enable-list nil "*List of modes to auto-fontify, if `font-lock-auto-fontify' is nil." :type '(repeat (symbol :tag "Mode")) :group 'font-lock) - -(defcustom font-lock-mode-disable-list nil "*List of modes not to auto-fontify, if `font-lock-auto-fontify' is t." :type '(repeat (symbol :tag "Mode")) :group 'font-lock) - -(defcustom font-lock-use-colors '(color) "*Specification for when Font Lock will set up color defaults.\nNormally this should be '(color), meaning that Font Lock will set up\ncolor defaults that are only used on color displays. Set this to nil\nif you don't want Font Lock to set up color defaults at all. This\nshould be one of\n\n-- a list of valid tags, meaning that the color defaults will be used\n when all of the tags apply. (e.g. '(color x))\n-- a list whose first element is 'or and whose remaining elements are\n lists of valid tags, meaning that the defaults will be used when\n any of the tag lists apply.\n-- nil, meaning that the defaults should not be set up at all.\n\n(If you specify face values in your init file, they will override any\nthat Font Lock specifies, regardless of whether you specify the face\nvalues before or after loading Font Lock.)\n\nSee also `font-lock-use-fonts'. If you want more control over the faces\nused for fontification, see the documentation of `font-lock-mode' for\nhow to do it." :type 'sexp :group 'font-lock) - -(defcustom font-lock-use-fonts '(or (mono) (grayscale)) "*Specification for when Font Lock will set up non-color defaults.\n\nNormally this should be '(or (mono) (grayscale)), meaning that Font\nLock will set up non-color defaults that are only used on either mono\nor grayscale displays. Set this to nil if you don't want Font Lock to\nset up non-color defaults at all. This should be one of\n\n-- a list of valid tags, meaning that the non-color defaults will be used\n when all of the tags apply. (e.g. '(grayscale x))\n-- a list whose first element is 'or and whose remaining elements are\n lists of valid tags, meaning that the defaults will be used when\n any of the tag lists apply.\n-- nil, meaning that the defaults should not be set up at all.\n\n(If you specify face values in your init file, they will override any\nthat Font Lock specifies, regardless of whether you specify the face\nvalues before or after loading Font Lock.)\n\nSee also `font-lock-use-colors'. If you want more control over the faces\nused for fontification, see the documentation of `font-lock-mode' for\nhow to do it." :type 'sexp :group 'font-lock) - -(defcustom font-lock-maximum-decoration t "*If non-nil, the maximum decoration level for fontifying.\nIf nil, use the minimum decoration (equivalent to level 0).\nIf t, use the maximum decoration available.\nIf a number, use that level of decoration (or if not available the maximum).\nIf a list, each element should be a cons pair of the form (MAJOR-MODE . LEVEL),\nwhere MAJOR-MODE is a symbol or t (meaning the default). For example:\n ((c++-mode . 2) (c-mode . t) (t . 1))\nmeans use level 2 decoration for buffers in `c++-mode', the maximum decoration\navailable for buffers in `c-mode', and level 1 decoration otherwise." :type '(choice (const :tag "default" nil) (const :tag "maximum" t) (integer :tag "level" 1) (repeat :menu-tag "mode specific" :tag "mode specific" :value ((t . t)) (cons :tag "Instance" (radio :tag "Mode" (const :tag "all" t) (symbol :tag "name")) (radio :tag "Decoration" (const :tag "default" nil) (const :tag "maximum" t) (integer :tag "level" 1))))) :group 'font-lock) +;;;### (autoloads (font-lock-set-defaults-1 font-lock-fontify-buffer turn-off-font-lock turn-on-font-lock font-lock-mode font-lock-mode font-lock-fontify-string-delimiters font-lock-maximum-size font-lock-maximum-decoration font-lock-use-fonts font-lock-use-colors font-lock-mode-disable-list font-lock-mode-enable-list font-lock-auto-fontify) "font-lock" "lisp/font-lock.el") + +(defvar font-lock-auto-fontify t "\ +*Whether font-lock should automatically fontify files as they're loaded. +This will only happen if font-lock has fontifying keywords for the major +mode of the file. You can get finer-grained control over auto-fontification +by using this variable in combination with `font-lock-mode-enable-list' or +`font-lock-mode-disable-list'.") + +(defvar font-lock-mode-enable-list nil "\ +*List of modes to auto-fontify, if `font-lock-auto-fontify' is nil.") + +(defvar font-lock-mode-disable-list nil "\ +*List of modes not to auto-fontify, if `font-lock-auto-fontify' is t.") + +(defvar font-lock-use-colors '(color) "\ +*Specification for when Font Lock will set up color defaults. +Normally this should be '(color), meaning that Font Lock will set up +color defaults that are only used on color displays. Set this to nil +if you don't want Font Lock to set up color defaults at all. This +should be one of + +-- a list of valid tags, meaning that the color defaults will be used + when all of the tags apply. (e.g. '(color x)) +-- a list whose first element is 'or and whose remaining elements are + lists of valid tags, meaning that the defaults will be used when + any of the tag lists apply. +-- nil, meaning that the defaults should not be set up at all. + +\(If you specify face values in your init file, they will override any +that Font Lock specifies, regardless of whether you specify the face +values before or after loading Font Lock.) + +See also `font-lock-use-fonts'. If you want more control over the faces +used for fontification, see the documentation of `font-lock-mode' for +how to do it.") + +(defvar font-lock-use-fonts '(or (mono) (grayscale)) "\ +*Specification for when Font Lock will set up non-color defaults. + +Normally this should be '(or (mono) (grayscale)), meaning that Font +Lock will set up non-color defaults that are only used on either mono +or grayscale displays. Set this to nil if you don't want Font Lock to +set up non-color defaults at all. This should be one of + +-- a list of valid tags, meaning that the non-color defaults will be used + when all of the tags apply. (e.g. '(grayscale x)) +-- a list whose first element is 'or and whose remaining elements are + lists of valid tags, meaning that the defaults will be used when + any of the tag lists apply. +-- nil, meaning that the defaults should not be set up at all. + +\(If you specify face values in your init file, they will override any +that Font Lock specifies, regardless of whether you specify the face +values before or after loading Font Lock.) + +See also `font-lock-use-colors'. If you want more control over the faces +used for fontification, see the documentation of `font-lock-mode' for +how to do it.") + +(defvar font-lock-maximum-decoration t "\ +*If non-nil, the maximum decoration level for fontifying. +If nil, use the minimum decoration (equivalent to level 0). +If t, use the maximum decoration available. +If a number, use that level of decoration (or if not available the maximum). +If a list, each element should be a cons pair of the form (MAJOR-MODE . LEVEL), +where MAJOR-MODE is a symbol or t (meaning the default). For example: + ((c++-mode . 2) (c-mode . t) (t . 1)) +means use level 2 decoration for buffers in `c++-mode', the maximum decoration +available for buffers in `c-mode', and level 1 decoration otherwise.") (define-obsolete-variable-alias 'font-lock-use-maximal-decoration 'font-lock-maximum-decoration) -(defcustom font-lock-maximum-size (* 250 1024) "*If non-nil, the maximum size for buffers for fontifying.\nOnly buffers less than this can be fontified when Font Lock mode is turned on.\nIf nil, means size is irrelevant.\nIf a list, each element should be a cons pair of the form (MAJOR-MODE . SIZE),\nwhere MAJOR-MODE is a symbol or t (meaning the default). For example:\n ((c++-mode . 256000) (c-mode . 256000) (rmail-mode . 1048576))\nmeans that the maximum size is 250K for buffers in `c++-mode' or `c-mode', one\nmegabyte for buffers in `rmail-mode', and size is irrelevant otherwise." :type '(choice (const :tag "none" nil) (integer :tag "size") (repeat :menu-tag "mode specific" :tag "mode specific" :value ((t)) (cons :tag "Instance" (radio :tag "Mode" (const :tag "all" t) (symbol :tag "name")) (radio :tag "Size" (const :tag "none" nil) (integer :tag "size"))))) :group 'font-lock) +(defvar font-lock-maximum-size (* 250 1024) "\ +*If non-nil, the maximum size for buffers for fontifying. +Only buffers less than this can be fontified when Font Lock mode is turned on. +If nil, means size is irrelevant. +If a list, each element should be a cons pair of the form (MAJOR-MODE . SIZE), +where MAJOR-MODE is a symbol or t (meaning the default). For example: + ((c++-mode . 256000) (c-mode . 256000) (rmail-mode . 1048576)) +means that the maximum size is 250K for buffers in `c++-mode' or `c-mode', one +megabyte for buffers in `rmail-mode', and size is irrelevant otherwise.") -(defcustom font-lock-fontify-string-delimiters nil "*If non-nil, apply font-lock-string-face to string delimiters as well as\nstring text when fontifying." :type 'boolean :group 'font-lock) +(defvar font-lock-fontify-string-delimiters nil "\ +*If non-nil, apply font-lock-string-face to string delimiters as well as +string text when fontifying.") (defvar font-lock-keywords nil "\ A list defining the keywords for `font-lock-mode' to highlight. @@ -1141,7 +1208,7 @@ This is normally set via `font-lock-defaults'.") (make-variable-buffer-local 'font-lock-syntactic-keywords) -(defcustom font-lock-mode nil "Non nil means `font-lock-mode' is on" :group 'font-lock :type 'boolean :initialize 'custom-initialize-default :require 'font-lock :set (function (lambda (var val) (font-lock-mode (or val 0))))) +(progn (defvar font-lock-mode nil "Non nil means `font-lock-mode' is on") (custom-add-to-group 'font-lock 'font-lock-mode 'custom-variable) (custom-add-load 'font-lock-mode 'font-lock)) (defvar font-lock-mode-hook nil "\ Function or functions to run on entry to font-lock-mode.") @@ -1200,11 +1267,14 @@ This can take a while for large buffers." t nil) ;;;*** -;;;### (autoloads (font-menu-weight-constructor font-menu-size-constructor font-menu-family-constructor reset-device-font-menus) "font-menu" "lisp/font-menu.el") +;;;### (autoloads (font-menu-weight-constructor font-menu-size-constructor font-menu-family-constructor reset-device-font-menus font-menu-this-frame-only-p font-menu-ignore-scaled-fonts) "font-menu" "lisp/font-menu.el") -(defcustom font-menu-ignore-scaled-fonts nil "*If non-nil, then the font menu will try to show only bitmap fonts." :type 'boolean :group 'font-menu) +(defvar font-menu-ignore-scaled-fonts nil "\ +*If non-nil, then the font menu will try to show only bitmap fonts.") -(defcustom font-menu-this-frame-only-p nil "*If non-nil, then changing the default font from the font menu will only\naffect one frame instead of all frames." :type 'boolean :group 'font-menu) +(defvar font-menu-this-frame-only-p nil "\ +*If non-nil, then changing the default font from the font menu will only +affect one frame instead of all frames.") (fset 'install-font-menus 'reset-device-font-menus) @@ -1245,11 +1315,18 @@ Return a font descriptor object for FONTNAME, appropriate for DEVICE." nil nil) ;;;*** -;;;### (autoloads (gnuserv-start gnuserv-running-p) "gnuserv" "lisp/gnuserv.el") +;;;### (autoloads (gnuserv-start gnuserv-running-p gnuserv-frame gnuserv-mode-line-string) "gnuserv" "lisp/gnuserv.el") -(defcustom gnuserv-mode-line-string " Server" "*String to display in the modeline when Gnuserv is active.\nSet this to nil if you don't want a modeline indicator." :type '(choice string (const :tag "none" nil)) :group 'gnuserv) +(defvar gnuserv-mode-line-string " Server" "\ +*String to display in the modeline when Gnuserv is active. +Set this to nil if you don't want a modeline indicator.") -(defcustom gnuserv-frame nil "*The frame to be used to display all edited files.\nIf nil, then a new frame is created for each file edited.\nIf t, then the currently selected frame will be used.\nIf a function, then this will be called with a symbol `x' or `tty' as the\nonly argument, and its return value will be interpreted as above." :tag "Gnuserv Frame" :type '(radio (const :tag "Create new frame each time" nil) (const :tag "Use selected frame" t) (function-item :tag "Use main Emacs frame" gnuserv-main-frame-function) (function-item :tag "Use visible frame, otherwise create new" gnuserv-visible-frame-function) (function-item :tag "Create special Gnuserv frame and use it" gnuserv-special-frame-function) (function :tag "Other")) :group 'gnuserv :group 'frames) +(defvar gnuserv-frame nil "\ +*The frame to be used to display all edited files. +If nil, then a new frame is created for each file edited. +If t, then the currently selected frame will be used. +If a function, then this will be called with a symbol `x' or `tty' as the +only argument, and its return value will be interpreted as above.") (autoload 'gnuserv-running-p "gnuserv" "\ Return non-nil if a gnuserv process is running from this XEmacs session." nil nil) @@ -1264,7 +1341,7 @@ Prefix arg means just kill any existing server communications subprocess." t nil ;;;*** -;;;### (autoloads (gtk-reset-device-font-menus) "gtk-font-menu" "lisp/gtk-font-menu.el") +;;;### (autoloads (gtk-font-menu-font-data gtk-reset-device-font-menus) "gtk-font-menu" "lisp/gtk-font-menu.el") (autoload 'gtk-reset-device-font-menus "gtk-font-menu" "\ Generates the `Font', `Size', and `Weight' submenus for the Options menu. @@ -1274,13 +1351,18 @@ If you don't like the lazy invocation of this function, you can add it to when they are selected for the first time. If you add fonts to your system, or if you change your font path, you can call this to re-initialize the menus." nil nil) -(defun* gtk-font-menu-font-data (face dcache) (defvar gtk-font-regexp) (defvar gtk-font-regexp-foundry-and-family) (let* ((case-fold-search t) (domain (if font-menu-this-frame-only-p (selected-frame) (selected-device))) (name (font-instance-name (face-font-instance face domain))) (truename (font-instance-truename (face-font-instance face domain (if (featurep 'mule) 'ascii)))) family size weight entry slant) (when (string-match gtk-font-regexp-foundry-and-family name) (setq family (capitalize (match-string 1 name))) (setq entry (vassoc family (aref dcache 0)))) (when (and (null entry) (string-match gtk-font-regexp-foundry-and-family truename)) (setq family (capitalize (match-string 1 truename))) (setq entry (vassoc family (aref dcache 0)))) (when (null entry) (return-from gtk-font-menu-font-data (make-vector 5 nil))) (when (string-match gtk-font-regexp name) (setq weight (capitalize (match-string 1 name))) (setq size (string-to-int (match-string 6 name)))) (when (string-match gtk-font-regexp truename) (when (not (member weight (aref entry 1))) (setq weight (capitalize (match-string 1 truename)))) (when (not (member size (aref entry 2))) (setq size (string-to-int (match-string 6 truename)))) (setq slant (capitalize (match-string 2 truename)))) (vector entry family size weight slant))) +(autoload 'gtk-font-menu-font-data "gtk-font-menu" nil nil nil) ;;;*** -;;;### (autoloads nil "help-macro" "lisp/help-macro.el") +;;;### (autoloads (three-step-help) "help-macro" "lisp/help-macro.el") -(defcustom three-step-help t "*Non-nil means give more info about Help command in three steps.\nThe three steps are simple prompt, prompt with all options,\nand window listing and describing the options.\nA value of nil means skip the middle step, so that\n\\[help-command] \\[help-command] gives the window that lists the options." :type 'boolean :group 'help-appearance) +(defvar three-step-help t "\ +*Non-nil means give more info about Help command in three steps. +The three steps are simple prompt, prompt with all options, +and window listing and describing the options. +A value of nil means skip the middle step, so that +\\[help-command] \\[help-command] gives the window that lists the options.") ;;;*** @@ -1426,7 +1508,7 @@ This command is designed to be used whether you are already in Info or not." t n ;;;*** -;;;### (autoloads (mswindows-reset-device-font-menus) "msw-font-menu" "lisp/msw-font-menu.el") +;;;### (autoloads (mswindows-font-menu-font-data mswindows-reset-device-font-menus) "msw-font-menu" "lisp/msw-font-menu.el") (autoload 'mswindows-reset-device-font-menus "msw-font-menu" "\ Generates the `Font', `Size', and `Weight' submenus for the Options menu. @@ -1436,7 +1518,7 @@ If you don't like the lazy invocation of this function, you can add it to when they are selected for the first time. If you add fonts to your system, or if you change your font path, you can call this to re-initialize the menus." nil nil) -(defun* mswindows-font-menu-font-data (face dcache) (let* ((case-fold-search t) (domain (if font-menu-this-frame-only-p (selected-frame) (selected-device))) (name (font-instance-name (face-font-instance face domain))) (truename (font-instance-truename (face-font-instance face domain (if (featurep 'mule) 'ascii)))) family size weight entry slant) (when (string-match mswindows-font-regexp name) (setq family (match-string 1 name)) (setq entry (vassoc family (aref dcache 0)))) (when (and (null entry) (string-match mswindows-font-regexp truename)) (setq family (match-string 1 truename)) (setq entry (vassoc family (aref dcache 0)))) (when (null entry) (return-from mswindows-font-menu-font-data (make-vector 5 nil))) (when (string-match mswindows-font-regexp name) (setq weight (match-string 2 name)) (setq size (string-to-int (or (match-string 4 name) "0")))) (when (string-match mswindows-font-regexp truename) (when (not (member weight (aref entry 1))) (setq weight (match-string 2 truename))) (when (not (member size (aref entry 2))) (setq size (string-to-int (or (match-string 4 truename) "0")))) (setq slant (match-string 5 truename))) (vector entry family size weight slant))) +(autoload 'mswindows-font-menu-font-data "msw-font-menu" nil nil nil) ;;;*** @@ -1454,7 +1536,7 @@ Install a pre-bytecompiled XEmacs package into package hierarchy." t nil) ;;;*** -;;;### (autoloads (package-get-package-provider package-get package-get-list-packages-where package-get-info package-get-dependencies package-get-all package-get-update-all package-get-delete-package package-get-save-base package-get-update-base-from-buffer package-get-update-base package-get-update-base-entry package-get-require-base) "package-get" "lisp/package-get.el") +;;;### (autoloads (package-get-package-provider package-get package-get-list-packages-where package-get-info package-get-dependencies package-get-all package-get-update-all package-get-delete-package package-get-save-base package-get-update-base-from-buffer package-get-update-base package-get-update-base-entry package-get-require-base package-get-site-release-download-sites package-get-pre-release-download-sites package-get-download-sites package-get-install-to-user-init-directory package-get-package-index-file-location) "package-get" "lisp/package-get.el") (defvar package-get-base nil "\ List of packages that are installed at this site. @@ -1502,15 +1584,38 @@ recent to least recent -- in other words, the version names don't have to be lexically ordered. It is debatable if it makes sense to have more than one version of a package available.") -(defcustom package-get-package-index-file-location (car (split-path (or (getenv "EMACSPACKAGEPATH") user-init-directory))) "*The directory where the package-index file can be found." :type 'directory :group 'package-get) - -(defcustom package-get-install-to-user-init-directory nil "*If non-nil install packages under `user-init-directory'." :type 'boolean :group 'package-get) - -(defcustom package-get-download-sites '(("US (Main XEmacs Site)" "ftp.xemacs.org" "pub/xemacs/packages") ("Argentina (xmundo.net)" "xemacs.xmundo.net" "pub/mirrors/xemacs/packages") ("Australia (aarnet.edu.au)" "mirror.aarnet.edu.au" "pub/xemacs/packages") ("Australia (au.xemacs.org)" "ftp.au.xemacs.org" "pub/xemacs/packages") ("Austria (at.xemacs.org)" "ftp.at.xemacs.org" "editors/xemacs/packages") ("Belgium (be.xemacs.org)" "ftp.be.xemacs.org" "xemacs/packages") ("Brazil (br.xemacs.org)" "ftp.br.xemacs.org" "pub/xemacs/packages") ("Canada (ca.xemacs.org)" "ftp.ca.xemacs.org" "pub/Mirror/xemacs/packages") ("Canada (crc.ca)" "ftp.crc.ca" "pub/packages/editors/xemacs/packages") ("Canada (nrc.ca)" "ftp.nrc.ca" "pub/packages/editors/xemacs/packages") ("Czech Republic (cz.xemacs.org)" "ftp.cz.xemacs.org" "MIRRORS/ftp.xemacs.org/pub/xemacs/packages") ("Denmark (dk.xemacs.org)" "ftp.dk.xemacs.org" "xemacs/packages") ("Finland (fi.xemacs.org)" "ftp.fi.xemacs.org" "pub/mirrors/ftp.xemacs.org/pub/tux/xemacs/packages") ("France (fr.xemacs.org)" "ftp.fr.xemacs.org" "pub/xemacs/packages") ("France (mirror.cict.fr)" "mirror.cict.fr" "xemacs/packages") ("France (pasteur.fr)" "ftp.pasteur.fr" "pub/computing/xemacs/packages") ("Germany (de.xemacs.org)" "ftp.de.xemacs.org" "pub/ftp.xemacs.org/tux/xemacs/packages") ("Greece (gr.xemacs.org)" "ftp.gr.xemacs.org" "mirrors/XEmacs/ftp/packages") ("Hong Kong (hk.xemacs.org)" "ftp.hk.xemacs.org" "pub/xemacsftp/packages") ("Ireland (ie.xemacs.org)" "ftp.ie.xemacs.org" "mirrors/ftp.xemacs.org/pub/xemacs/packages") ("Ireland (heanet.ie)" "ftp.heanet.ie" "mirrors/ftp.xemacs.org/packages") ("Italy (it.xemacs.org)" "ftp.it.xemacs.org" "unix/packages/XEMACS/packages") ("Japan (dti.ad.jp)" "ftp.dti.ad.jp" "pub/unix/editor/xemacs/packages") ("Japan (jp.xemacs.org)" "ftp.jp.xemacs.org" "pub/text/xemacs/packages") ("Korea (kr.xemacs.org)" "ftp.kr.xemacs.org" "pub/tools/emacs/xemacs/packages") ("Netherlands (nl.xemacs.org)" "ftp.nl.xemacs.org" "pub/xemacs/ftp/packages") ("Norway (no.xemacs.org)" "ftp.no.xemacs.org" "pub/xemacs/packages") ("Portugal (pt.xemacs.org)" "ftp.pt.xemacs.org" "pub/MIRRORS/ftp.xemacs.org/packages") ("Russia (ru.xemacs.org)" "ftp.ru.xemacs.org" "pub/emacs/xemacs/packages") ("Saudi Arabia (sa.xemacs.org)" "ftp.sa.xemacs.org" "pub/xemacs.org/packages") ("Sweden (se.xemacs.org)" "ftp.se.xemacs.org" "pub/gnu/xemacs/packages") ("Switzerland (ch.xemacs.org)" "ftp.ch.xemacs.org" "mirror/xemacs/packages") ("Taiwan (ftp.tw.xemacs.org)" "ftp.tw.xemacs.org" "Unix/Editors/XEmacs/packages") ("UK (uk.xemacs.org)" "ftp.uk.xemacs.org" "sites/ftp.xemacs.org/pub/xemacs/packages") ("US (ibiblio.org)" "mirrors.ibiblio.org" "pub/mirrors/xemacs/packages") ("US (us.xemacs.org)" "ftp.us.xemacs.org" "pub/mirrors/xemacs/packages")) "*List of remote sites available for downloading packages.\nList format is '(site-description site-name directory-on-site).\nSITE-DESCRIPTION is a textual description of the site. SITE-NAME\nis the internet address of the download site. DIRECTORY-ON-SITE\nis the directory on the site in which packages may be found.\nThis variable is used to initialize `package-get-remote', the\nvariable actually used to specify package download sites." :tag "Package download sites" :type '(repeat (list (string :tag "Name") host-name directory)) :group 'package-get) - -(defcustom package-get-pre-release-download-sites '(("US Pre-Releases (Main XEmacs Site)" "ftp.xemacs.org" "pub/xemacs/beta/experimental/packages") ("Argentina Pre-Releases (xmundo.net)" "xemacs.xmundo.net" "pub/mirrors/xemacs/beta/experimental/packages") ("Australia Pre-Releases (aarnet.edu.au)" "mirror.aarnet.edu.au" "pub/xemacs/beta/experimental/packages") ("Australia Pre-Releases (au.xemacs.org)" "ftp.au.xemacs.org" "pub/xemacs/beta/experimental/packages") ("Austria Pre-Releases (at.xemacs.org)" "ftp.at.xemacs.org" "editors/xemacs/beta/experimental/packages") ("Belgium (be.xemacs.org)" "ftp.be.xemacs.org" "xemacs/beta/experimental/packages") ("Brazil Pre-Releases (br.xemacs.org)" "ftp.br.xemacs.org" "pub/xemacs/xemacs-21.5/experimental/packages") ("Canada Pre-Releases (ca.xemacs.org)" "ftp.ca.xemacs.org" "pub/Mirror/xemacs/beta/experimental/packages") ("Canada Pre-Releases (nrc.ca)" "ftp.nrc.ca" "pub/packages/editors/xemacs/beta/experimental/packages") ("Czech Republic Pre-Releases (cz.xemacs.org)" "ftp.cz.xemacs.org" "MIRRORS/ftp.xemacs.org/pub/xemacs/xemacs-21.5/experimental/packages") ("Denmark Pre-Releases (dk.xemacs.org)" "ftp.dk.xemacs.org" "xemacs/beta/experimental/packages") ("Finland Pre-Releases (fi.xemacs.org)" "ftp.fi.xemacs.org" "pub/mirrors/ftp.xemacs.org/pub/tux/xemacs/beta/experimental/packages") ("France Pre-Releases (fr.xemacs.org)" "ftp.fr.xemacs.org" "pub/xemacs/beta/experimental/packages") ("France Pre-Releases (mirror.cict.fr)" "mirror.cict.fr" "xemacs/beta/experimental/packages") ("France Pre-Releases (pasteur.fr)" "ftp.pasteur.fr" "pub/computing/xemacs/beta/experimental/packages") ("Germany Pre-Releases (de.xemacs.org)" "ftp.de.xemacs.org" "pub/ftp.xemacs.org/tux/xemacs/beta/experimental/packages") ("Greece Pre-Releases (gr.xemacs.org)" "ftp.gr.xemacs.org" "mirrors/XEmacs/ftp/beta/experimental/packages") ("Hong Kong Pre-Releases (hk.xemacs.org)" "ftp.hk.xemacs.org" "pub/xemacsftp/beta/experimental/packages") ("Ireland Pre-Releases (ie.xemacs.org)" "ftp.ie.xemacs.org" "mirrors/ftp.xemacs.org/pub/xemacs/beta/experimental/packages") ("Ireland Pre-Releases (heanet.ie)" "ftp.heanet.ie" "mirrors/ftp.xemacs.org/beta/experimental/packages") ("Italy Pre-Releases (it.xemacs.org)" "ftp.it.xemacs.org" "unix/packages/XEMACS/beta/experimental/packages") ("Japan Pre-Releases (dti.ad.jp)" "ftp.dti.ad.jp" "pub/unix/editor/xemacs/beta/experimental/packages") ("Japan Pre-Releases (jp.xemacs.org)" "ftp.jp.xemacs.org" "pub/text/xemacs/beta/experimental/packages") ("Korea (kr.xemacs.org)" "ftp.kr.xemacs.org" "pub/tools/emacs/xemacs/beta/experimental/packages") ("Netherlands (nl.xemacs.org)" "ftp.nl.xemacs.org" "pub/xemacs/ftp/beta/experimental/packages") ("Norway Pre-Releases (no.xemacs.org)" "ftp.no.xemacs.org" "pub/xemacs/beta/experimental/packages") ("Portugal Pre-Releases (pt.xemacs.org)" "ftp.pt.xemacs.org" "pub/MIRRORS/ftp.xemacs.org/beta/experimental/packages") ("Russia Pre-Releases (ru.xemacs.org)" "ftp.ru.xemacs.org" "pub/emacs/xemacs/beta/experimental/packages") ("Saudi Arabia (sa.xemacs.org)" "ftp.sa.xemacs.org" "pub/xemacs.org/beta/experimental/packages") ("Sweden Pre-Releases (se.xemacs.org)" "ftp.se.xemacs.org" "pub/gnu/xemacs/beta/experimental/packages") ("Switzerland Pre-Releases (ch.xemacs.org)" "ftp.ch.xemacs.org" "mirror/xemacs/beta/experimental/packages") ("Taiwan Pre-Releases (ftp.tw.xemacs.org)" "ftp.tw.xemacs.org" "Unix/Editors/XEmacs/beta/experimental/packages") ("UK Pre-Releases (uk.xemacs.org)" "ftp.uk.xemacs.org" "sites/ftp.xemacs.org/pub/xemacs/beta/experimental/packages") ("US Pre-Releases (ibiblio.org)" "mirrors.ibiblio.org" "pub/mirrors/xemacs/beta/experimental/packages") ("US Pre-Releases (us.xemacs.org)" "ftp.us.xemacs.org" "pub/mirrors/xemacs/beta/experimental/packages")) "*List of remote sites available for downloading \"Pre-Release\" packages.\nList format is '(site-description site-name directory-on-site).\nSITE-DESCRIPTION is a textual description of the site. SITE-NAME\nis the internet address of the download site. DIRECTORY-ON-SITE\nis the directory on the site in which packages may be found.\nThis variable is used to initialize `package-get-remote', the\nvariable actually used to specify package download sites." :tag "Pre-Release Package download sites" :type '(repeat (list (string :tag "Name") host-name directory)) :group 'package-get) - -(defcustom package-get-site-release-download-sites nil "*List of remote sites available for downloading \"Site Release\" packages.\nList format is '(site-description site-name directory-on-site).\nSITE-DESCRIPTION is a textual description of the site. SITE-NAME\nis the internet address of the download site. DIRECTORY-ON-SITE\nis the directory on the site in which packages may be found.\nThis variable is used to initialize `package-get-remote', the\nvariable actually used to specify package download sites." :tag "Site Release Package download sites" :type '(repeat (list (string :tag "Name") host-name directory)) :group 'package-get) +(defvar package-get-package-index-file-location (car (split-path (or (getenv "EMACSPACKAGEPATH") user-init-directory))) "\ +*The directory where the package-index file can be found.") + +(defvar package-get-install-to-user-init-directory nil "\ +*If non-nil install packages under `user-init-directory'.") + +(defvar package-get-download-sites '(("US (Main XEmacs Site)" "ftp.xemacs.org" "pub/xemacs/packages") ("Argentina (xmundo.net)" "xemacs.xmundo.net" "pub/mirrors/xemacs/packages") ("Australia (aarnet.edu.au)" "mirror.aarnet.edu.au" "pub/xemacs/packages") ("Australia (au.xemacs.org)" "ftp.au.xemacs.org" "pub/xemacs/packages") ("Austria (at.xemacs.org)" "ftp.at.xemacs.org" "editors/xemacs/packages") ("Belgium (be.xemacs.org)" "ftp.be.xemacs.org" "xemacs/packages") ("Brazil (br.xemacs.org)" "ftp.br.xemacs.org" "pub/xemacs/packages") ("Canada (ca.xemacs.org)" "ftp.ca.xemacs.org" "pub/Mirror/xemacs/packages") ("Canada (crc.ca)" "ftp.crc.ca" "pub/packages/editors/xemacs/packages") ("Canada (nrc.ca)" "ftp.nrc.ca" "pub/packages/editors/xemacs/packages") ("Czech Republic (cz.xemacs.org)" "ftp.cz.xemacs.org" "MIRRORS/ftp.xemacs.org/pub/xemacs/packages") ("Denmark (dk.xemacs.org)" "ftp.dk.xemacs.org" "xemacs/packages") ("Finland (fi.xemacs.org)" "ftp.fi.xemacs.org" "pub/mirrors/ftp.xemacs.org/pub/tux/xemacs/packages") ("France (fr.xemacs.org)" "ftp.fr.xemacs.org" "pub/xemacs/packages") ("France (mirror.cict.fr)" "mirror.cict.fr" "xemacs/packages") ("France (pasteur.fr)" "ftp.pasteur.fr" "pub/computing/xemacs/packages") ("Germany (de.xemacs.org)" "ftp.de.xemacs.org" "pub/ftp.xemacs.org/tux/xemacs/packages") ("Greece (gr.xemacs.org)" "ftp.gr.xemacs.org" "mirrors/XEmacs/ftp/packages") ("Hong Kong (hk.xemacs.org)" "ftp.hk.xemacs.org" "pub/xemacsftp/packages") ("Ireland (ie.xemacs.org)" "ftp.ie.xemacs.org" "mirrors/ftp.xemacs.org/pub/xemacs/packages") ("Ireland (heanet.ie)" "ftp.heanet.ie" "mirrors/ftp.xemacs.org/packages") ("Italy (it.xemacs.org)" "ftp.it.xemacs.org" "unix/packages/XEMACS/packages") ("Japan (dti.ad.jp)" "ftp.dti.ad.jp" "pub/unix/editor/xemacs/packages") ("Japan (jp.xemacs.org)" "ftp.jp.xemacs.org" "pub/text/xemacs/packages") ("Korea (kr.xemacs.org)" "ftp.kr.xemacs.org" "pub/tools/emacs/xemacs/packages") ("Netherlands (nl.xemacs.org)" "ftp.nl.xemacs.org" "pub/xemacs/ftp/packages") ("Norway (no.xemacs.org)" "ftp.no.xemacs.org" "pub/xemacs/packages") ("Portugal (pt.xemacs.org)" "ftp.pt.xemacs.org" "pub/MIRRORS/ftp.xemacs.org/packages") ("Russia (ru.xemacs.org)" "ftp.ru.xemacs.org" "pub/emacs/xemacs/packages") ("Saudi Arabia (sa.xemacs.org)" "ftp.sa.xemacs.org" "pub/xemacs.org/packages") ("Sweden (se.xemacs.org)" "ftp.se.xemacs.org" "pub/gnu/xemacs/packages") ("Switzerland (ch.xemacs.org)" "ftp.ch.xemacs.org" "mirror/xemacs/packages") ("Taiwan (ftp.tw.xemacs.org)" "ftp.tw.xemacs.org" "Unix/Editors/XEmacs/packages") ("UK (uk.xemacs.org)" "ftp.uk.xemacs.org" "sites/ftp.xemacs.org/pub/xemacs/packages") ("US (ibiblio.org)" "mirrors.ibiblio.org" "pub/mirrors/xemacs/packages") ("US (us.xemacs.org)" "ftp.us.xemacs.org" "pub/mirrors/xemacs/packages")) "\ +*List of remote sites available for downloading packages. +List format is '(site-description site-name directory-on-site). +SITE-DESCRIPTION is a textual description of the site. SITE-NAME +is the internet address of the download site. DIRECTORY-ON-SITE +is the directory on the site in which packages may be found. +This variable is used to initialize `package-get-remote', the +variable actually used to specify package download sites.") + +(defvar package-get-pre-release-download-sites '(("US Pre-Releases (Main XEmacs Site)" "ftp.xemacs.org" "pub/xemacs/beta/experimental/packages") ("Argentina Pre-Releases (xmundo.net)" "xemacs.xmundo.net" "pub/mirrors/xemacs/beta/experimental/packages") ("Australia Pre-Releases (aarnet.edu.au)" "mirror.aarnet.edu.au" "pub/xemacs/beta/experimental/packages") ("Australia Pre-Releases (au.xemacs.org)" "ftp.au.xemacs.org" "pub/xemacs/beta/experimental/packages") ("Austria Pre-Releases (at.xemacs.org)" "ftp.at.xemacs.org" "editors/xemacs/beta/experimental/packages") ("Belgium (be.xemacs.org)" "ftp.be.xemacs.org" "xemacs/beta/experimental/packages") ("Brazil Pre-Releases (br.xemacs.org)" "ftp.br.xemacs.org" "pub/xemacs/xemacs-21.5/experimental/packages") ("Canada Pre-Releases (ca.xemacs.org)" "ftp.ca.xemacs.org" "pub/Mirror/xemacs/beta/experimental/packages") ("Canada Pre-Releases (nrc.ca)" "ftp.nrc.ca" "pub/packages/editors/xemacs/beta/experimental/packages") ("Czech Republic Pre-Releases (cz.xemacs.org)" "ftp.cz.xemacs.org" "MIRRORS/ftp.xemacs.org/pub/xemacs/xemacs-21.5/experimental/packages") ("Denmark Pre-Releases (dk.xemacs.org)" "ftp.dk.xemacs.org" "xemacs/beta/experimental/packages") ("Finland Pre-Releases (fi.xemacs.org)" "ftp.fi.xemacs.org" "pub/mirrors/ftp.xemacs.org/pub/tux/xemacs/beta/experimental/packages") ("France Pre-Releases (fr.xemacs.org)" "ftp.fr.xemacs.org" "pub/xemacs/beta/experimental/packages") ("France Pre-Releases (mirror.cict.fr)" "mirror.cict.fr" "xemacs/beta/experimental/packages") ("France Pre-Releases (pasteur.fr)" "ftp.pasteur.fr" "pub/computing/xemacs/beta/experimental/packages") ("Germany Pre-Releases (de.xemacs.org)" "ftp.de.xemacs.org" "pub/ftp.xemacs.org/tux/xemacs/beta/experimental/packages") ("Greece Pre-Releases (gr.xemacs.org)" "ftp.gr.xemacs.org" "mirrors/XEmacs/ftp/beta/experimental/packages") ("Hong Kong Pre-Releases (hk.xemacs.org)" "ftp.hk.xemacs.org" "pub/xemacsftp/beta/experimental/packages") ("Ireland Pre-Releases (ie.xemacs.org)" "ftp.ie.xemacs.org" "mirrors/ftp.xemacs.org/pub/xemacs/beta/experimental/packages") ("Ireland Pre-Releases (heanet.ie)" "ftp.heanet.ie" "mirrors/ftp.xemacs.org/beta/experimental/packages") ("Italy Pre-Releases (it.xemacs.org)" "ftp.it.xemacs.org" "unix/packages/XEMACS/beta/experimental/packages") ("Japan Pre-Releases (dti.ad.jp)" "ftp.dti.ad.jp" "pub/unix/editor/xemacs/beta/experimental/packages") ("Japan Pre-Releases (jp.xemacs.org)" "ftp.jp.xemacs.org" "pub/text/xemacs/beta/experimental/packages") ("Korea (kr.xemacs.org)" "ftp.kr.xemacs.org" "pub/tools/emacs/xemacs/beta/experimental/packages") ("Netherlands (nl.xemacs.org)" "ftp.nl.xemacs.org" "pub/xemacs/ftp/beta/experimental/packages") ("Norway Pre-Releases (no.xemacs.org)" "ftp.no.xemacs.org" "pub/xemacs/beta/experimental/packages") ("Portugal Pre-Releases (pt.xemacs.org)" "ftp.pt.xemacs.org" "pub/MIRRORS/ftp.xemacs.org/beta/experimental/packages") ("Russia Pre-Releases (ru.xemacs.org)" "ftp.ru.xemacs.org" "pub/emacs/xemacs/beta/experimental/packages") ("Saudi Arabia (sa.xemacs.org)" "ftp.sa.xemacs.org" "pub/xemacs.org/beta/experimental/packages") ("Sweden Pre-Releases (se.xemacs.org)" "ftp.se.xemacs.org" "pub/gnu/xemacs/beta/experimental/packages") ("Switzerland Pre-Releases (ch.xemacs.org)" "ftp.ch.xemacs.org" "mirror/xemacs/beta/experimental/packages") ("Taiwan Pre-Releases (ftp.tw.xemacs.org)" "ftp.tw.xemacs.org" "Unix/Editors/XEmacs/beta/experimental/packages") ("UK Pre-Releases (uk.xemacs.org)" "ftp.uk.xemacs.org" "sites/ftp.xemacs.org/pub/xemacs/beta/experimental/packages") ("US Pre-Releases (ibiblio.org)" "mirrors.ibiblio.org" "pub/mirrors/xemacs/beta/experimental/packages") ("US Pre-Releases (us.xemacs.org)" "ftp.us.xemacs.org" "pub/mirrors/xemacs/beta/experimental/packages")) "\ +*List of remote sites available for downloading \"Pre-Release\" packages. +List format is '(site-description site-name directory-on-site). +SITE-DESCRIPTION is a textual description of the site. SITE-NAME +is the internet address of the download site. DIRECTORY-ON-SITE +is the directory on the site in which packages may be found. +This variable is used to initialize `package-get-remote', the +variable actually used to specify package download sites.") + +(defvar package-get-site-release-download-sites nil "\ +*List of remote sites available for downloading \"Site Release\" packages. +List format is '(site-description site-name directory-on-site). +SITE-DESCRIPTION is a textual description of the site. SITE-NAME +is the internet address of the download site. DIRECTORY-ON-SITE +is the directory on the site in which packages may be found. +This variable is used to initialize `package-get-remote', the +variable actually used to specify package download sites.") (autoload 'package-get-require-base "package-get" "\ Require that a package-get database has been loaded. @@ -2037,7 +2142,7 @@ Delete WIDGET." nil nil) ;;;*** -;;;### (autoloads (x-reset-device-font-menus) "x-font-menu" "lisp/x-font-menu.el") +;;;### (autoloads (x-font-menu-font-data x-reset-device-font-menus) "x-font-menu" "lisp/x-font-menu.el") (autoload 'x-reset-device-font-menus "x-font-menu" "\ Generates the `Font', `Size', and `Weight' submenus for the Options menu. @@ -2047,7 +2152,7 @@ If you don't like the lazy invocation of this function, you can add it to when they are selected for the first time. If you add fonts to your system, or if you change your font path, you can call this to re-initialize the menus." nil nil) -(defun* x-font-menu-font-data (face dcache) (defvar x-font-regexp) (defvar x-font-regexp-foundry-and-family) (let* ((case-fold-search t) (domain (if font-menu-this-frame-only-p (selected-frame) (selected-device))) (name (font-instance-name (face-font-instance face domain))) (truename (font-instance-truename (face-font-instance face domain (if (featurep 'mule) 'ascii)))) family size weight entry slant) (when (string-match x-font-regexp-foundry-and-family name) (setq family (capitalize (match-string 1 name))) (setq entry (vassoc family (aref dcache 0)))) (when (and (null entry) (string-match x-font-regexp-foundry-and-family truename)) (setq family (capitalize (match-string 1 truename))) (setq entry (vassoc family (aref dcache 0)))) (when (null entry) (return-from x-font-menu-font-data (make-vector 5 nil))) (when (string-match x-font-regexp name) (setq weight (capitalize (match-string 1 name))) (setq size (string-to-int (match-string 6 name)))) (when (string-match x-font-regexp truename) (when (not (member weight (aref entry 1))) (setq weight (capitalize (match-string 1 truename)))) (when (not (member size (aref entry 2))) (setq size (string-to-int (match-string 6 truename)))) (setq slant (capitalize (match-string 2 truename)))) (vector entry family size weight slant))) +(autoload 'x-font-menu-font-data "x-font-menu" nil nil nil) ;;;*** diff --git a/lisp/autoload.el b/lisp/autoload.el index 8ca8bbc..aa5d530 100644 --- a/lisp/autoload.el +++ b/lisp/autoload.el @@ -39,33 +39,100 @@ ;;; Code: +;; Need to load easy-mmode because we expand macro calls to easy-mmode +;; macros in make-autoloads below. +(require 'easy-mmode) + +; Add operator definitions to autoload-operators.el in the xemacs-base +; package. +(eval-when-compile (load "cl-macs")) +(ignore-errors (require 'autoload-operators)) + +; As autoload-operators is new, provide stopgap measure for a while. +(if (not (boundp 'autoload-make-autoload-operators)) + (progn + (defvar autoload-make-autoload-operators + '(defun define-skeleton defmacro define-derived-mode define-generic-mode + easy-mmode-define-minor-mode easy-mmode-define-global-mode + define-minor-mode defun* defmacro*) + "`defun'-like operators that use `autoload' to load the library.") + + (defvar autoload-make-autoload-complex-operators + '(easy-mmode-define-minor-mode easy-mmode-define-global-mode + define-minor-mode) + "`defun'-like operators to macroexpand before using `autoload'.") + + (put 'autoload 'doc-string-elt 3) + (put 'defun 'doc-string-elt 3) + (put 'defun* 'doc-string-elt 3) + (put 'defvar 'doc-string-elt 3) + (put 'defcustom 'doc-string-elt 3) + (put 'defconst 'doc-string-elt 3) + (put 'defmacro 'doc-string-elt 3) + (put 'defmacro* 'doc-string-elt 3) + (put 'defsubst 'doc-string-elt 3) + (put 'define-skeleton 'doc-string-elt 2) + (put 'define-derived-mode 'doc-string-elt 4) + (put 'easy-mmode-define-minor-mode 'doc-string-elt 2) + (put 'define-minor-mode 'doc-string-elt 2) + (put 'define-generic-mode 'doc-string-elt 7) + ;; defin-global-mode has no explicit docstring. + (put 'easy-mmode-define-global-mode 'doc-string-elt 1000))) + (defun make-autoload (form file) - "Turn a definition generator FORM into an autoload for source file FILE. -Returns nil if FORM is not a defun, define-skeleton, define-derived-mode, -or defmacro." - (let ((car (car-safe form))) - (if (memq car '(defun define-skeleton defmacro define-derived-mode)) - (let ((macrop (eq car 'defmacro)) - name doc) - (setq form (cdr form) - name (car form) - ;; Ignore the arguments. - form (cdr (cond ((eq car 'define-skeleton) - form) - ((eq car 'define-derived-mode) - (cddr form)) - (t - (cdr form)))) - doc (car form)) - (if (stringp doc) - (setq form (cdr form)) - (setq doc nil)) - (list 'autoload (list 'quote name) file doc - (or (eq car 'define-skeleton) - (eq car 'define-derived-mode) - (eq (car-safe (car form)) 'interactive)) - (if macrop (list 'quote 'macro) nil))) - nil))) + "Turn FORM into an autoload or defvar for source file FILE. +Returns nil if FORM is not a special autoload form (i.e. a function definition +or macro definition or a defcustom)." + (let ((car (car-safe form)) expand) + (cond + ;; For complex cases, try again on the macro-expansion. + ((and (memq car autoload-make-autoload-complex-operators) + (setq expand (let ((load-file-name file)) (macroexpand form))) + (eq (car expand) 'progn) + (memq :autoload-end expand)) + (let ((end (memq :autoload-end expand))) + ;; Cut-off anything after the :autoload-end marker. + (setcdr end nil) + (cons 'progn + (mapcar (lambda (form) (make-autoload form file)) + (cdr expand))))) + + ;; For special function-like operators, use the `autoload' function. + ((memq car autoload-make-autoload-operators) + (let* ((macrop (memq car '(defmacro defmacro*))) + (name (nth 1 form)) + (body (nthcdr (get car 'doc-string-elt) form)) + (doc (if (stringp (car body)) (pop body)))) + ;; `define-generic-mode' quotes the name, so take care of that + (list 'autoload (if (listp name) name (list 'quote name)) file doc + (or (and (memq car '(define-skeleton define-derived-mode + define-generic-mode + easy-mmode-define-global-mode + easy-mmode-define-minor-mode + define-minor-mode)) t) + (eq (car-safe (car body)) 'interactive)) + (if macrop (list 'quote 'macro) nil)))) + + ;; Convert defcustom to a simpler (and less space-consuming) defvar, + ;; but add some extra stuff if it uses :require. + ((eq car 'defcustom) + (let ((varname (car-safe (cdr-safe form))) + (init (car-safe (cdr-safe (cdr-safe form)))) + (doc (car-safe (cdr-safe (cdr-safe (cdr-safe form))))) + (rest (cdr-safe (cdr-safe (cdr-safe (cdr-safe form)))))) + (if (not (plist-get rest :require)) + `(defvar ,varname ,init ,doc) + `(progn + (defvar ,varname ,init ,doc) + (custom-add-to-group ,(plist-get rest :group) + ',varname 'custom-variable) + (custom-add-load ',varname + ,(plist-get rest :require)))))) + ;; Coding systems. #### Would be nice to handle the docstring here too. + ((memq car '(make-coding-system make-8-bit-coding-system)) + `(autoload-coding-system ,(nth 1 form) '(load ,file))) + ;; nil here indicates that this is not a special autoload form. + (t nil)))) (defvar generate-autoload-cookie ";;;###autoload" "Magic comment indicating the following form should be autoloaded. @@ -92,32 +159,6 @@ the section of autoloads for a file.") (defvar autoload-package-name nil) -;;; Forms which have doc-strings which should be printed specially. -;;; A doc-string-elt property of ELT says that (nth ELT FORM) is -;;; the doc-string in FORM. -;;; -;;; There used to be the following note here: -;;; ;;; Note: defconst and defvar should NOT be marked in this way. -;;; ;;; We don't want to produce defconsts and defvars that -;;; ;;; make-docfile can grok, because then it would grok them twice, -;;; ;;; once in foo.el (where they are given with ;;;###autoload) and -;;; ;;; once in loaddefs.el. -;;; -;;; Counter-note: Yes, they should be marked in this way. -;;; make-docfile only processes those files that are loaded into the -;;; dumped Emacs, and those files should never have anything -;;; autoloaded here. The above-feared problem only occurs with files -;;; which have autoloaded entries *and* are processed by make-docfile; -;;; there should be no such files. - -(put 'autoload 'doc-string-elt 3) -(put 'defun 'doc-string-elt 3) -(put 'defvar 'doc-string-elt 3) -(put 'defconst 'doc-string-elt 3) -(put 'defmacro 'doc-string-elt 3) -(put 'define-skeleton 'doc-string-elt 3) -(put 'define-derived-mode 'doc-string-elt 4) - (defun autoload-trim-file-name (file) "Returns a relative pathname of FILE including the last directory." (setq file (expand-file-name file)) diff --git a/lisp/easy-mmode.el b/lisp/easy-mmode.el new file mode 100644 index 0000000..0518cf5 --- /dev/null +++ b/lisp/easy-mmode.el @@ -0,0 +1,601 @@ +;;; easy-mmode.el --- easy definition for major and minor modes + +;; Copyright (C) 1997, 2000, 2001 Free Software Foundation, Inc. + +;; Author: Georges Brun-Cottan +;; Maintainer: Stefan Monnier + +;; Keywords: extensions lisp + +;; 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: GNU Emacs 21.3. + +;;; Commentary: + +;; Minor modes are useful and common. This package makes defining a +;; minor mode easy, by focusing on the writing of the minor mode +;; functionalities themselves. Moreover, this package enforces a +;; conventional naming of user interface primitives, making things +;; natural for the minor-mode end-users. + +;; For each mode, easy-mmode defines the following: +;; : The minor mode predicate. A buffer-local variable. +;; -map : The keymap possibly associated to . +;; -hook,-on-hook,-off-hook and -mode: +;; see `define-minor-mode' documentation +;; +;; eval +;; (pp (macroexpand '(define-minor-mode ))) +;; to check the result before using it. + +;; The order in which minor modes are installed is important. Keymap +;; lookup proceeds down minor-mode-map-alist, and the order there +;; tends to be the reverse of the order in which the modes were +;; installed. Perhaps there should be a feature to let you specify +;; orderings. + +;; Additionally to `define-minor-mode', the package provides convenient +;; ways to define keymaps, and other helper functions for major and minor +;; modes. + +;;; Code: + +(eval-when-compile (require 'cl)) + +;;; This file uses two functions that did not exist in some versions of +;;; XEmacs: propertize and replace-regexp-in-string. We provide these +;;; functions here for such XEmacsen. +;;; +;;; FIXME: These function definitions should go into the future or +;;; forward-compat package, once that package exists. + +;; XEmacs <= 21.4 does not have propertize, but XEmacs >= 21.5 dumps it (it is +;; defined in subr.el). Therefore, it is either defined regardless of what +;; has been loaded already, or it won't be defined regardless of what is +;; loaded. +(if (not (fboundp 'propertize)) + (defun propertize (string &rest properties) + "Return a copy of STRING with text properties added. +First argument is the string to copy. +Remaining arguments form a sequence of PROPERTY VALUE pairs for text +properties to add to the result." + (let ((str (copy-sequence string))) + (add-text-properties 0 (length str) + properties + str) + str))) + +;; XEmacs <= 21.4 does not have replace-regexp-in-string, but XEmacs >= 21.5 +;; dumps it (it is defined in subr.el). Therefore, it is either defined +;; regardless of what has been loaded already, or it won't be defined +;; regardless of what is loaded. +(if (not (fboundp 'replace-regexp-in-string)) + (defun replace-regexp-in-string (regexp rep string &optional + fixedcase literal subexp start) + "Replace all matches for REGEXP with REP in STRING. + +Return a new string containing the replacements. + +Optional arguments FIXEDCASE, LITERAL and SUBEXP are like the +arguments with the same names of function `replace-match'. If START +is non-nil, start replacements at that index in STRING. + +REP is either a string used as the NEWTEXT arg of `replace-match' or a +function. If it is a function it is applied to each match to generate +the replacement passed to `replace-match'; the match-data at this +point are such that match 0 is the function's argument. + +To replace only the first match (if any), make REGEXP match up to \\' +and replace a sub-expression, e.g. + (replace-regexp-in-string \"\\(foo\\).*\\'\" \"bar\" \" foo foo\" nil nil 1) + => \" bar foo\" +" + (let ((l (length string)) + (start (or start 0)) + matches str mb me) + (save-match-data + (while (and (< start l) (string-match regexp string start)) + (setq mb (match-beginning 0) + me (match-end 0)) + ;; If we matched the empty string, make sure we advance by one char + (when (= me mb) (setq me (min l (1+ mb)))) + ;; Generate a replacement for the matched substring. + ;; Operate only on the substring to minimize string consing. + ;; Set up match data for the substring for replacement; + ;; presumably this is likely to be faster than munging the + ;; match data directly in Lisp. + (string-match regexp (setq str (substring string mb me))) + (setq matches + (cons (replace-match (if (stringp rep) + rep + (funcall rep (match-string 0 str))) + fixedcase literal str subexp) + (cons (substring string start mb) ; unmatched prefix + matches))) + (setq start me)) + ;; Reconstruct a string from the pieces. + (setq matches (cons (substring string start l) matches)) ; leftover + (apply #'concat (nreverse matches)))))) + + +(defun easy-mmode-pretty-mode-name (mode &optional lighter) + "Turn the symbol MODE into a string intended for the user. +If provided LIGHTER will be used to help choose capitalization." + (let* ((case-fold-search t) + (name (concat (replace-regexp-in-string + "-Minor" " minor" + (capitalize (replace-regexp-in-string + "-mode\\'" "" (symbol-name mode)))) + " mode"))) + (if (not (stringp lighter)) name + (setq lighter + (replace-regexp-in-string "\\`\\s-+\\|\\-s+\\'" "" lighter)) + (replace-regexp-in-string lighter lighter name t t)))) + +;; XEmacs change: add -on-hook, -off-hook, and macro parameter documentation. +;;;###no-autoload +(defalias 'easy-mmode-define-minor-mode 'define-minor-mode) +;;;###no-autoload +(defmacro define-minor-mode (mode doc &optional init-value lighter keymap &rest body) + "Define a new minor mode MODE. +This function defines the associated control variable MODE, keymap MODE-map, +toggle command MODE, and hook MODE-hook. + +DOC is the documentation for the mode toggle command. +Optional INIT-VALUE is the initial value of the mode's variable. +Optional LIGHTER is displayed in the modeline when the mode is on. +Optional KEYMAP is the default (defvar) keymap bound to the mode keymap. + If it is a list, it is passed to `easy-mmode-define-keymap' + in order to build a valid keymap. It's generally better to use + a separate MODE-map variable than to use this argument. +The above three arguments can be skipped if keyword arguments are +used (see below). + +BODY contains code that will be executed each time the mode is (de)activated. + It will be executed after any toggling but before running the hooks. + Before the actual body code, you can write + keyword arguments (alternating keywords and values). + These following keyword arguments are supported: +:group GROUP Custom group name to use in all generated `defcustom' forms. +:global GLOBAL If non-nil specifies that the minor mode is not meant to be + buffer-local, so don't make the variable MODE buffer-local. + By default, the mode is buffer-local. +:init-value VAL Same as the INIT-VALUE argument. +:lighter SPEC Same as the LIGHTER argument. +:require SYM Same as in `defcustom'. + +For backwards compatibility, these hooks are run each time the mode is +\(de)activated. When the mode is toggled, MODE-hook is always run before the +other hook. +MODE-hook: run if the mode is toggled. +MODE-on-hook: run if the mode is activated. +MODE-off-hook: run if the mode is deactivated. + +\(defmacro easy-mmode-define-minor-mode + (MODE DOC &optional INIT-VALUE LIGHTER KEYMAP &rest BODY)...\) + +For example, you could write + (define-minor-mode foo-mode \"If enabled, foo on you!\" + nil \"Foo \" foo-keymap + :require 'foo :global t :group 'inconvenience + ...BODY CODE...)" + + ;; Allow skipping the first three args. + (cond + ((keywordp init-value) + (setq body (list* init-value lighter keymap body) + init-value nil lighter nil keymap nil)) + ((keywordp lighter) + (setq body (list* lighter keymap body) lighter nil keymap nil)) + ((keywordp keymap) (push keymap body) (setq keymap nil))) + + (let* ((mode-name (symbol-name mode)) + (pretty-name (easy-mmode-pretty-mode-name mode lighter)) + (globalp nil) + (group nil) + (extra-args nil) + (require t) + (keymap-sym (if (and keymap (symbolp keymap)) keymap + (intern (concat mode-name "-map")))) + (hook (intern (concat mode-name "-hook"))) + (hook-on (intern (concat mode-name "-on-hook"))) + (hook-off (intern (concat mode-name "-off-hook")))) + + ;; Check keys. + (while (keywordp (car body)) + (case (pop body) + (:init-value (setq init-value (pop body))) + (:lighter (setq lighter (pop body))) + (:global (setq globalp (pop body))) + (:extra-args (setq extra-args (pop body))) + (:group (setq group (nconc group (list :group (pop body))))) + (:require (setq require (pop body))) + (t (pop body)))) + + (unless group + ;; We might as well provide a best-guess default group. + (setq group + `(:group ',(or (custom-current-group) + (intern (replace-regexp-in-string + "-mode\\'" "" mode-name)))))) + ;; Add default properties to LIGHTER. +;; #### FSF comments this out in 21.3. +; (unless (or (not (stringp lighter)) +; (get-text-property 0 'local-map lighter) +; (get-text-property 0 'keymap lighter)) +; (setq lighter +; (propertize lighter +; 'local-map modeline-minor-mode-map ; XEmacs change +; 'help-echo "mouse-3: minor mode menu"))) + + `(progn + ;; Define the variable to enable or disable the mode. + ,(if (not globalp) + `(progn + (defvar ,mode ,init-value ,(format "Non-nil if %s is enabled. +Use the command `%s' to change this variable." pretty-name mode)) + (make-variable-buffer-local ',mode)) + + (let ((curfile (or (and (boundp 'byte-compile-current-file) + byte-compile-current-file) + load-file-name))) + `(defcustom ,mode ,init-value + ,(format "Non-nil if %s is enabled. +See the command `%s' for a description of this minor-mode. +Setting this variable directly does not take effect; +use either \\[customize] or the function `%s'." + pretty-name mode mode) + :set (lambda (symbol value) (funcall symbol (or value 0))) + :initialize 'custom-initialize-default + ,@group + :type 'boolean + ,@(cond + ((not (and curfile require)) nil) + ((not (eq require t)) `(:require ,require)) + (t `(:require + ',(intern (file-name-nondirectory + (file-name-sans-extension curfile))))))))) + + ;; The actual function. + (defun ,mode (&optional arg ,@extra-args) + ,(or doc + (format (concat "Toggle %s on or off. +Interactively, with no prefix argument, toggle the mode. +With universal prefix ARG turn mode on. +With zero or negative ARG turn mode off. +\\{%s}") pretty-name keymap-sym)) + ;; Use `toggle' rather than (if ,mode 0 1) so that using + ;; repeat-command still does the toggling correctly. + (interactive (list (or current-prefix-arg 'toggle))) + ;; XEmacs addition: save the old mode + (let ((old-mode ,mode)) + (setq ,mode + (cond + ((eq arg 'toggle) (not ,mode)) + (arg (or (listp arg);; XEmacs addition: C-u alone + (> (prefix-numeric-value arg) 0))) + (t + (if (null ,mode) t + (message + "Toggling %s off; better pass an explicit argument." + ',mode) + nil)))) + ,@body + ;; The on/off hooks are here for backward compatibility only. + ;; The on/off hooks are here for backward compatibility only. + ;; XEmacs change: check mode before running hooks + (and ,hook + (not (equal old-mode ,mode)) + (run-hooks ',hook)) + (and ,hook-on + ,mode + (run-hooks ',hook-on)) + (and ,hook-off + (not ,mode) + (run-hooks ',hook-off))) + (if (interactive-p) + (progn + ,(if globalp `(customize-mark-as-set ',mode)) + (message ,(format "%s %%sabled" pretty-name) + (if ,mode "en" "dis")))) + (force-mode-line-update) + ;; Return the new setting. + ,mode) + + ;; Autoloading an easy-mmode-define-minor-mode autoloads + ;; everything up-to-here. + ;; + ;; XEmacs change: XEmacs does not support :autoload-end. On the other + ;; hand, I don't see why we need to support it. An autoload cookie + ;; just before a (define-minor-mode foo) form will generate an autoload + ;; form for the file with name foo. But that's exactly right, since + ;; the defun created just above here has the name foo. There are no + ;; other top-level forms created above here by the macro, so we're done. + ;; + ;;:autoload-end + + ;; The toggle's hook. + (defcustom ,hook nil + ,(format "Hook run at the end of function `%s'." mode-name) + ,@group + :type 'hook) + + ;; XEmacs addition: declare the on and off hooks also + (defcustom ,hook-on nil + ,(format "Hook to run when entering %s." mode-name) + :group ,(cadr group) + :type 'hook) + + (defcustom ,hook-off nil + ,(format "Hook to run when exiting %s." mode-name) + :group ,(cadr group) + :type 'hook) + + ;; Define the minor-mode keymap. + ,(unless (symbolp keymap) ;nil is also a symbol. + `(defvar ,keymap-sym + (let ((m ,keymap)) + (cond ((keymapp m) m) + ((listp m) (easy-mmode-define-keymap m)) + (t (error "Invalid keymap %S" ,keymap)))) + ,(format "Keymap for `%s'." mode-name))) + + (add-minor-mode ',mode ',lighter + ,(if keymap keymap-sym + `(if (boundp ',keymap-sym) + (symbol-value ',keymap-sym))) + ;; XEmacs change: supply the AFTER and TOGGLE-FUN args + t ',mode) + + ;; If the mode is global, call the function according to the default. + ,(if globalp + `(if (and load-file-name (not (equal ,init-value ,mode)) + ;; XEmacs addition: + (not purify-flag)) + (eval-after-load load-file-name '(,mode (if ,mode 1 -1)))))))) + +;;; +;;; make global minor mode +;;; + +;;;###no-autoload +(defmacro easy-mmode-define-global-mode (global-mode mode turn-on + &rest keys) + "Make GLOBAL-MODE out of the buffer-local minor MODE. +TURN-ON is a function that will be called with no args in every buffer + and that should try to turn MODE on if applicable for that buffer. +KEYS is a list of CL-style keyword arguments: +:group to specify the custom group." + (let* ((global-mode-name (symbol-name global-mode)) + (pretty-name (easy-mmode-pretty-mode-name mode)) + (pretty-global-name (easy-mmode-pretty-mode-name global-mode)) + (group nil) + (extra-args nil) + (buffers (intern (concat global-mode-name "-buffers"))) + (cmmh (intern (concat global-mode-name "-cmmh")))) + + ;; Check keys. + (while (keywordp (car keys)) + (case (pop keys) + (:extra-args (setq extra-args (pop keys))) + (:group (setq group (nconc group (list :group (pop keys))))) + (t (setq keys (cdr keys))))) + + (unless group + ;; We might as well provide a best-guess default group. + (setq group + `(:group ',(or (custom-current-group) + (intern (replace-regexp-in-string + "-mode\\'" "" (symbol-name mode))))))) + + `(progn + ;; The actual global minor-mode + (define-minor-mode ,global-mode + ,(format "Toggle %s in every buffer. +With prefix ARG, turn %s on if and only if ARG is positive. +%s is actually not turned on in every buffer but only in those +in which `%s' turns it on." + pretty-name pretty-global-name pretty-name turn-on) + :global t :extra-args ,extra-args ,@group + + ;; Setup hook to handle future mode changes and new buffers. + (if ,global-mode + ;; XEmacs: find-file-hooks not find-file-hook + (progn + (add-hook 'find-file-hooks ',buffers) + (add-hook 'change-major-mode-hook ',cmmh)) + (remove-hook 'find-file-hooks ',buffers) + (remove-hook 'change-major-mode-hook ',cmmh)) + + ;; Go through existing buffers. + (dolist (buf (buffer-list)) + (with-current-buffer buf + (if ,global-mode (,turn-on) (when ,mode (,mode -1)))))) + + ;; TODO: XEmacs does not support :autoload-end + ;; Autoloading easy-mmode-define-global-mode + ;; autoloads everything up-to-here. + :autoload-end + + ;; List of buffers left to process. + (defvar ,buffers nil) + + ;; The function that calls TURN-ON in each buffer. + (defun ,buffers () + (remove-hook 'post-command-hook ',buffers) + (while ,buffers + (let ((buf (pop ,buffers))) + (when (buffer-live-p buf) + (with-current-buffer buf (,turn-on)))))) + (put ',buffers 'definition-name ',global-mode) + + ;; The function that catches kill-all-local-variables. + (defun ,cmmh () + (add-to-list ',buffers (current-buffer)) + (add-hook 'post-command-hook ',buffers)) + (put ',cmmh 'definition-name ',global-mode)))) + +;;; +;;; easy-mmode-defmap +;;; + +(if (fboundp 'set-keymap-parents) + (defalias 'easy-mmode-set-keymap-parents 'set-keymap-parents) + (defun easy-mmode-set-keymap-parents (m parents) + (set-keymap-parent + m + (cond + ((not (consp parents)) parents) + ((not (cdr parents)) (car parents)) + (t (let ((m (copy-keymap (pop parents)))) + (easy-mmode-set-keymap-parents m parents) + m)))))) + +;;;###no-autoload +(defun easy-mmode-define-keymap (bs &optional name m args) + "Return a keymap built from bindings BS. +BS must be a list of (KEY . BINDING) where +KEY and BINDINGS are suitable for `define-key'. +Optional NAME is passed to `make-sparse-keymap'. +Optional map M can be used to modify an existing map. +ARGS is a list of additional keyword arguments." + (let (inherit dense ;suppress + ) + (while args + (let ((key (pop args)) + (val (pop args))) + (case key + (:name (setq name val)) + (:dense (setq dense val)) + (:inherit (setq inherit val)) + (:group) + ;;((eq key :suppress) (setq suppress val)) + (t (message "Unknown argument %s in defmap" key))))) + (unless (keymapp m) + (setq bs (append m bs)) + (setq m (if dense (make-keymap name) (make-sparse-keymap name)))) + (dolist (b bs) + (let ((keys (car b)) + (binding (cdr b))) + (dolist (key (if (consp keys) keys (list keys))) + (cond + ((symbolp key) + (substitute-key-definition key binding m global-map)) + ((null binding) + (unless (keymapp (lookup-key m key)) (define-key m key binding))) + ((let ((o (lookup-key m key))) + (or (null o) (numberp o) (eq o 'undefined))) + (define-key m key binding)))))) + (cond + ((keymapp inherit) (set-keymap-parent m inherit)) + ((consp inherit) (easy-mmode-set-keymap-parents m inherit))) + m)) + +;;;###no-autoload +(defmacro easy-mmode-defmap (m bs doc &rest args) + `(defconst ,m + (easy-mmode-define-keymap ,bs nil (if (boundp ',m) ,m) ,(cons 'list args)) + ,doc)) + + +;;; +;;; easy-mmode-defsyntax +;;; + +(defun easy-mmode-define-syntax (css args) + (let ((st (make-syntax-table (plist-get args :copy))) + (parent (plist-get args :inherit))) + (dolist (cs css) + (let ((char (car cs)) + (syntax (cdr cs))) + (if (sequencep char) + (mapcar (lambda (c) (modify-syntax-entry c syntax st)) char) + (modify-syntax-entry char syntax st)))) + ;; XEmacs change: we do not have set-char-table-parent + (if parent (derived-mode-merge-syntax-tables + (if (symbolp parent) (symbol-value parent) parent) st)) + st)) + +;;;###no-autoload +(defmacro easy-mmode-defsyntax (st css doc &rest args) + "Define variable ST as a syntax-table. +CSS contains a list of syntax specifications of the form (CHAR . SYNTAX)." + `(progn + (autoload 'easy-mmode-define-syntax "easy-mmode") + (defconst ,st (easy-mmode-define-syntax ,css ,(cons 'list args)) ,doc))) + + + +;;; +;;; easy-mmode-define-navigation +;;; + +;; XEmacs change: autoload +;;;###no-autoload +(defmacro easy-mmode-define-navigation (base re &optional name endfun) + "Define BASE-next and BASE-prev to navigate in the buffer. +RE determines the places the commands should move point to. +NAME should describe the entities matched by RE. It is used to build + the docstrings of the two functions. +BASE-next also tries to make sure that the whole entry is visible by + searching for its end (by calling ENDFUN if provided or by looking for + the next entry) and recentering if necessary. +ENDFUN should return the end position (with or without moving point)." + (let* ((base-name (symbol-name base)) + (prev-sym (intern (concat base-name "-prev"))) + (next-sym (intern (concat base-name "-next")))) + (unless name (setq name (symbol-name base-name))) + `(progn + (add-to-list 'debug-ignored-errors + ,(concat "^No \\(previous\\|next\\) " (regexp-quote name))) + (defun ,next-sym (&optional count) + ,(format "Go to the next COUNT'th %s." name) + (interactive) + (unless count (setq count 1)) + (if (< count 0) (,prev-sym (- count)) + (if (looking-at ,re) (incf count)) + (if (not (re-search-forward ,re nil t count)) + (if (looking-at ,re) + (goto-char (or ,(if endfun `(,endfun)) (point-max))) + (error ,(format "No next %s" name))) + (goto-char (match-beginning 0)) + (when (and (eq (current-buffer) (window-buffer (selected-window))) + (interactive-p)) + (let ((endpt (or (save-excursion + ,(if endfun `(,endfun) + `(re-search-forward ,re nil t 2))) + (point-max)))) + ;; XEmacs change: versions < 21.5.16 have a + ;; pos-visible-in-window-p that takes only 2 parameters + (unless + (if (eq (function-max-args #'pos-visible-in-window-p) 2) + (pos-visible-in-window-p endpt nil) + (pos-visible-in-window-p endpt nil t)) + (recenter '(0)))))))) + (defun ,prev-sym (&optional count) + ,(format "Go to the previous COUNT'th %s" (or name base-name)) + (interactive) + (unless count (setq count 1)) + (if (< count 0) (,next-sym (- count)) + (unless (re-search-backward ,re nil t count) + (error ,(format "No previous %s" name)))))))) + +(provide 'easy-mmode) + +;;; easy-mmode.el ends here diff --git a/lisp/printer.el b/lisp/printer.el index 9f0b6d7..9b996f9 100644 --- a/lisp/printer.el +++ b/lisp/printer.el @@ -260,7 +260,7 @@ If BUFFER is nil or omitted, the current buffer is used." (let* ((print-region (and (interactive-p) (region-active-p))) (start (if print-region (region-beginning) (point-min buffer))) (end (if print-region (region-end) (point-max buffer)))) - (if (or (not (valid-specifier-tag-p 'msprinter)) + (if (or (not (valid-device-type-p 'msprinter)) (not display-print-dialog)) (generic-print-region start end buffer) (let* ((d (Printer-get-device)) @@ -309,7 +309,7 @@ Recognized properties are the same as those in `make-dialog-box': to-page Last page to print, inclusive, If omitted, printing ends at the end. copies Number of copies to print. If omitted, one copy is printed." - (cond ((valid-specifier-tag-p 'msprinter) + (cond ((valid-device-type-p 'msprinter) ;; loop, printing one copy of document per loop. kill and ;; re-create the frame each time so that we eject the piece ;; of paper at the end even if we're printing more than one diff --git a/lwlib/ChangeLog b/lwlib/ChangeLog index df27f9e..7f0de40 100644 --- a/lwlib/ChangeLog +++ b/lwlib/ChangeLog @@ -1,3 +1,7 @@ +2008-12-28 Vin Shelton + + * XEmacs 21.4.22 is released + 2007-10-07 Vin Shelton * XEmacs 21.4.21 is released diff --git a/man/ChangeLog b/man/ChangeLog index 28c171a..2ebc941 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,7 @@ +2008-12-28 Vin Shelton + + * XEmacs 21.4.22 is released + 2007-10-07 Vin Shelton * XEmacs 21.4.21 is released diff --git a/netinstall/ChangeLog b/netinstall/ChangeLog index 33afe7b..4800223 100644 --- a/netinstall/ChangeLog +++ b/netinstall/ChangeLog @@ -1,3 +1,7 @@ +2008-12-28 Vin Shelton + + * XEmacs 21.4.22 is released + 2007-10-07 Vin Shelton * XEmacs 21.4.21 is released diff --git a/nt/ChangeLog b/nt/ChangeLog index a527cd3..2a18bab 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog @@ -1,3 +1,11 @@ +2008-12-28 Vin Shelton + + * XEmacs 21.4.22 is released + +2008-01-18 Vin Shelton + + * xemacs.mak: Support Intel C compiler. + 2007-10-07 Vin Shelton * XEmacs 21.4.21 is released diff --git a/nt/config.inc.samp b/nt/config.inc.samp index 397dac7..e089c19 100644 --- a/nt/config.inc.samp +++ b/nt/config.inc.samp @@ -98,3 +98,5 @@ DEPEND=0 # routines, instead of the older "unexec" routines in unexnt.c. USE_PORTABLE_DUMPER=1 +# Set this to build XEmacs with the Intel C Compiler. +USE_INTEL_COMPILER=0 diff --git a/nt/xemacs.mak b/nt/xemacs.mak index 13a88d9..79ad838 100644 --- a/nt/xemacs.mak +++ b/nt/xemacs.mak @@ -353,6 +353,16 @@ DEPEND=0 ! endif !endif +!if $(USE_INTEL_COMPILER) +CC=icl +# Use static library if possible +INTEL_LIBS=libircmt.lib libmmt.lib +# Debugging requires DLL version of libm +!if $(DEBUG_XEMACS) +INTEL_LIBS=libircmt.lib libmmd.lib +!endif +!endif + # # Compiler command echo control. Define VERBOSECC=1 to get verbose compilation. # @@ -872,7 +882,8 @@ TEMACS_BROWSE=$(TEMACS_DIR)\temacs.bsc TEMACS_SRC=$(SRC) TEMACS_LIBS=$(LASTFILE) $(LWLIB) $(X_LIBS) $(MSW_LIBS) \ oldnames.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib \ - shell32.lib wsock32.lib winmm.lib winspool.lib ole32.lib uuid.lib $(LIBC_LIB) + shell32.lib wsock32.lib winmm.lib winspool.lib ole32.lib uuid.lib \ + $(INTEL_LIBS) $(LIBC_LIB) TEMACS_LFLAGS=-nologo $(LIBRARIES) $(DEBUG_FLAGS) -base:0x1000000\ -stack:0x800000 $(TEMACS_ENTRYPOINT) -subsystem:windows\ -pdb:$(TEMACS_DIR)\temacs.pdb -map:$(TEMACS_DIR)\temacs.map \ diff --git a/src/ChangeLog b/src/ChangeLog index d9b6740..045d040 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,29 @@ +2008-12-28 Vin Shelton + + * XEmacs 21.4.22 is released + +2008-12-27 Vin Shelton + + * syswindows.h: Don't define wide character interfaces for Cygwin + 1.7 and up. + +2008-03-05 Dominique Quatravaux + + * glyphs-gtk.c: Fixed compilation under gcc 4.x. + +2008-11-01 Stephen J. Turnbull + + * regex.c (re_search_2): Fix at_dot by changing charpos to bytepos. + From Julian Bradfield <18654.1143.304851.782755@krk.inf.ed.ac.uk>. + +2008-12-25 Vin Shelton + + * mule-ccl.c (ccl_driver): Fix off-by-one error. + By Julian Bradfield in + <18691.16568.526264.972026@krk.inf.ed.ac.uk>. + + * mule-ccl.c (ccl_driver): + 2007-10-07 Vin Shelton * XEmacs 21.4.21 is released diff --git a/src/glyphs-gtk.c b/src/glyphs-gtk.c index 83fe167..836edbc 100644 --- a/src/glyphs-gtk.c +++ b/src/glyphs-gtk.c @@ -768,7 +768,7 @@ init_image_instance_from_gdk_image (struct Lisp_Image_Instance *ii, find_keyword_in_vector (instantiator, Q_file); IMAGE_INSTANCE_GTK_PIXMAP (ii) = pixmap; - IMAGE_INSTANCE_GTK_MASK (ii) = 0; + IMAGE_INSTANCE_PIXMAP_MASK (ii) = 0; IMAGE_INSTANCE_PIXMAP_WIDTH (ii) = gdk_image->width; IMAGE_INSTANCE_PIXMAP_HEIGHT (ii) = gdk_image->height; IMAGE_INSTANCE_PIXMAP_DEPTH (ii) = gdk_image->depth; @@ -3223,7 +3223,7 @@ gtk_colorize_image_instance (Lisp_Object image_instance, IMAGE_INSTANCE_TYPE (p) = IMAGE_COLOR_PIXMAP; /* Make sure there aren't two pointers to the same mask, causing it to get freed twice. */ - IMAGE_INSTANCE_GTK_MASK (p) = 0; + IMAGE_INSTANCE_PIXMAP_MASK (p) = 0; break; default: diff --git a/src/mule-ccl.c b/src/mule-ccl.c index 866f279..de184ef 100644 --- a/src/mule-ccl.c +++ b/src/mule-ccl.c @@ -1380,7 +1380,7 @@ ccl_driver (struct ccl_program *ccl, if (XCHARSET_DIMENSION (CHARSET_BY_LEADING_BYTE (i)) == 1) i = (((i - FIELD2_TO_OFFICIAL_LEADING_BYTE) << 7) | (reg[rrr] & 0x7F)); - else if (i < MAX_LEADING_BYTE_OFFICIAL_2) + else if (i <= MAX_LEADING_BYTE_OFFICIAL_2) i = ((i - FIELD1_TO_OFFICIAL_LEADING_BYTE) << 14) | reg[rrr]; else diff --git a/src/syswindows.h b/src/syswindows.h index 14d7a6f..131c155 100644 --- a/src/syswindows.h +++ b/src/syswindows.h @@ -190,7 +190,7 @@ typedef NMHDR *LPNMHDR; #include -#ifdef CYGWIN +#if defined (CYGWIN) && (CYGWIN_VERSION_DLL_COMBINED < 190) /* All but wcscmp and wcslen left out of Cygwin headers -- but present in /usr/include/mingw32/string.h! */ diff --git a/tests/ChangeLog b/tests/ChangeLog index 380e70e..8c6b155 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,11 @@ +2008-12-28 Vin Shelton + + * XEmacs 21.4.22 is released + +2008-09-27 Stephen J. Turnbull + + * automated/regexp-tests.el: Add test for at_dot regexp. + 2007-10-07 Vin Shelton * XEmacs 21.4.21 is released diff --git a/tests/automated/regexp-tests.el b/tests/automated/regexp-tests.el index 816868f..213f8c8 100644 --- a/tests/automated/regexp-tests.el +++ b/tests/automated/regexp-tests.el @@ -449,3 +449,20 @@ baaaa (not (match-beginning 1)))) ) + +;; empty string at point +;; Thanks Julian Bradford on XEmacs Beta +;; <18652.54975.894512.880956@krk.inf.ed.ac.uk> +(with-string-as-buffer-contents "aáa" + (goto-char (point-min)) + (Assert (looking-at "\\=")) + (Assert (= (re-search-forward "\\=") 1)) + (forward-char 1) + (Assert (looking-at "\\=")) + (Assert (= (re-search-forward "\\=") 2)) + (forward-char 1) + (Assert (looking-at "\\=")) + (Assert (= (re-search-forward "\\=") 3)) + (forward-char 1) + (Assert (looking-at "\\=")) + (Assert (= (re-search-forward "\\=") 4))) diff --git a/version.sh b/version.sh index 8e1fc9a..c4a6a21 100644 --- a/version.sh +++ b/version.sh @@ -2,8 +2,8 @@ emacs_is_beta= emacs_major_version=21 emacs_minor_version=4 -emacs_beta_version=21 -xemacs_codename="Educational Television" +emacs_beta_version=22 +xemacs_codename="Instant Classic" emacs_kit_version= infodock_major_version=4 infodock_minor_version=0 -- 1.7.10.4