156 lines
5.3 KiB
EmacsLisp
156 lines
5.3 KiB
EmacsLisp
;; This file is used for the make rule `very-slow' which adds the user
|
|
;; specific additional directories and the current source directories
|
|
;; to `load-path'.
|
|
|
|
;; Add `configure-package-path' to `load-path' for XEmacs. Those paths
|
|
;; won't appear in `load-path' when XEmacs starts with the `-vanilla'
|
|
;; option or the `-no-autoloads' option because of a bug. :<
|
|
(if (and (featurep 'xemacs)
|
|
(boundp 'configure-package-path)
|
|
(listp configure-package-path))
|
|
(let ((paths
|
|
(apply 'nconc
|
|
(mapcar
|
|
(lambda (path)
|
|
(if (and (stringp path)
|
|
(not (string-equal path ""))
|
|
(file-directory-p
|
|
(setq path (expand-file-name "lisp" path))))
|
|
(directory-files path t)))
|
|
configure-package-path)))
|
|
path adds)
|
|
(while paths
|
|
(setq path (car paths)
|
|
paths (cdr paths))
|
|
(if (and path
|
|
(not (or (string-match "/\\.\\.?\\'" path)
|
|
(member (file-name-as-directory path) load-path)
|
|
(member path load-path)))
|
|
(file-directory-p path))
|
|
(setq adds (cons (file-name-as-directory path) adds))))
|
|
(setq load-path (nconc (nreverse adds) load-path))))
|
|
|
|
(let ((addpath (prog1
|
|
(or (car command-line-args-left)
|
|
"NONE")
|
|
(setq command-line-args-left (cdr command-line-args-left))))
|
|
path paths)
|
|
(while (string-match "\\([^\0-\37:]+\\)[\0-\37:]*" addpath)
|
|
(setq path (expand-file-name (substring addpath
|
|
(match-beginning 1)
|
|
(match-end 1)))
|
|
addpath (substring addpath (match-end 0)))
|
|
(if (file-directory-p path)
|
|
(setq paths (cons path paths))))
|
|
(or (null paths)
|
|
(setq load-path (append (nreverse paths) load-path))))
|
|
(setq load-path (append (list default-directory
|
|
(expand-file-name "shimbun")) load-path))
|
|
|
|
(if (and (boundp 'emacs-major-version)
|
|
(>= emacs-major-version 21))
|
|
(defadvice load (before nomessage activate)
|
|
"Shut up `Loading...' message."
|
|
(ad-set-arg 2 t)))
|
|
|
|
;; Check whether the shell command can be used.
|
|
(let ((test (lambda (shell)
|
|
(let ((buffer (generate-new-buffer " *temp*"))
|
|
(msg "Hello World"))
|
|
(save-excursion
|
|
(set-buffer buffer)
|
|
(condition-case nil
|
|
(call-process shell nil t nil "-c"
|
|
(concat "MESSAGE=\"" msg "\"&&"
|
|
"echo \"${MESSAGE}\""))
|
|
(error))
|
|
(prog2
|
|
(goto-char (point-min))
|
|
(search-forward msg nil t)
|
|
(kill-buffer buffer)))))))
|
|
(or (funcall test shell-file-name)
|
|
(progn
|
|
(require 'executable)
|
|
(let ((executable-binary-suffixes
|
|
(if (memq system-type '(OS/2 emx))
|
|
'(".exe" ".com" ".bat" ".cmd" ".btm" "")
|
|
executable-binary-suffixes))
|
|
shell)
|
|
(or (and (setq shell (executable-find "cmdproxy"))
|
|
(funcall test shell)
|
|
(setq shell-file-name shell))
|
|
(and (setq shell (executable-find "sh"))
|
|
(funcall test shell)
|
|
(setq shell-file-name shell))
|
|
(and (setq shell (executable-find "bash"))
|
|
(funcall test shell)
|
|
(setq shell-file-name shell))
|
|
(error "%s" "\n\
|
|
There seems to be no shell command which is equivalent to /bin/sh.
|
|
Try ``make SHELL=foo [option...]'', where `foo' is the absolute
|
|
path name for the proper shell command in your system.\n"))))))
|
|
|
|
;; Load custom and bind defcustom'ed variables for Emacs 19.
|
|
(if (>= emacs-major-version 20)
|
|
nil
|
|
(require 'custom)
|
|
(put 'custom-declare-variable 'byte-hunk-handler
|
|
'byte-compile-file-form-custom-declare-variable)
|
|
(defun byte-compile-file-form-custom-declare-variable (form)
|
|
(if (memq 'free-vars byte-compile-warnings)
|
|
(setq byte-compile-bound-variables
|
|
(cons (nth 1 (nth 1 form)) byte-compile-bound-variables)))
|
|
(if (memq ':version (nthcdr 4 form))
|
|
;; Make the variable uncustomizable.
|
|
`(defvar ,(nth 1 (nth 1 form)) ,(nth 1 (nth 2 form))
|
|
,(substring (nth 3 form) (if (string-match "^[\t *]+" (nth 3 form))
|
|
(match-end 0)
|
|
0)))
|
|
;; Ignore unsupported keyword(s).
|
|
(if (memq ':set-after (nthcdr 4 form))
|
|
(let ((newform (list (car form) (nth 1 form)
|
|
(nth 2 form) (nth 3 form)))
|
|
(args (nthcdr 4 form)))
|
|
(while args
|
|
(or (eq (car args) ':set-after)
|
|
(setq newform (nconc newform (list (car args)
|
|
(car (cdr args))))))
|
|
(setq args (cdr (cdr args))))
|
|
newform)
|
|
form)))
|
|
|
|
;; Make it run quietly.
|
|
(defun locate-library (library &optional nosuffix)
|
|
"Show the full path name of Emacs library LIBRARY.
|
|
This command searches the directories in `load-path' like `M-x load-library'
|
|
to find the file that `M-x load-library RET LIBRARY RET' would load.
|
|
Optional second arg NOSUFFIX non-nil means don't add suffixes `.elc' or `.el'
|
|
to the specified name LIBRARY (a la calling `load' instead of `load-library')."
|
|
(interactive "sLocate library: ")
|
|
(catch 'answer
|
|
(mapcar
|
|
'(lambda (dir)
|
|
(mapcar
|
|
'(lambda (suf)
|
|
(let ((try (expand-file-name (concat library suf) dir)))
|
|
(and (file-readable-p try)
|
|
(null (file-directory-p try))
|
|
(progn
|
|
(or noninteractive
|
|
(message "Library is file %s" try))
|
|
(throw 'answer try)))))
|
|
(if nosuffix '("") '(".elc" ".el" ""))))
|
|
load-path)
|
|
(or noninteractive
|
|
(message "No library %s in search path" library))
|
|
nil))
|
|
|
|
(condition-case nil
|
|
(char-after)
|
|
(wrong-number-of-arguments
|
|
(put 'char-after 'byte-optimizer
|
|
(lambda (form)
|
|
(if (cdr form)
|
|
form
|
|
'(char-after (point))))))))
|