X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=emu-18.el;h=82611075e5f1ff9a2e3e907ff35e3cbc1f2b4065;hb=4fb468dedfa66eec17eb9ddb48ebe44dfa7913ac;hp=9d20e8dc5a41082934566ba09d2daf90691b3756;hpb=10a05263929f746884d85cc228ac03487449a06e;p=elisp%2Fapel.git diff --git a/emu-18.el b/emu-18.el index 9d20e8d..8261107 100644 --- a/emu-18.el +++ b/emu-18.el @@ -1,10 +1,50 @@ +;;; emu-18.el --- emu API implementation for Emacs 18.* + +;; Copyright (C) 1995,1996,1997 Free Software Foundation, Inc. + +;; Author: MORIOKA Tomohiko +;; Version: $Id: emu-18.el,v 7.33 1997/04/05 06:44:01 morioka Exp $ +;; Keywords: emulation, compatibility + +;; This file is part of emu. + +;; This program 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. + +;; This program 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Code: + +(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. +This function works by modifying `process-environment'." + t) + +(defvar data-directory exec-directory) + + +;;; @ for EMACS 18.55 ;;; -;;; emu-18: Emacs 19.* emulation module for Emacs 18.* -;;; -;;; $Id: emu-18.el,v 3.0 1995/08/26 18:07:06 morioka Exp $ + +(defvar buffer-undo-list nil) + + +;;; @ hook ;;; -;; This function is imported from AUC TeX. +;; These function are imported from EMACS 19.28. (defun add-hook (hook function &optional append) "Add to the value of HOOK the function FUNCTION. FUNCTION is not added if already present. @@ -15,7 +55,7 @@ FUNCTION is added at the end. HOOK should be a symbol, and FUNCTION may be any valid function. If HOOK is void, it is first set to nil. If HOOK's value is a single function, it is changed to a list of functions. -\[emu-18 Emacs 19 emulating function]" +\[emu-18.el; EMACS 19 emulating function]" (or (boundp hook) (set hook nil) ) @@ -40,19 +80,287 @@ function, it is changed to a list of functions. )) )) +(defun remove-hook (hook function) + "Remove from the value of HOOK the function FUNCTION. +HOOK should be a symbol, and FUNCTION may be any valid function. If +FUNCTION isn't the value of HOOK, or, if FUNCTION doesn't appear in the +list of hooks to run in HOOK, then nothing is done. See `add-hook'. +\[emu-18.el; EMACS 19 emulating function]" + (if (or (not (boundp hook)) ;unbound symbol, or + (null (symbol-value hook)) ;value is nil, or + (null function)) ;function is nil, then + nil ;Do nothing. + (let ((hook-value (symbol-value hook))) + (if (consp hook-value) + (setq hook-value (delete function hook-value)) + (if (equal hook-value function) + (setq hook-value nil) + )) + (set hook hook-value) + ))) + + +;;; @ list +;;; + (defun member (elt list) "Return non-nil if ELT is an element of LIST. Comparison done with EQUAL. The value is actually the tail of LIST whose car is ELT. -\[emu-18 Emacs 19 emulating function]" +\[emu-18.el; EMACS 19 emulating function]" (while (and list (not (equal elt (car list)))) (setq list (cdr list))) list) -(defun defalias (SYM NEWDEF) +(defun delete (elt list) + "Delete by side effect any occurrences of ELT as a member of LIST. +The modified LIST is returned. Comparison is done with `equal'. +If the first member of LIST is ELT, deleting it is not a side effect; +it is simply using a different list. +Therefore, write `(setq foo (delete element foo))' +to be sure of changing the value of `foo'. +\[emu-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)) + ) + (rplacd rest (cdr rrest)) + list))) + + +;;; @ function +;;; + +(defun defalias (sym newdef) "Set SYMBOL's function definition to NEWVAL, and return NEWVAL. Associates the function with the current load file, if any. -\[emu-18 Emacs 19 emulating function]" - (fset SYM (symbol-function NEWDEF)) - NEWDEF) +\[emu-18.el; EMACS 19 emulating function]" + (fset sym newdef) + ) + +(defun byte-code-function-p (exp) + "T if OBJECT is a byte-compiled function object. +\[emu-18.el; EMACS 19 emulating function]" + (and (consp exp) + (let* ((rest (cdr (cdr exp))) elt) + (if (stringp (car rest)) + (setq rest (cdr rest)) + ) + (catch 'tag + (while rest + (setq elt (car rest)) + (if (and (consp elt)(eq (car elt) 'byte-code)) + (throw 'tag t) + ) + (setq rest (cdr rest)) + )) + ))) + +(defmacro-maybe defsubst (name arglist &rest body) + "Define an inline function. The syntax is just like that of `defun'." + (cons 'defun (cons name (cons arglist body))) + ) + + +;;; @ file +;;; + +(defun make-directory-internal (dirname) + "Create a directory. One argument, a file name string. +\[emu-18.el; EMACS 19 emulating function]" + (if (file-exists-p dirname) + (error "Creating directory: %s is already exist" dirname) + (if (not (= (call-process "mkdir" nil nil nil dirname) 0)) + (error "Creating directory: no such file or directory, %s" dirname) + ))) + +(defun make-directory (dir &optional parents) + "Create the directory DIR and any nonexistent parent dirs. +The second (optional) argument PARENTS says whether +to create parent directories if they don't exist. +\[emu-18.el; EMACS 19 emulating function]" + (let ((len (length dir)) + (p 0) p1 path) + (catch 'tag + (while (and (< p len) (string-match "[^/]*/?" dir p)) + (setq p1 (match-end 0)) + (if (= p1 len) + (throw 'tag nil) + ) + (setq path (substring dir 0 p1)) + (if (not (file-directory-p path)) + (cond ((file-exists-p path) + (error "Creating directory: %s is not directory" path) + ) + ((null parents) + (error "Creating directory: %s is not exist" path) + ) + (t + (make-directory-internal path) + )) + ) + (setq p p1) + )) + (make-directory-internal dir) + )) + +;; Imported from files.el of EMACS 19.33. +(defun parse-colon-path (cd-path) + "Explode a colon-separated list of paths into a string list." + (and cd-path + (let (cd-prefix cd-list (cd-start 0) cd-colon) + (setq cd-path (concat cd-path path-separator)) + (while (setq cd-colon (string-match path-separator cd-path cd-start)) + (setq cd-list + (nconc cd-list + (list (if (= cd-start cd-colon) + nil + (substitute-in-file-name + (file-name-as-directory + (substring cd-path cd-start cd-colon))))))) + (setq cd-start (+ cd-colon 1))) + cd-list))) + +;; Imported from files.el of EMACS 19.33. +(defun file-relative-name (filename &optional directory) + "Convert FILENAME to be relative to DIRECTORY (default: default-directory)." + (setq filename (expand-file-name filename) + directory (file-name-as-directory (expand-file-name + (or directory default-directory)))) + (let ((ancestor "")) + (while (not (string-match (concat "^" (regexp-quote directory)) filename)) + (setq directory (file-name-directory (substring directory 0 -1)) + ancestor (concat "../" ancestor))) + (concat ancestor (substring filename (match-end 0))))) + +(or (fboundp 'si:directory-files) + (fset 'si:directory-files (symbol-function 'directory-files))) +(defun directory-files (directory &optional full match nosort) + "Return a list of names of files in DIRECTORY. +There are three optional arguments: +If FULL is non-nil, return absolute file names. Otherwise return names + that are relative to the specified directory. +If MATCH is non-nil, mention only file names that match the regexp MATCH. +If NOSORT is dummy for compatibility. +\[emu-18.el; EMACS 19 emulating function]" + (si:directory-files directory full match) + ) + + +;;; @ mark +;;; + +(or (fboundp 'si:mark) + (fset 'si:mark (symbol-function 'mark))) +(defun mark (&optional force) + (si:mark) + ) + + +;;; @ mode-line +;;; + +;;; Imported from Emacs 19.30. +(defun force-mode-line-update (&optional all) + "Force the mode-line of the current buffer to be redisplayed. +With optional non-nil ALL, force redisplay of all mode-lines. +\[emu-18.el; Emacs 19 emulating function]" + (if all (save-excursion (set-buffer (other-buffer)))) + (set-buffer-modified-p (buffer-modified-p))) + + +;;; @ overlay +;;; + +(defun overlay-buffer (overlay)) + + +;;; @ text property +;;; + +(defun remove-text-properties (start end properties &optional object)) + + +;;; @@ visible/invisible +;;; + +(defmacro enable-invisible () + (` + (progn + (make-local-variable 'original-selective-display) + (setq original-selective-display selective-display) + (setq selective-display t) + ))) + +(defmacro end-of-invisible () + (` (setq selective-display + (if (boundp 'original-selective-display) + original-selective-display)) + )) + +(defun invisible-region (start end) + (let ((buffer-read-only nil) ;Okay even if write protected. + (modp (buffer-modified-p))) + (if (save-excursion + (goto-char (1- end)) + (eq (following-char) ?\n) + ) + (setq end (1- end)) + ) + (unwind-protect + (subst-char-in-region start end ?\n ?\^M t) + (set-buffer-modified-p modp) + ))) + +(defun visible-region (start end) + (let ((buffer-read-only nil) ;Okay even if write protected. + (modp (buffer-modified-p))) + (unwind-protect + (subst-char-in-region start end ?\^M ?\n t) + (set-buffer-modified-p modp) + ))) + +(defun invisible-p (pos) + (save-excursion + (goto-char pos) + (eq (following-char) ?\^M) + )) + +(defun next-visible-point (pos) + (save-excursion + (goto-char pos) + (end-of-line) + (if (eq (following-char) ?\n) + (forward-char) + ) + (point) + )) + + +;;; @ mouse +;;; + +(defvar mouse-button-1 nil) +(defvar mouse-button-2 nil) +(defvar mouse-button-3 nil) + + +;;; @ string +;;; + +(defun char-list-to-string (char-list) + "Convert list of character CHAR-LIST to string. [emu-18.el]" + (mapconcat (function char-to-string) char-list "") + ) + + +;;; @ end +;;; (provide 'emu-18) + +;;; emu-18.el ends here