Mercurial > hg > xemacs-beta
annotate lisp/setup-paths.el @ 5285:99de5fd48e87
Tighten up Common Lisp compatibility, #'butlast, #'nbutlast, #'tailp, #'ldiff
lisp/ChangeLog addition:
2010-10-14 Aidan Kehoe <kehoea@parhasard.net>
* byte-optimize.el (side-effect-free-fns):
* cl-macs.el (remf, getf):
* cl-extra.el (tailp, cl-set-getf, cl-do-remf):
* cl.el (ldiff, endp):
Tighten up Common Lisp compatibility for #'ldiff, #'endp, #'tailp;
add circularity checking for the first two.
#'cl-set-getf and #'cl-do-remf were Lisp implementations of
#'plist-put and #'plist-remprop; change the names to aliases,
changes the macros that use them to using #'plist-put and
#'plist-remprop directly.
src/ChangeLog addition:
2010-10-14 Aidan Kehoe <kehoea@parhasard.net>
* fns.c (Fnbutlast, Fbutlast):
Tighten up Common Lisp compatibility for these two functions; they
need to operate on dotted lists without erroring.
tests/ChangeLog addition:
2010-10-14 Aidan Kehoe <kehoea@parhasard.net>
* automated/lisp-tests.el (x):
Test #'nbutlast, #'butlast with dotted lists.
Check that #'ldiff and #'tailp don't hang on circular lists; check
that #'tailp returns t with circular lists when that is
appropriate. Test them both with dotted lists.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Thu, 14 Oct 2010 18:50:38 +0100 |
parents | 54700d784be9 |
children | 308d34e9f07d |
rev | line source |
---|---|
428 | 1 ;;; setup-paths.el --- setup various XEmacs paths |
2 | |
3 ;; Copyright (C) 1985-1986, 1990, 1992-1997 Free Software Foundation, Inc. | |
4 ;; Copyright (c) 1993, 1994 Sun Microsystems, Inc. | |
5 ;; Copyright (C) 1995 Board of Trustees, University of Illinois | |
1330 | 6 ;; Copyright (C) 2003 Ben Wing. |
428 | 7 |
2456 | 8 ;; Author: Mike Sperber <mike@xemacs.orgx> |
428 | 9 ;; Maintainer: XEmacs Development Team |
10 ;; Keywords: internal, dumped | |
11 | |
12 ;; This file is part of XEmacs. | |
13 | |
14 ;; XEmacs is free software; you can redistribute it and/or modify it | |
15 ;; under the terms of the GNU General Public License as published by | |
16 ;; the Free Software Foundation; either version 2, or (at your option) | |
17 ;; any later version. | |
18 | |
19 ;; XEmacs is distributed in the hope that it will be useful, but | |
20 ;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
22 ;; General Public License for more details. | |
23 | |
24 ;; You should have received a copy of the GNU General Public License | |
25 ;; along with XEmacs; see the file COPYING. If not, write to the | |
26 ;; Free Software Foundation, 59 Temple Place - Suite 330, | |
27 ;; Boston, MA 02111-1307, USA. | |
28 | |
29 ;;; Synched up with: Not in FSF. | |
30 | |
31 ;;; Commentary: | |
32 | |
33 ;; This file is dumped with XEmacs. | |
34 | |
776 | 35 ;; This file contains functions and variables that describe and construct |
36 ;; the various paths into the XEmacs hierarchy from a global viewpoint. | |
2456 | 37 |
38 ;; This file doesn't actually set any global variable, and doesn't | |
39 ;; contain any state---it just contains the functionality for | |
40 ;; searching directories and constructing paths. | |
428 | 41 |
42 ;; It requires find-paths.el and packages.el. | |
1330 | 43 |
44 ;;; Code: | |
45 | |
46 ;(setq debug-paths t) | |
47 | |
428 | 48 |
460 | 49 (defvar paths-core-load-path-depth 0 |
428 | 50 "Depth of load-path searches in core Lisp paths.") |
51 | |
452 | 52 (defvar paths-site-load-path-depth 1 |
53 "Depth of load-path searches in site Lisp paths.") | |
54 | |
460 | 55 (defvar paths-mule-load-path-depth 0 |
56 "Depth of load-path searches in Mule Lisp paths.") | |
57 | |
3813 | 58 (defvar paths-module-load-path-depth 1 |
59 "Depth of load-path searches in module paths.") | |
60 | |
428 | 61 (defvar paths-default-info-directories |
62 (mapcar (function | |
63 (lambda (dirlist) | |
64 (paths-construct-path | |
65 dirlist (char-to-string directory-sep-char)))) | |
66 '(("usr" "local" "info") | |
67 ("usr" "info") | |
68 ("usr" "local" "share" "info") | |
69 ("usr" "share" "info"))) | |
70 "Directories appended to the end of the info path by default.") | |
71 | |
1330 | 72 |
73 ;;; Basic utility functions. | |
74 | |
75 (defun paths-emacs-root-p (directory) | |
76 "Check if DIRECTORY is a plausible installation root." | |
77 (or | |
78 ;; installed | |
79 (paths-file-readable-directory-p (paths-construct-path (list directory | |
80 "lib" | |
81 (construct-emacs-version-name)))) | |
82 ;; in-place or windows-nt. windows-nt equivalent of --srcdir is | |
83 ;; BUILD_DIR in config.inc, and has no lisp/ or etc/ since symlinks | |
84 ;; don't exist. instead, xemacs.mak points configure-lisp-directory and | |
85 ;; configure-data-directory at the right places. | |
86 (and | |
1526 | 87 (or configure-exec-directory (paths-file-readable-directory-p (paths-construct-path (list directory "lib-src"))) (eq system-type 'windows-nt)) |
1330 | 88 (or configure-lisp-directory (paths-file-readable-directory-p (paths-construct-path (list directory "lisp")))) |
89 (or configure-data-directory (paths-file-readable-directory-p (paths-construct-path (list directory "etc"))))))) | |
90 | |
91 (defun paths-emacs-data-root-p (directory) | |
92 "Check if DIRECTORY is a plausible data installation root. | |
93 A data installation root is one containing data files that may be shared | |
2456 | 94 among multiple different versions of XEmacs, the packages in particular. |
95 This serves as an additional filter to narrow down the list of plausible | |
96 installation roots." | |
1330 | 97 (or |
98 ;; installed | |
99 (paths-file-readable-directory-p (paths-construct-path (list directory | |
4154 | 100 "share" |
1330 | 101 emacs-program-name))) |
102 (paths-file-readable-directory-p (paths-construct-path (list directory | |
4154 | 103 "share" |
1330 | 104 (construct-emacs-version-name)))) |
105 ;; in-place or windows-nt | |
106 (and | |
107 (paths-file-readable-directory-p (paths-construct-path (list directory "lisp"))) | |
3281 | 108 (paths-file-readable-directory-p (paths-construct-path (list directory "etc")))) |
1330 | 109 |
3281 | 110 ;; searching for a package directory |
111 (and | |
112 (string-match "win32" system-configuration) | |
113 (paths-file-readable-directory-p (paths-construct-path (list directory | |
114 "xemacs-packages")))))) | |
115 | |
116 (defun paths-find-invocation-roots (invocation-directory invocation-name root-p) | |
117 "Find the list of run-time roots of XEmacs. | |
2456 | 118 INVOCATION-DIRECTORY is a directory containing the XEmacs executable. |
3281 | 119 INVOCATION-NAME is the name of the executable itself |
120 ROOT-P is a function that tests whether a root is plausible." | |
1330 | 121 (let* ((executable-file-name (paths-chase-symlink |
122 (concat invocation-directory | |
123 invocation-name))) | |
124 (executable-directory (file-name-directory executable-file-name)) | |
125 (maybe-root-1 (file-name-as-directory | |
126 (paths-construct-path '("..") executable-directory))) | |
127 (maybe-root-2 (file-name-as-directory | |
128 (paths-construct-path '(".." "..") executable-directory)))) | |
3281 | 129 |
4919
9c6ea1581159
Remove a couple of XEmacs-specific duplicate functions, find-paths.el
Aidan Kehoe <kehoea@parhasard.net>
parents:
4154
diff
changeset
|
130 (delete-if-not root-p (list maybe-root-1 maybe-root-2)))) |
1330 | 131 |
2456 | 132 (defun paths-find-emacs-roots (invocation-directory |
133 invocation-name | |
134 root-p) | |
1330 | 135 "Find all plausible installation roots for XEmacs. |
136 This is a list of plausible directories in which to search for the important | |
137 directories used by XEmacs at run-time, for example `exec-directory', | |
138 `data-directory' and `lisp-directory'. | |
139 ROOT-P is a function that tests whether a root is plausible." | |
3281 | 140 (let* ((invocation-roots |
141 (paths-find-invocation-roots invocation-directory | |
142 invocation-name | |
143 root-p)) | |
1330 | 144 (potential-installation-roots |
5003
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
145 (delete-duplicates |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
146 (append |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
147 (and configure-exec-prefix-directory |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
148 (list (file-name-as-directory |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
149 configure-exec-prefix-directory))) |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
150 (and configure-prefix-directory |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
151 (list (file-name-as-directory |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
152 configure-prefix-directory)))) |
5115
54700d784be9
Correct the #'delete-duplicates calls, setup-paths.el
Aidan Kehoe <kehoea@parhasard.net>
parents:
5003
diff
changeset
|
153 :test #'equal :from-end t)) |
1330 | 154 (installation-roots |
4919
9c6ea1581159
Remove a couple of XEmacs-specific duplicate functions, find-paths.el
Aidan Kehoe <kehoea@parhasard.net>
parents:
4154
diff
changeset
|
155 (remove-if-not root-p potential-installation-roots))) |
5003
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
156 (delete-duplicates (nconc invocation-roots installation-roots) |
5115
54700d784be9
Correct the #'delete-duplicates calls, setup-paths.el
Aidan Kehoe <kehoea@parhasard.net>
parents:
5003
diff
changeset
|
157 :test #'equal :from-end t))) |
1330 | 158 |
428 | 159 (defun paths-find-site-lisp-directory (roots) |
2456 | 160 "Find the site Lisp directory of the XEmacs hierarchy. |
161 ROOTS is a list of installation roots." | |
4108 | 162 (paths-find-site-directory roots (list "site-lisp") |
4092 | 163 nil nil |
428 | 164 configure-site-directory)) |
165 | |
166 (defun paths-find-site-module-directory (roots) | |
2456 | 167 "Find the site modules directory of the XEmacs hierarchy. |
168 ROOTS is a list of installation roots." | |
4108 | 169 (paths-find-site-directory roots (list "site-modules") |
4092 | 170 t nil |
428 | 171 configure-site-module-directory)) |
172 | |
173 (defun paths-find-lisp-directory (roots) | |
2456 | 174 "Find the main Lisp directory of the XEmacs hierarchy. |
175 ROOTS is a list of installation roots." | |
4108 | 176 (paths-find-version-directory roots (list "lisp") |
4092 | 177 nil nil |
428 | 178 configure-lisp-directory)) |
179 | |
460 | 180 (defun paths-find-mule-lisp-directory (roots &optional lisp-directory) |
2456 | 181 "Find the Mule Lisp directory of the XEmacs hierarchy. |
182 ROOTS is a list of installation roots." | |
460 | 183 ;; #### kludge |
184 (if lisp-directory | |
185 (let ((guess | |
186 (file-name-as-directory | |
187 (paths-construct-path (list lisp-directory "mule"))))) | |
188 (if (paths-file-readable-directory-p guess) | |
189 guess | |
4108 | 190 (paths-find-version-directory roots (list "mule-lisp") |
4092 | 191 nil nil |
460 | 192 configure-mule-lisp-directory))))) |
193 | |
428 | 194 (defun paths-find-module-directory (roots) |
2456 | 195 "Find the main modules directory of the XEmacs hierarchy. |
196 ROOTS is a list of installation roots." | |
4108 | 197 (paths-find-architecture-directory roots (list "modules") |
428 | 198 nil configure-module-directory)) |
199 | |
200 (defun paths-construct-load-path | |
201 (roots early-package-load-path late-package-load-path last-package-load-path | |
202 lisp-directory | |
460 | 203 &optional site-lisp-directory mule-lisp-directory) |
2456 | 204 "Construct the complete load path. |
205 ROOTS is the list of installation roots. | |
206 EARLY-PACKAGE-LOAD-PATH, LATE-PACKAGE-LOAD-PATH, and LAST-PACKAGE-LOAD-PATH | |
207 are the load paths for the package hierarchies. | |
208 SITE-LISP-DIRECTORY and MULE-LISP-DIRECTORY are optional directories to be | |
209 included in the load path---SITE-LISP-DIRECTORY for the obsolete site-specific | |
210 Lisp files, and MULE-LISP-DIRECTORY for the Mule Lisp files, which exist | |
211 only in Mule installations." | |
428 | 212 (let* ((envvar-value (getenv "EMACSLOADPATH")) |
213 (env-load-path | |
214 (and envvar-value | |
215 (paths-decode-directory-path envvar-value 'drop-empties))) | |
216 (site-lisp-load-path | |
217 (and site-lisp-directory | |
218 (paths-find-recursive-load-path (list site-lisp-directory) | |
452 | 219 paths-site-load-path-depth))) |
460 | 220 (mule-lisp-load-path |
221 (and mule-lisp-directory | |
222 (paths-find-recursive-load-path (list mule-lisp-directory) | |
223 paths-mule-load-path-depth))) | |
428 | 224 (lisp-load-path |
225 (and lisp-directory | |
226 (paths-find-recursive-load-path (list lisp-directory) | |
452 | 227 paths-core-load-path-depth)))) |
428 | 228 (append env-load-path |
229 early-package-load-path | |
230 site-lisp-load-path | |
231 late-package-load-path | |
460 | 232 mule-lisp-load-path |
428 | 233 lisp-load-path |
234 last-package-load-path))) | |
235 | |
236 (defun paths-construct-module-load-path | |
237 (root module-directory &optional site-module-directory) | |
238 "Construct the modules load path." | |
239 (let* ((envvar-value (getenv "EMACSMODULEPATH")) | |
240 (env-module-path | |
241 (and envvar-value | |
242 (paths-decode-directory-path envvar-value 'drop-empties))) | |
243 (site-module-load-path | |
244 (and site-module-directory | |
245 (paths-find-recursive-load-path (list site-module-directory) | |
452 | 246 paths-site-load-path-depth))) |
428 | 247 (module-load-path |
248 (and module-directory | |
249 (paths-find-recursive-load-path (list module-directory) | |
3813 | 250 paths-module-load-path-depth)))) |
2456 | 251 (append env-module-path |
428 | 252 site-module-load-path |
253 module-load-path))) | |
254 | |
2456 | 255 (defun paths-construct-info-path (roots |
256 early-package-hierarchies | |
257 late-package-hierarchies | |
258 last-package-hierarchies) | |
259 "Construct the info path. | |
260 ROOTS is the list of installation roots. | |
261 EARLY-PACKAGE-HIERARCHIES, LATE-PACKAGE-HIERARCHIES, and | |
262 LAST-PACKAGE-HIERARCHIES are lists of package hierarchy roots, | |
263 respectively." | |
428 | 264 (let ((info-path-envval (getenv "INFOPATH"))) |
5003
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
265 (delete-duplicates |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
266 (nconc |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
267 (append |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
268 (let ((info-directory |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
269 (paths-find-version-directory roots (list "info") |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
270 nil nil |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
271 configure-info-directory))) |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
272 (and info-directory |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
273 (list info-directory))) |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
274 (packages-find-package-info-path early-package-hierarchies) |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
275 (packages-find-package-info-path late-package-hierarchies) |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
276 (packages-find-package-info-path last-package-hierarchies) |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
277 (and info-path-envval |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
278 (paths-decode-directory-path info-path-envval 'drop-empties))) |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
279 (and (null info-path-envval) |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
280 (delete-duplicates |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
281 (nconc |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
282 (paths-directories-which-exist configure-info-path) |
6b6b0f8ab749
#'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4919
diff
changeset
|
283 (paths-directories-which-exist paths-default-info-directories)) |
5115
54700d784be9
Correct the #'delete-duplicates calls, setup-paths.el
Aidan Kehoe <kehoea@parhasard.net>
parents:
5003
diff
changeset
|
284 :test #'equal :from-end t))) |
54700d784be9
Correct the #'delete-duplicates calls, setup-paths.el
Aidan Kehoe <kehoea@parhasard.net>
parents:
5003
diff
changeset
|
285 :test #'equal :from-end t))) |
428 | 286 |
287 (defun paths-find-doc-directory (roots) | |
2456 | 288 "Find the documentation directory. |
289 ROOTS is the list of installation roots." | |
4108 | 290 (paths-find-architecture-directory roots (list "lib-src") nil configure-doc-directory)) |
428 | 291 |
292 (defun paths-find-exec-directory (roots) | |
2456 | 293 "Find the binary directory. |
294 ROOTS is the list of installation roots." | |
4108 | 295 (paths-find-architecture-directory roots (list "lib-src") |
428 | 296 nil configure-exec-directory)) |
297 | |
298 (defun paths-construct-exec-path (roots exec-directory | |
2456 | 299 early-package-hierarchies |
300 late-package-hierarchies | |
301 last-package-hierarchies) | |
302 "Find the binary path. | |
303 ROOTS is the list of installation roots. | |
304 EARLY-PACKAGE-HIERARCHIES, LATE-PACKAGE-HIERARCHIES, and | |
305 LAST-PACKAGE-HIERARCHIES are lists of package hierarchy roots, | |
306 respectively. | |
307 EXEC-DIRECTORY is the directory of architecture-dependent files that | |
308 come with XEmacs. | |
309 EARLY-PACKAGES, LATE-PACKAGES, and LAST-PACKAGES are lists of | |
310 package hierarchy roots, respectively." | |
428 | 311 (append |
312 (let ((path-envval (getenv "PATH"))) | |
313 (if path-envval | |
314 (paths-decode-directory-path path-envval 'drop-empties))) | |
2456 | 315 (packages-find-package-exec-path early-package-hierarchies) |
316 (packages-find-package-exec-path late-package-hierarchies) | |
428 | 317 (let ((emacspath-envval (getenv "EMACSPATH"))) |
318 (and emacspath-envval | |
319 (split-path emacspath-envval))) | |
320 (and exec-directory | |
321 (list exec-directory)) | |
2456 | 322 (packages-find-package-exec-path last-package-hierarchies))) |
428 | 323 |
324 (defun paths-find-data-directory (roots) | |
2456 | 325 "Find the data directory. |
326 ROOTS is the list of installation roots." | |
4108 | 327 (paths-find-version-directory roots (list "etc") nil "EMACSDATA" configure-data-directory)) |
428 | 328 |
329 (defun paths-construct-data-directory-list (data-directory | |
2456 | 330 early-package-hierarchies |
331 late-package-hierarchies | |
332 last-package-hierarchies) | |
333 "Construct the data path. | |
334 DATA-DIRECTORY is the data directory of the XEmacs installation. | |
335 EARLY-PACKAGE-HIERARCHIES, LATE-PACKAGE-HIERARCHIES, and | |
336 LAST-PACKAGE-HIERARCHIES are lists of package hierarchy roots, | |
337 respectively." | |
428 | 338 (append |
2456 | 339 (packages-find-package-data-path early-package-hierarchies) |
340 (packages-find-package-data-path late-package-hierarchies) | |
428 | 341 (list data-directory) |
2456 | 342 (packages-find-package-data-path last-package-hierarchies))) |
1330 | 343 |
428 | 344 ;;; setup-paths.el ends here |