(set-cursor-color): New function.
[elisp/apel.git] / poe-xemacs.el
1 ;;; poe-xemacs.el --- poe submodule for XEmacs -*-byte-compile-dynamic: t;-*-
2
3 ;; Copyright (C) 1995 Free Software Foundation, Inc.
4 ;; Copyright (C) 1995,1996,1997,1998 MORIOKA Tomohiko
5
6 ;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
7 ;; Keywords: emulation, compatibility, XEmacs
8
9 ;; This file is part of APEL (A Portable Emacs Library).
10
11 ;; This program is free software; you can redistribute it and/or
12 ;; modify it under the terms of the GNU General Public License as
13 ;; published by the Free Software Foundation; either version 2, or (at
14 ;; your option) any later version.
15
16 ;; This program is distributed in the hope that it will be useful, but
17 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19 ;; General Public License for more details.
20
21 ;; You should have received a copy of the GNU General Public License
22 ;; along with XEmacs; see the file COPYING.  If not, write to the Free
23 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
24 ;; 02111-1307, USA.
25
26 ;;; Code:
27
28 ;;; @ color
29 ;;;
30
31 (defun-maybe set-cursor-color (color-name)
32   "Set the text cursor color of the selected frame to COLOR.
33 When called interactively, prompt for the name of the color to use.
34 To get the frame's current cursor color, use `frame-parameters'."
35   (interactive "sColor: ")
36   (set-frame-property (selected-frame) 'cursor-color
37                       (if (color-instance-p color-name)
38                           color-name
39                         (make-color-instance color-name))))
40
41
42 ;;; @ face
43 ;;;
44
45 (defalias-maybe 'face-list 'list-faces)
46
47 (or (memq 'underline (face-list))
48     (and (fboundp 'make-face)
49          (make-face 'underline)))
50
51 (or (face-differs-from-default-p 'underline)
52     (set-face-underline-p 'underline t))
53
54
55 ;;; @ overlay
56 ;;;
57
58 (condition-case nil
59     (require 'overlay)
60   (error (defalias 'make-overlay 'make-extent)
61          (defalias 'overlay-put 'set-extent-property)
62          (defalias 'overlay-buffer 'extent-buffer)
63          (defun move-overlay (extent start end &optional buffer)
64            (set-extent-endpoints extent start end)
65            )
66          ))
67
68
69 ;;; @ dired
70 ;;;
71
72 (defun-maybe dired-other-frame (dirname &optional switches)
73   "\"Edit\" directory DIRNAME.  Like `dired' but makes a new frame."
74   (interactive (dired-read-dir-and-switches "in other frame "))
75   (switch-to-buffer-other-frame (dired-noselect dirname switches))
76   )
77
78
79 ;;; @ to avoid bug of XEmacs 19.14
80 ;;;
81
82 (or (string-match "^../"
83                   (file-relative-name "/usr/local/share" "/usr/local/lib"))
84     ;; This function was imported from Emacs 19.33.
85     (defun file-relative-name (filename &optional directory)
86       "Convert FILENAME to be relative to DIRECTORY
87 (default: default-directory). [poe-xemacs.el]"
88       (setq filename (expand-file-name filename)
89             directory (file-name-as-directory
90                        (expand-file-name
91                         (or directory default-directory))))
92       (let ((ancestor ""))
93         (while (not (string-match (concat "^" (regexp-quote directory))
94                                   filename))
95           (setq directory (file-name-directory (substring directory 0 -1))
96                 ancestor (concat "../" ancestor)))
97         (concat ancestor (substring filename (match-end 0)))))
98     )
99
100
101 ;;; @ for anything older than XEmacs 20.2
102 ;;;
103
104 ;; eval-after-load is not defined in XEmacs but after-load-alist is
105 ;; usable.  See subr.el in XEmacs.
106
107 (defun-maybe eval-after-load (file form)
108   "Arrange that, if FILE is ever loaded, FORM will be run at that time.
109 This makes or adds to an entry on `after-load-alist'.
110 If FILE is already loaded, evaluate FORM right now.
111 It does nothing if FORM is already on the list for FILE.
112 FILE should be the name of a library, with no directory name."
113   ;; Make sure there is an element for FILE.
114   (or (assoc file after-load-alist)
115       (setq after-load-alist (cons (list file) after-load-alist)))
116   ;; Add FORM to the element if it isn't there.
117   (let ((elt (assoc file after-load-alist)))
118     (or (member form (cdr elt))
119         (progn
120           (nconc elt (list form))
121           ;; If the file has been loaded already, run FORM right away.
122           (and (assoc file load-history)
123                (eval form)))))
124   form)
125
126 ;; (defun-maybe eval-after-load (file form)
127 ;;   (or (assoc file after-load-alist)
128 ;;       (setq after-load-alist (cons (list file) after-load-alist)))
129 ;;   (let ((elt (assoc file after-load-alist)))
130 ;;     (or (member form (cdr elt))
131 ;;         (nconc elt (list form))))
132 ;;   form)
133
134
135 ;;; @ Emacs 20.3 emulation
136 ;;;
137
138 (defalias-maybe 'line-beginning-position 'point-at-bol)
139
140 (defalias-maybe 'line-end-position 'point-at-eol)
141
142
143 ;;; @ end
144 ;;;
145
146 (provide 'poe-xemacs)
147
148 ;;; poe-xemacs.el ends here