X-Git-Url: http://git.chise.org/gitweb/?p=elisp%2Fgnus.git-;a=blobdiff_plain;f=lisp%2Fdgnushack.el;h=cb40ab9f315c0d293fc0542b903d5e0e4ed432f9;hp=0f4041f2a97140c5c520dd36420821e3ffa90788;hb=c5f7362aa49943397fec729fdcfca40679946ec8;hpb=4c03c5964e7e010e3af3fe99aba43ab4eb47846f diff --git a/lisp/dgnushack.el b/lisp/dgnushack.el index 0f4041f..cb40ab9 100644 --- a/lisp/dgnushack.el +++ b/lisp/dgnushack.el @@ -48,45 +48,32 @@ ;(push "/usr/share/emacs/site-lisp" load-path) +;; Define compiler macros for the functions provided by cl in old Emacsen. (unless (featurep 'xemacs) - (define-compiler-macro merge (&whole form type seq1 seq2 pred &rest keys) - (if (and (fboundp 'merge) - (subrp (symbol-function 'merge))) - form - `(let ((type ,type) - (seq1 ,seq1) - (seq2 ,seq2) - (pred ,pred)) - (or (listp seq1) (setq seq1 (append seq1 nil))) - (or (listp seq2) (setq seq2 (append seq2 nil))) - (let ((res nil)) - (while (and seq1 seq2) - (if (funcall pred (car seq2) (car seq1)) - (push (pop seq2) res) - (push (pop seq1) res))) - (let ((x (nconc (nreverse res) seq1 seq2))) - (cond ((eq type 'list) (if (listp x) x (append x nil))) - ((eq type 'vector) (if (vectorp x) x (vconcat x))) - ((eq type 'string) (if (stringp x) x (concat x))) - ((eq type 'array) (if (arrayp x) x (vconcat x))) - ((and (eq type 'character) (stringp x) (= (length x) 1)) - (aref x 0)) - ((and (eq type 'character) (symbolp x)) - (aref (symbol-name x) 0)) - ((eq type 'float) (float x)) - ((typep x type) x) - (t (error "Can't coerce %s to type %s" x type)))))))) - - (define-compiler-macro copy-list (&whole form list) - (if (and (fboundp 'copy-list) - (subrp (symbol-function 'copy-list))) + (define-compiler-macro butlast (&whole form x &optional n) + (if (>= emacs-major-version 21) form - `(let ((list ,list)) - (if (consp list) - (let ((res nil)) - (while (consp list) (push (pop list) res)) - (prog1 (nreverse res) (setcdr res list))) - (car list))))) + (if n + `(let ((x ,x) + (n ,n)) + (if (and n (<= n 0)) + x + (let ((m (length x))) + (or n (setq n 1)) + (and (< n m) + (progn + (if (> n 0) + (progn + (setq x (copy-sequence x)) + (setcdr (nthcdr (- (1- m) n) x) nil))) + x))))) + `(let* ((x ,x) + (m (length x))) + (and (< 1 m) + (progn + (setq x (copy-sequence x)) + (setcdr (nthcdr (- m 2) x) nil) + x)))))) (define-compiler-macro remove (&whole form item seq) (if (>= emacs-major-version 21) @@ -138,6 +125,55 @@ (defalias 'x-defined-colors 'ignore) (defalias 'read-color 'ignore))) +(eval-and-compile + (when (featurep 'xemacs) + (autoload 'Info-directory "info" nil t) + (autoload 'Info-menu "info" nil t) + (autoload 'annotations-at "annotations") + (autoload 'apropos "apropos" nil t) + (autoload 'apropos-command "apropos" nil t) + (autoload 'bbdb-complete-name "bbdb-com" nil t) + (autoload 'browse-url "browse-url" nil t) + (autoload 'customize-apropos "cus-edit" nil t) + (autoload 'customize-save-variable "cus-edit" nil t) + (autoload 'customize-variable "cus-edit" nil t) + (autoload 'delete-annotation "annotations") + (autoload 'dolist "cl-macs" nil nil 'macro) + (autoload 'enriched-decode "enriched") + (autoload 'info "info" nil t) + (autoload 'make-annotation "annotations") + (autoload 'make-display-table "disp-table") + (autoload 'pp "pp") + (autoload 'ps-despool "ps-print" nil t) + (autoload 'ps-spool-buffer "ps-print" nil t) + (autoload 'ps-spool-buffer-with-faces "ps-print" nil t) + (autoload 'read-passwd "passwd") + (autoload 'regexp-opt "regexp-opt") + (autoload 'reporter-submit-bug-report "reporter") + (if (emacs-version>= 21 5) + (autoload 'setenv "process" nil t) + (autoload 'setenv "env" nil t)) + (autoload 'smtpmail-send-it "smtpmail") + (autoload 'sort-numeric-fields "sort" nil t) + (autoload 'sort-subr "sort") + (autoload 'trace-function-background "trace" nil t) + (autoload 'w3-do-setup "w3") + (autoload 'w3-prepare-buffer "w3-display") + (autoload 'w3-region "w3-display" nil t) + (defalias 'frame-char-height 'frame-height) + (defalias 'frame-char-width 'frame-width) + (defalias 'frame-parameter 'frame-property) + (defalias 'make-overlay 'ignore) + (defalias 'overlay-end 'ignore) + (defalias 'overlay-get 'ignore) + (defalias 'overlay-put 'ignore) + (defalias 'overlay-start 'ignore) + (defalias 'overlays-in 'ignore) + (defalias 'replace-dehighlight 'ignore) + (defalias 'replace-highlight 'ignore) + (defalias 'run-with-idle-timer 'ignore) + (defalias 'w3-coding-system-for-mime-charset 'ignore))) + (defun dgnushack-compile (&optional warn) ;;(setq byte-compile-dynamic t) (unless warn