update.
[elisp/apel.git] / poe-18.el
index f80caec..0dffa0e 100644 (file)
--- a/poe-18.el
+++ b/poe-18.el
@@ -22,8 +22,8 @@
 
 ;; You should have received a copy of the GNU General Public License
 ;; along with this program; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Commentary:
 
@@ -50,7 +50,9 @@
 
 ;;; @ Compilation.
 ;;;
-(fset 'defalias 'fset)
+(defun defalias (sym newdef)
+  "Set SYMBOL's function definition to NEWVAL, and return NEWVAL."
+  (fset sym newdef))
 
 (defun byte-code-function-p (object)
   "Return t if OBJECT is a byte-compiled function object."
@@ -224,11 +226,11 @@ for this variable."
     ("GMT-8"  .  -800)("GMT-9"  .  -900)("GMT-10" . -1000)
     ("GMT-11" . -1100) ("GMT-12" . -1200))
   "Time differentials of timezone from GMT in +-HHMM form.
-Used in `current-time-zone' (Emacs 19 emulating function in poe-18.el).")
+Used in `current-time-zone' (Emacs 19 emulating function by APEL).")
 
 (defvar current-time-local-timezone nil 
   "*Local timezone name.
-Used in `current-time-zone' (Emacs 19 emulating function in poe-18.el).")
+Used in `current-time-zone' (Emacs 19 emulating function by APEL).")
 
 (defun set-time-zone-rule (tz)
   "Set the local time zone using TZ, a string specifying a time zone rule.
@@ -454,15 +456,6 @@ resolution finer than a second."
   "Return the absolute value of ARG."
   (if (< arg 0) (- arg) arg))
 
-(defun floor (arg &optional divisor)
-  "Return the largest integer no grater than ARG.
-With optional DIVISOR, return the largest integer no greater than ARG/DIVISOR."
-  (if (null divisor)
-      (setq divisor 1))
-  (if (< arg 0)
-      (- (/ (- divisor 1 arg) divisor))
-    (/ arg divisor)))
-
 ;;; @ Basic lisp subroutines.
 ;;;
 
@@ -510,17 +503,17 @@ With optional non-nil ALL, force redisplay of all mode-lines."
 ;; 18.55 does not have these variables.
 (defvar-maybe buffer-undo-list nil
   "List of undo entries in current buffer.
-poe-18.el provides this as dummy for a compatibility.")
+APEL provides this as dummy for a compatibility.")
 
 (defvar-maybe auto-fill-function nil
   "Function called (if non-nil) to perform auto-fill.
-poe-18.el provides this as dummy for a compatibility.")
+APEL provides this as dummy for a compatibility.")
 
 (defvar-maybe unread-command-event nil
-  "poe-18.el provides this as dummy for a compatibility.")
+  "APEL provides this as dummy for a compatibility.")
 (defvar-maybe unread-command-events nil
   "List of events to be read as the command input.
-poe-18.el provides this as dummy for a compatibility.")
+APEL provides this as dummy for a compatibility.")
 
 ;; (defvar-maybe minibuffer-setup-hook nil
 ;;   "Normal hook run just after entry to minibuffer.")
@@ -529,7 +522,7 @@ poe-18.el provides this as dummy for a compatibility.")
 
 (defvar-maybe minor-mode-map-alist nil
   "Alist of keymaps to use for minor modes.
-poe-18.el provides this as dummy for a compatibility.")
+APEL provides this as dummy for a compatibility.")
 
 (defalias 'insert-and-inherit 'insert)
 (defalias 'insert-before-markers-and-inherit 'insert-before-markers)
@@ -582,7 +575,7 @@ Third arg KEYMAP is a keymap to use whilst reading;
 If fourth arg READ is non-nil, then interpret the result as a lisp object
   and return that object:
   in other words, do `(car (read-from-string INPUT-STRING))'
-Fifth arg HIST is ignored in this implementatin."
+Fifth arg HIST is ignored in this implementation."
        (si:read-from-minibuffer prompt initial-contents keymap read))))
 
 ;; Add optional argument `frame'.
@@ -591,7 +584,7 @@ Fifth arg HIST is ignored in this implementatin."
       (fset 'si:get-buffer-window (symbol-function 'get-buffer-window))
       (defun get-buffer-window (buffer &optional frame)
        "Return a window currently displaying BUFFER, or nil if none.
-Optional argunemt FRAME is ignored in this implementation."
+Optional argument FRAME is ignored in this implementation."
        (si:get-buffer-window buffer))))
 
 (defun-maybe walk-windows (proc &optional minibuf all-frames)
@@ -602,7 +595,7 @@ Optional second arg MINIBUF t means count the minibuffer window even
 if not active.  MINIBUF nil or omitted means count the minibuffer iff
 it is active.  MINIBUF neither t nor nil means not to count the
 minibuffer even if it is active.
-Optional third argunemt ALL-FRAMES is ignored in this implementation."
+Optional third argument ALL-FRAMES is ignored in this implementation."
   (if (window-minibuffer-p (selected-window))
       (setq minibuf t))
   (let* ((walk-windows-start (selected-window))
@@ -623,7 +616,7 @@ No argument or nil as argument means do this for the current buffer."
 
 ;;; @@ Frame (Emacs 18 cannot make frame)
 ;;;
-;; The following four are frequently used for manupulating the current frame.
+;; The following four are frequently used for manipulating the current frame.
 ;; frame.el has `screen-width', `screen-height', `set-screen-width' and
 ;; `set-screen-height' for backward compatibility and declare them as obsolete.
 (defun frame-width (&optional frame)
@@ -675,10 +668,17 @@ For a directory, this means you can access files in that directory."
 
 (defun make-directory-internal (dirname)
   "Create a directory. One argument, a file name string."
- (let ((dir (expand-file-name dirname)))
-   (if (file-exists-p dir)
-       (error "Creating directory: %s is already exist" dir)
-     (call-process "mkdir" nil nil nil dir))))
+  (let ((dir (expand-file-name dirname)))
+    (if (file-exists-p dir)
+        (signal 'file-already-exists
+                (list "Creating directory: %s already exists" dir))
+      (let ((exit-status (call-process "mkdir" nil nil nil dir)))
+        (if (or (and (numberp exit-status)
+                     (not (zerop exit-status)))
+                (stringp exit-status))
+            (error "Create directory %s failed.")
+          ;; `make-directory' of v19 and later returns nil for success.
+          )))))
 
 (defun make-directory (dir &optional parents)
   "Create the directory DIR and any nonexistent parent dirs.
@@ -702,6 +702,13 @@ to create parent directories if they don't exist."
        (setq p p1)))
     (make-directory-internal dir)))
 
+(defun delete-directory (directory)
+  "Delete the directory named DIRECTORY.  Does not follow symlinks."
+  (let ((exit-status (call-process "rmdir" nil nil nil directory)))
+    (when (or (and (numberp exit-status) (not (zerop exit-status)))
+             (stringp exit-status))
+      (error "Delete directory %s failed."))))
+
 (defun parse-colon-path (cd-path)
   "Explode a colon-separated list of paths into a string list."
   (and cd-path
@@ -740,6 +747,38 @@ If MATCH is non-nil, mention only file names that match the regexp MATCH.
 If NOSORT is dummy for compatibility."
   (si:directory-files directory full match))
 
+(or (fboundp 'si:write-region)
+    (fset 'si:write-region (symbol-function 'write-region)))
+(defun write-region (start end filename &optional append visit)
+  "Write current region into specified file.
+When called from a program, requires three arguments:
+START, END and FILENAME.  START and END are normally buffer positions
+specifying the part of the buffer to write.
+If START is nil, that means to use the entire buffer contents.
+If START is a string, then output that string to the file
+instead of any buffer contents; END is ignored.
+
+Optional fourth argument APPEND if non-nil means
+  append to existing file contents (if any).  If it is an integer,
+  seek to that offset in the file before writing.
+Optional fifth argument VISIT if t means
+  set the last-save-file-modtime of buffer to this file's modtime
+  and mark buffer not modified.
+If VISIT is a string, it is a second file name;
+  the output goes to FILENAME, but the buffer is marked as visiting VISIT.
+  VISIT is also the file name to lock and unlock for clash detection.
+If VISIT is neither t nor nil nor a string,
+  that means do not display the \"Wrote file\" message."
+  (cond
+   ((null start)
+    (si:write-region (point-min) (point-max) filename append visit))
+   ((stringp start)
+    (with-temp-buffer
+      (insert start)
+      (si:write-region (point-min) (point-max) filename append visit)))
+   (t
+    (si:write-region start end filename append visit))))
+
 ;;; @ Process.
 ;;; 
 (or (fboundp 'si:accept-process-output)