X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=poe-18.el;h=2ca24e66cc47e71876e4b2d10cc6a338ad1d6509;hb=93dbc292d18b23df55796d2b82d865210bcfe7fd;hp=4280be9ae17ed9d6516572c13a6a6a837739212e;hpb=2bdc4378f5cdbcf51251bdb9690e9d4109bb944b;p=elisp%2Fapel.git diff --git a/poe-18.el b/poe-18.el index 4280be9..2ca24e6 100644 --- a/poe-18.el +++ b/poe-18.el @@ -25,11 +25,12 @@ ;;; Commentary: ;; Note to developers: -;; +;; ;; If old (v18) compiler is used, top-level macros are expanded at ;; *load-time*, not compile-time. So, you cannot use macros defined -;; in this file using `defmacro-maybe'. Especially, you cannot use -;; `eval-when-compile' and `eval-and-compile' in this file. +;; in this file using `defmacro-maybe'. In addition, due to this +;; limitation, `eval-when-compile' and `eval-and-compile' provided by +;; this file do not do compile-time evaluation at all. ;;; Code: @@ -62,15 +63,16 @@ it is simply using a different list. Therefore, write `(setq foo (delete element foo))' to be sure of changing the value of `foo'. \[poe-18.el; EMACS 19 emulating function]" - (if (equal elt (car list)) - (cdr list) - (let ((rest list) - (rrest (cdr list))) - (while (and rrest (not (equal elt (car rrest)))) - (setq rest rrest - rrest (cdr rrest))) - (setcdr rest (cdr rrest)) - list))) + (if list + (if (equal elt (car list)) + (cdr list) + (let ((rest list) + (rrest (cdr list))) + (while (and rrest (not (equal elt (car rrest)))) + (setq rest rrest + rrest (cdr rrest))) + (setcdr rest (cdr rrest)) + list)))) (defun member (elt list) "Return non-nil if ELT is an element of LIST. Comparison done with EQUAL. @@ -102,7 +104,7 @@ for this variable. (autoload 'setenv "env" "Set the value of the environment variable named VARIABLE to VALUE. VARIABLE should be a string. VALUE is optional; if not provided or is -`nil', the environment variable VARIABLE will be removed. +`nil', the environment variable VARIABLE will be removed. This function works by modifying `process-environment'." t) @@ -140,7 +142,13 @@ Associates the function with the current load file, if any." ;;; macros; they are "nuked" by rms in FSF version.) (put 'inline 'lisp-indent-hook 0) -(defalias-maybe 'inline 'progn) +(defmacro inline (&rest body) + "Eval BODY forms sequentially and return value of last one. + +This emulating macro does not support function inlining because old \(v18\) +compiler does not support inlining feature. +\[poe-18.el; EMACS 19 emulating macro]" + (` (progn (,@ body)))) (put 'defsubst 'lisp-indent-hook 'defun) (put 'defsubst 'edebug-form-spec 'defun) @@ -185,24 +193,18 @@ If you think you need this, you're probably making a mistake somewhere. (defmacro-maybe eval-when-compile (&rest body) "Like progn, but evaluates the body at compile-time. -This emulating macro does not work if used at top-level. -Top-level macros are expanded at load-time. +This emulating macro does not do compile-time evaluation at all because +of the limitation of old \(v18\) compiler. \[poe-18.el; EMACS 19 emulating macro]" - (list 'quote (eval (cons 'progn body)))) + (cons 'progn body)) (put 'eval-and-compile 'lisp-indent-hook 0) (defmacro-maybe eval-and-compile (&rest body) "Like progn, but evaluates the body at compile-time as well as at load-time. -This emulating macro does not work if used at top-level. -Top-level macros are expanded at load-time. +This emulating macro does not do compile-time evaluation at all because +of the limitation of old \(v18\) compiler. \[poe-18.el; EMACS 19 emulating macro]" - ;; `form' is a parameter of `byte-compile-form'. kludge! kludge! kludge! - ;; this kludge prevents from evaluating `body' twice when this macro is - ;; expanded at load-time. - (if (and (boundp 'form) - (eq (car-safe form) 'eval-and-compile)) - (eval (cons 'progn body))) (cons 'progn body)) @@ -213,6 +215,15 @@ Top-level macros are expanded at load-time. (defun remove-text-properties (start end properties &optional object)) +(defun get-text-property (position prop &optional object)) + +(defun add-text-properties (start end properties &optional object)) + +(defun put-text-property (start end property value &optional object)) + +(defun next-property-change (position &optional object limit)) + +(defun text-properties-at (position &optional object)) ;;; @ file ;;; @@ -289,7 +300,16 @@ If NOSORT is dummy for compatibility. \[poe-18.el; EMACS 19 emulating function]" (si:directory-files directory full match)) - +(defun file-executable-p (filename) + "Return t if FILENAME can be executed by you. +For a directory, this means you can access files in that directory. +\[poe-18.el; EMACS 19 emulating function]" + (if (file-exists-p filename) + (let ((process (start-process "test" nil "test" "-x" filename))) + (while (eq 'run (process-status process))) + (zerop (process-exit-status process))))) + + ;;; @ Display Features ;;; @@ -352,7 +372,7 @@ With optional non-nil ALL, force redisplay of all mode-lines. (set-marker (nth posto attr-value) to)) (setcdr (nthcdr posfrom attr-value) (nthcdr posto attr-value))))) - + (defalias 'make-overlay 'cons) (defun overlay-put (overlay prop value)