annotate lisp/find-file.el @ 50780:3c9a6397c579

Update copyright and maintenance details. Update some package URLs, versions, and maintainers. Remove many references to the Emacs Lisp Archive as it is no longer being updated.
author Glenn Morris <rgm@gnu.org>
date Fri, 02 May 2003 21:59:58 +0000
parents 37645a051842
children 0a061fbe2420 d7ddb3e565de
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 ;;; find-file.el --- find a file corresponding to this one given a pattern
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
18127
6316f98dda40 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 18119
diff changeset
3 ;; Author: Henry Guillaume <henri@tibco.com, henry@c032.aone.net.au>
21057
9b9c929675eb Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 18127
diff changeset
4 ;; Maintainer: FSF
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 ;; Keywords: c, matching, tools
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6
44880
e772dea9fb2e Remove Ada-specific example code.
Gerd Moellmann <gerd@gnu.org>
parents: 42097
diff changeset
7 ;; Copyright (C) 1994, 1995, 2002 Free Software Foundation, Inc.
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13896
diff changeset
9 ;; This file is part of GNU Emacs.
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13896
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13896
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13896
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13896
diff changeset
14 ;; any later version.
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13896
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13896
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13896
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13896
diff changeset
19 ;; GNU General Public License for more details.
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13896
diff changeset
21 ;; You should have received a copy of the GNU General Public License
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13896
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13896
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13896
diff changeset
24 ;; Boston, MA 02111-1307, USA.
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;;; Commentary:
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;; PURPOSE:
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
29 ;; This package features a function called ff-find-other-file, which performs
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
30 ;; the following function:
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; When in a .c file, find the first corresponding .h file in a set
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; of directories and display it, and vice-versa from the .h file.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;; Many people maintain their include file in a directory separate to their
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;; src directory, and very often you may be editing a file and have a need to
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;; visit the "other file". This package searches through a set of directories
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;; to find that file.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;; THE "OTHER FILE", or "corresponding file", generally has the same basename,
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
41 ;; and just has a different extension as described by the ff-other-file-alist
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;; variable:
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ;; '(("\\.cc$" (".hh" ".h"))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 ;; ("\\.hh$" (".cc" ".C" ".CC" ".cxx" ".cpp")))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 ;; If the current file has a .cc extension, ff-find-other-file will attempt
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 ;; to look for a .hh file, and then a .h file in some directory as described
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 ;; below. The mechanism here is to replace the matched part of the original
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 ;; filename with each of the corresponding extensions in turn.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 ;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ;; Alternatively, there are situations where the filename of the other file
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 ;; cannot be determined easily with regexps. For example, a .c file may
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 ;; have two corresponding .h files, for its public and private parts, or
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 ;; the filename for the .c file contains part of the pathname of the .h
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 ;; file, as between src/fooZap.cc and include/FOO/zap.hh. In that case, the
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 ;; format above can be changed to include a function to be called when the
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 ;; current file matches the regexp:
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 ;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 ;; '(("\\.cc$" cc-function)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 ;; ("\\.hh$" hh-function))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 ;;
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
63 ;; These functions must return a list consisting of the possible names of the
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
64 ;; corresponding file, with or without path. There is no real need for more
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 ;; than one function, and one could imagine the following value for cc-other-
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ;; file-alist:
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;; (setq cc-other-file-alist
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;; '(("\\.cc$" ff-cc-hh-converter)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;; ("\\.hh$" ff-cc-hh-converter)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 ;; ("\\.c$" (".h"))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;; ("\\.h$" (".c" ".cc" ".C" ".CC" ".cxx" ".cpp"))))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48009
diff changeset
73 ;;
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 ;; ff-cc-hh-converter is included at the end of this file as a reference.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48009
diff changeset
75 ;;
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;; SEARCHING is carried out in a set of directories specified by the
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 ;; ff-search-directories variable:
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 ;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 ;; ("." "../../src" "../include/*" "/usr/local/*/src/*" "$PROJECT/src")
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 ;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 ;; This means that the corresponding file will be searched for first in
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 ;; the current directory, then in ../../src, then in one of the directories
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 ;; under ../include, and so on. The star is _not_ a general wildcard
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 ;; character: it just indicates that the subdirectories of this directory
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 ;; must each be searched in turn. Environment variables will be expanded in
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 ;; the ff-search-directories variable.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 ;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 ;; If the point is on a #include line, the file to be #included is searched
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 ;; for in the same manner. This can be disabled with the ff-ignore-include
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 ;; variable, or by calling ff-get-other-file instead of ff-find-other-file.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 ;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 ;; If the file was not found, ff-find-other-file will prompt you for where
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 ;; to create the new "corresponding file" (defaults to the current directory),
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
94 ;; unless the variable ff-always-try-to-create is set to nil.
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 ;;
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
96 ;; GIVEN AN ARGUMENT (with the ^U prefix), ff-find-other-file will get the
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
97 ;; other file in another (the other?) window (see find-file-other-window and
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
98 ;; switch-to-buffer-other-window). This can be set on a more permanent basis
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
99 ;; by setting ff-always-in-other-window to t in which case the ^U prefix will
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 ;; do the opposite of what was described above.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 ;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 ;; THERE ARE FIVE AVAILABLE HOOKS, called in this order if non-nil:
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 ;;
47354
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
104 ;; - ff-pre-find-hook - called before the search for the other file starts
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
105 ;; - ff-not-found-hook - called when the other file could not be found
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
106 ;; - ff-pre-load-hook - called just before the other file is 'loaded'
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
107 ;; - ff-file-created-hook - called when the other file is created
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
108 ;; - ff-post-load-hook - called just after the other file is 'loaded'
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 ;;
47354
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
110 ;; The *load-hook allow you to place point where you want it in the other
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
111 ;; file.
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 ;; CREDITS:
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 ;; Many thanks go to TUSC Computer Systems Pty Ltd for providing an environ-
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 ;; ment that made the development of this package possible.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 ;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 ;; Many thanks also go to all those who provided valuable feedback throughout
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 ;; the development of this package:
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 ;; Rolf Ebert in particular, Fritz Knabe, Heddy Boubaker, Sebastian Kremer,
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
120 ;; Vasco Lopes Paulo, Mark A. Plaksin, Robert Lang, Trevor West, Kevin
16510
e619a826afdb Enabled commentary for Finder.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
121 ;; Pereira, Benedict Lofstedt & Justin Vallon.
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122
16510
e619a826afdb Enabled commentary for Finder.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
123 ;;; Code:
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 ;; User definable variables:
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
127 (defgroup ff nil
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
128 "Find a file corresponding to this one given a pattern."
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
129 :prefix "ff-"
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
130 :link '(emacs-commentary-link "find-file")
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
131 :group 'find-file)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132
47354
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
133 (defcustom ff-pre-find-hook nil
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
134 "*List of functions to be called before the search for the file starts."
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
135 :type 'hook
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
136 :group 'ff)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137
47354
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
138 (defcustom ff-pre-load-hook nil
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
139 "*List of functions to be called before the other file is loaded."
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
140 :type 'hook
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
141 :group 'ff)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142
47354
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
143 (defcustom ff-post-load-hook nil
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
144 "*List of functions to be called after the other file is loaded."
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
145 :type 'hook
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
146 :group 'ff)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147
47354
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
148 (defcustom ff-not-found-hook nil
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
149 "*List of functions to be called if the other file could not be found."
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
150 :type 'hook
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
151 :group 'ff)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152
47354
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
153 (defcustom ff-file-created-hook nil
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
154 "*List of functions to be called if the other file needs to be created."
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
155 :type 'hook
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
156 :group 'ff)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
158 (defcustom ff-case-fold-search nil
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
159 "*Non-nil means ignore cases in matches (see `case-fold-search').
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
160 If you have extensions in different cases, you will want this to be nil."
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
161 :type 'boolean
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
162 :group 'ff)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
164 (defcustom ff-always-in-other-window nil
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
165 "*If non-nil, find the corresponding file in another window by default.
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
166 To override this, give an argument to `ff-find-other-file'."
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
167 :type 'boolean
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
168 :group 'ff)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
170 (defcustom ff-ignore-include nil
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
171 "*If non-nil, ignore `#include' lines."
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
172 :type 'boolean
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
173 :group 'ff)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
175 (defcustom ff-always-try-to-create t
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
176 "*If non-nil, always attempt to create the other file if it was not found."
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
177 :type 'boolean
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
178 :group 'ff)
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
179
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
180 (defcustom ff-quiet-mode nil
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
181 "*If non-nil, trace which directories are being searched."
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
182 :type 'boolean
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
183 :group 'ff)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
185 (defvar ff-special-constructs
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 '(
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 ;; C/C++ include, for NeXTSTEP too
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 ("^\#\\s *\\(include\\|import\\)\\s +[<\"]\\(.*\\)[>\"]" .
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 (lambda ()
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 (setq fname (buffer-substring (match-beginning 2) (match-end 2)))))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 ;; Ada import
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 ("^with[ \t]+\\([a-zA-Z0-9_\\.]+\\)" .
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 (lambda ()
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 (setq fname (buffer-substring (match-beginning 1) (match-end 1)))
12949
f6e5a73b96e4 (ada-spec-suffix): Definition deleted.
Richard M. Stallman <rms@gnu.org>
parents: 12567
diff changeset
196 (require 'ada-mode)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 (setq fname (concat (ada-make-filename-from-adaname fname)
12949
f6e5a73b96e4 (ada-spec-suffix): Definition deleted.
Richard M. Stallman <rms@gnu.org>
parents: 12567
diff changeset
198 ada-spec-suffix))))
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 )
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
200 "*A list of regular expressions for `ff-find-file'.
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
201 Specifies how to recognise special constructs such as include files
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
202 etc. and an associated method for extracting the filename from that
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
203 construct.")
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204
47860
621b10466c9a (ff-related-file-alist): New alias.
Richard M. Stallman <rms@gnu.org>
parents: 47354
diff changeset
205 (defvaralias 'ff-related-file-alist 'ff-other-file-alist)
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
206 (defcustom ff-other-file-alist 'cc-other-file-alist
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 "*Alist of extensions to find given the current file's extension.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 This list should contain the most used extensions before the others,
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 since the search algorithm searches sequentially through each
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
211 directory specified in `ff-search-directories'. If a file is not found,
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
212 a new one is created with the first matching extension (`.cc' yields `.hh').
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
213 This alist should be set by the major mode."
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
214 :type '(choice (repeat (list regexp (choice (repeat string) function)))
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
215 symbol)
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
216 :group 'ff)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
218 (defcustom ff-search-directories 'cc-search-directories
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 "*List of directories to search for a specific file.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
221 Set by default to `cc-search-directories', expanded at run-time.
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 This list is searched through with each extension specified in
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
224 `ff-other-file-alist' that matches this file's extension. So the
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 longer the list, the longer it'll take to realise that a file
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 may not exist.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
228 A typical format is
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229
16510
e619a826afdb Enabled commentary for Finder.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
230 '(\".\" \"/usr/include\" \"$PROJECT/*/include\")
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
232 Environment variables can be inserted between slashes (`/').
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 They will be replaced by their definition. If a variable does
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
234 not exist, it is replaced (silently) with an empty string.
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
236 The stars are *not* wildcards: they are searched for together with
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
237 the preceding slash. The star represents all the subdirectories except
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
238 `..', and each of these subdirectories will be searched in turn."
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
239 :type '(choice (repeat directory) symbol)
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
240 :group 'ff)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
242 (defcustom cc-search-directories
16510
e619a826afdb Enabled commentary for Finder.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
243 '("." "/usr/include" "/usr/local/include/*")
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
244 "*See the description of the `ff-search-directories' variable."
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
245 :type '(repeat directory)
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
246 :group 'ff)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
248 (defcustom cc-other-file-alist
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 '(
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 ("\\.cc$" (".hh" ".h"))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 ("\\.hh$" (".cc" ".C"))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 ("\\.c$" (".h"))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 ("\\.h$" (".c" ".cc" ".C" ".CC" ".cxx" ".cpp"))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 ("\\.C$" (".H" ".hh" ".h"))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 ("\\.H$" (".C" ".CC"))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 ("\\.CC$" (".HH" ".H" ".hh" ".h"))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 ("\\.HH$" (".CC"))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 ("\\.cxx$" (".hh" ".h"))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 ("\\.cpp$" (".hh" ".h"))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 )
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 "*Alist of extensions to find given the current file's extension.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 This list should contain the most used extensions before the others,
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 since the search algorithm searches sequentially through each directory
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
269 specified in `ff-search-directories'. If a file is not found, a new one
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
270 is created with the first matching extension (`.cc' yields `.hh')."
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
271 :type '(repeat (list regexp (choice (repeat string) function)))
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
272 :group 'ff)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
274 (defcustom modula2-other-file-alist
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 '(
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 ("\\.mi$" (".md")) ;; Modula-2 module definition
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 ("\\.md$" (".mi")) ;; and implementation.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 )
21087
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
279 "*See the description for the `ff-search-directories' variable."
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
280 :type '(repeat (list regexp (choice (repeat string) function)))
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
281 :group 'ff)
c297faa167f5 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21057
diff changeset
282
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 ;; No user definable variables beyond this point!
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 ;; ==============================================
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287
47354
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
288 (make-variable-buffer-local 'ff-pre-find-hook)
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
289 (make-variable-buffer-local 'ff-pre-load-hook)
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
290 (make-variable-buffer-local 'ff-post-load-hook)
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
291 (make-variable-buffer-local 'ff-not-found-hook)
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
292 (make-variable-buffer-local 'ff-file-created-hook)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 (make-variable-buffer-local 'ff-case-fold-search)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 (make-variable-buffer-local 'ff-always-in-other-window)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 (make-variable-buffer-local 'ff-ignore-include)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 (make-variable-buffer-local 'ff-quiet-mode)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 (make-variable-buffer-local 'ff-other-file-alist)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 (make-variable-buffer-local 'ff-search-directories)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 ;; User entry points
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 ;;;###autoload
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 (defun ff-get-other-file (&optional in-other-window)
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
305 "Find the header or source file corresponding to this file.
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
306 See also the documentation for `ff-find-other-file'.
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
308 If optional IN-OTHER-WINDOW is non-nil, find the file in another window."
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 (interactive "P")
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 (let ((ignore ff-ignore-include))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 (setq ff-ignore-include t)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 (ff-find-the-other-file in-other-window)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 (setq ff-ignore-include ignore)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314
48009
8b3977d58df6 (ff-find-related-file): Fix autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 47860
diff changeset
315 ;;;###autoload
47860
621b10466c9a (ff-related-file-alist): New alias.
Richard M. Stallman <rms@gnu.org>
parents: 47354
diff changeset
316 (defalias 'ff-find-related-file 'ff-find-other-file)
621b10466c9a (ff-related-file-alist): New alias.
Richard M. Stallman <rms@gnu.org>
parents: 47354
diff changeset
317
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 ;;;###autoload
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 (defun ff-find-other-file (&optional in-other-window ignore-include)
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
320 "Find the header or source file corresponding to this file.
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
321 Being on a `#include' line pulls in that file.
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
323 If optional IN-OTHER-WINDOW is non-nil, find the file in the other window.
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
324 If optional IGNORE-INCLUDE is non-nil, ignore being on `#include' lines.
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 Variables of interest include:
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
328 - `ff-case-fold-search'
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
329 Non-nil means ignore cases in matches (see `case-fold-search').
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 If you have extensions in different cases, you will want this to be nil.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
332 - `ff-always-in-other-window'
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 If non-nil, always open the other file in another window, unless an
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
334 argument is given to `ff-find-other-file'.
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
336 - `ff-ignore-include'
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 If non-nil, ignores #include lines.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
339 - `ff-always-try-to-create'
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 If non-nil, always attempt to create the other file if it was not found.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
342 - `ff-quiet-mode'
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 If non-nil, traces which directories are being searched.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
345 - `ff-special-constructs'
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
346 A list of regular expressions specifying how to recognise special
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
347 constructs such as include files etc, and an associated method for
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 extracting the filename from that construct.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
350 - `ff-other-file-alist'
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 Alist of extensions to find given the current file's extension.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
353 - `ff-search-directories'
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 List of directories searched through with each extension specified in
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
355 `ff-other-file-alist' that matches this file's extension.
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356
47354
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
357 - `ff-pre-find-hook'
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 List of functions to be called before the search for the file starts.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359
47354
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
360 - `ff-pre-load-hook'
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 List of functions to be called before the other file is loaded.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362
47354
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
363 - `ff-post-load-hook'
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 List of functions to be called after the other file is loaded.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365
47354
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
366 - `ff-not-found-hook'
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 List of functions to be called if the other file could not be found.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368
47354
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
369 - `ff-file-created-hook'
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 List of functions to be called if the other file has been created."
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 (interactive "P")
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 (let ((ignore ff-ignore-include))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 (setq ff-ignore-include ignore-include)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 (ff-find-the-other-file in-other-window)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 (setq ff-ignore-include ignore)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 ;; Support functions
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 (defun ff-find-the-other-file (&optional in-other-window)
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
381 "Find the header or source file corresponding to the current file.
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
382 Being on a `#include' line pulls in that file, but see the help on
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
383 the `ff-ignore-include' variable.
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
385 If optional IN-OTHER-WINDOW is non-nil, find the file in another window."
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 (let (match ;; matching regexp for this file
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 suffixes ;; set of replacing regexps for the matching regexp
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 action ;; function to generate the names of the other files
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 fname ;; basename of this file
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 pos ;; where we start matching filenames
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 stub ;; name of the file without extension
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 alist ;; working copy of the list of file extensions
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 pathname ;; the pathname of the file or the #include line
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 default-name ;; file we should create if none found
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
396 format ;; what we have to match
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
397 found ;; name of the file or buffer found - nil if none
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 dirs ;; local value of ff-search-directories
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 no-match) ;; whether we know about this kind of file
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400
47354
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
401 (run-hooks 'ff-pre-find-hook 'ff-pre-find-hooks)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 (message "Working...")
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 (setq dirs
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 (if (symbolp ff-search-directories)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 (ff-list-replace-env-vars (symbol-value ff-search-directories))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 (ff-list-replace-env-vars ff-search-directories)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 (save-excursion
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 (beginning-of-line 1)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 (setq fname (ff-treat-as-special)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 (cond
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 ((and (not ff-ignore-include) fname)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 (setq default-name fname)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 (setq found (ff-get-file dirs fname nil in-other-window)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 ;; let's just get the corresponding file
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 (t
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 (setq alist (if (symbolp ff-other-file-alist)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 (symbol-value ff-other-file-alist)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 ff-other-file-alist)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 pathname (if (buffer-file-name)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 (buffer-file-name)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 "/none.none"))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427
38273
910cd30b1586 (ff-find-the-other-file): Use file-name-nondirectory
Eli Zaretskii <eliz@gnu.org>
parents: 30816
diff changeset
428 (setq fname (file-name-nondirectory pathname)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 no-match nil
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 match (car alist))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 ;; find the table entry corresponding to this file
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 (setq pos (ff-string-match (car match) fname))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 (while (and match (if (and pos (>= pos 0)) nil (not pos)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 (setq alist (cdr alist))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 (setq match (car alist))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 (setq pos (ff-string-match (car match) fname)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 ;; no point going on if we haven't found anything
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 (if (not match)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 (setq no-match t)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 ;; otherwise, suffixes contains what we need
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 (setq suffixes (car (cdr match))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 action (car (cdr match))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 found nil)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
448 ;; if we have a function to generate new names,
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 ;; invoke it with the name of the current file
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 (if (and (atom action) (fboundp action))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 (progn
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 (setq suffixes (funcall action (buffer-file-name))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 match (cons (car match) (list suffixes))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 stub nil
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 default-name (car suffixes)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 ;; otherwise build our filename stub
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
458 (cond
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 ;; get around the problem that 0 and nil both mean false!
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461 ((= pos 0)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 (setq format "")
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 (setq stub "")
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 )
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 (t
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 (setq format (concat "\\(.+\\)" (car match)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 (string-match format fname)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 (setq stub (substring fname (match-beginning 1) (match-end 1)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 ))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 ;; if we find nothing, we should try to get a file like this one
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 (setq default-name
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 (concat stub (car (car (cdr match))))))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476 ;; do the real work - find the file
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
477 (setq found
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 (ff-get-file dirs
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 stub
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
480 suffixes
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 in-other-window)))))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 (cond
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 (no-match ;; could not even determine the other file
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485 (message ""))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
487 (t
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 (cond
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490 ((not found) ;; could not find the other file
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491
47354
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
492 (run-hooks 'ff-not-found-hook 'ff-not-found-hooks)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
494 (cond
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495 (ff-always-try-to-create ;; try to create the file
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496 (let (name pathname)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498 (setq name
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499 (expand-file-name
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500 (read-file-name
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501 (format "Find or create %s in: " default-name)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 default-directory default-name nil)))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48009
diff changeset
503
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 (setq pathname
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 (if (file-directory-p name)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 (concat (file-name-as-directory name) default-name)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 (setq found name)))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48009
diff changeset
508
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 (ff-find-file pathname in-other-window t)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 (t ;; don't create the file, just whinge
17548
dab7558986cd Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16510
diff changeset
512 (message "No file found for %s" fname))))
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514 (t ;; matching file found
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515 nil))))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517 found)) ;; return buffer-name or filename
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518
42097
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
519 (defun ff-other-file-name ()
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
520 "Return name of the header or source file corresponding to the current file.
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
521 Being on a `#include' line pulls in that file, but see the help on
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
522 the `ff-ignore-include' variable."
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
523
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
524 (let (match ;; matching regexp for this file
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
525 suffixes ;; set of replacing regexps for the matching regexp
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
526 action ;; function to generate the names of the other files
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
527 fname ;; basename of this file
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
528 pos ;; where we start matching filenames
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
529 stub ;; name of the file without extension
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
530 alist ;; working copy of the list of file extensions
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
531 pathname ;; the pathname of the file or the #include line
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
532 default-name ;; file we should create if none found
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
533 format ;; what we have to match
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
534 found ;; name of the file or buffer found - nil if none
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
535 dirs ;; local value of ff-search-directories
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
536 no-match) ;; whether we know about this kind of file
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
537
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
538 (message "Working...")
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
539
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
540 (setq dirs
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
541 (if (symbolp ff-search-directories)
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
542 (ff-list-replace-env-vars (symbol-value ff-search-directories))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
543 (ff-list-replace-env-vars ff-search-directories)))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
544
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
545 (save-excursion
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
546 (beginning-of-line 1)
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
547 (setq fname (ff-treat-as-special)))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
548
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
549 (cond
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
550 ((and (not ff-ignore-include) fname)
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
551 (setq default-name fname)
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
552 (setq found (ff-get-file-name dirs fname nil)))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
553
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
554 ;; let's just get the corresponding file
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
555 (t
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
556 (setq alist (if (symbolp ff-other-file-alist)
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
557 (symbol-value ff-other-file-alist)
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
558 ff-other-file-alist)
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
559 pathname (if (buffer-file-name)
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
560 (buffer-file-name)
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
561 "/none.none"))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
562
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
563 (setq fname (file-name-nondirectory pathname)
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
564 no-match nil
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
565 match (car alist))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
566
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
567 ;; find the table entry corresponding to this file
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
568 (setq pos (ff-string-match (car match) fname))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
569 (while (and match (if (and pos (>= pos 0)) nil (not pos)))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
570 (setq alist (cdr alist))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
571 (setq match (car alist))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
572 (setq pos (ff-string-match (car match) fname)))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
573
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
574 ;; no point going on if we haven't found anything
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
575 (if (not match)
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
576 (setq no-match t)
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
577
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
578 ;; otherwise, suffixes contains what we need
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
579 (setq suffixes (car (cdr match))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
580 action (car (cdr match))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
581 found nil)
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
582
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
583 ;; if we have a function to generate new names,
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
584 ;; invoke it with the name of the current file
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
585 (if (and (atom action) (fboundp action))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
586 (progn
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
587 (setq suffixes (funcall action (buffer-file-name))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
588 match (cons (car match) (list suffixes))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
589 stub nil
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
590 default-name (car suffixes)))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
591
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
592 ;; otherwise build our filename stub
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
593 (cond
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
594
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
595 ;; get around the problem that 0 and nil both mean false!
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
596 ((= pos 0)
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
597 (setq format "")
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
598 (setq stub "")
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
599 )
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
600
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
601 (t
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
602 (setq format (concat "\\(.+\\)" (car match)))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
603 (string-match format fname)
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
604 (setq stub (substring fname (match-beginning 1) (match-end 1)))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
605 ))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
606
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
607 ;; if we find nothing, we should try to get a file like this one
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
608 (setq default-name
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
609 (concat stub (car (car (cdr match))))))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
610
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
611 ;; do the real work - find the file
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
612 (setq found
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
613 (ff-get-file-name dirs stub suffixes)))))
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
614 found)) ;; return buffer-name or filename
e12d545c9a48 (ff-other-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 38273
diff changeset
615
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
616 (defun ff-get-file (search-dirs filename &optional suffix-list other-window)
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
617 "Find a file in the SEARCH-DIRS with the given FILENAME (or filename stub).
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
618 If (optional) SUFFIX-LIST is nil, search for fname, otherwise search
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
619 for fname with each of the given suffixes. Get the file or the buffer
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
620 corresponding to the name of the first file found, or nil."
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
621 (let ((filename (ff-get-file-name search-dirs filename suffix-list)))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48009
diff changeset
622
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
623 (cond
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 ((not filename)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 nil)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626
13896
d23e1ac7b432 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12949
diff changeset
627 ((bufferp (get-file-buffer filename))
d23e1ac7b432 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12949
diff changeset
628 (ff-switch-to-buffer (get-file-buffer filename) other-window)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629 filename)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48009
diff changeset
630
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631 ((file-exists-p filename)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632 (ff-find-file filename other-window nil)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633 filename)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635 (t
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 nil))))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638 (defun ff-get-file-name (search-dirs fname-stub &optional suffix-list)
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
639 "Find a file in SEARCH-DIRS with the given name (or stub) FNAME-STUB.
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
640 If (optional) SUFFIX-LIST is nil, search for FNAME-STUB, otherwise
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
641 search for FNAME-STUB with each of the given suffixes. Return the
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
642 name of the first file found."
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 (let* (dirs ;; working copy of dirs to search
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644 dir ;; the current dir considered
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645 file ;; filename being looked for
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646 rest ;; pathname after first /*
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 this-suffix ;; the suffix we are currently considering
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 suffixes ;; working copy of suffix-list
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 filename ;; built filename
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650 blist ;; list of live buffers
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 buf ;; current buffer in blist
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 found) ;; whether we have found anything
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 (setq suffixes suffix-list)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656 ;; suffixes is nil => fname-stub is the file we are looking for
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 ;; otherwise fname-stub is a stub, and we append a suffix
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 (if suffixes
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 (setq this-suffix (car suffixes))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660 (setq this-suffix "")
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 (setq suffixes (list "")))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48009
diff changeset
662
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 ;; find whether the file is in a buffer first
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 (while (and suffixes (not found))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 (setq filename (concat fname-stub this-suffix))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 (if (not ff-quiet-mode)
17548
dab7558986cd Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16510
diff changeset
668 (message "Finding buffer %s..." filename))
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669
17548
dab7558986cd Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16510
diff changeset
670 (if (bufferp (get-file-buffer filename))
dab7558986cd Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16510
diff changeset
671 (setq found (buffer-file-name (get-file-buffer filename))))
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 (setq blist (buffer-list))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 (setq buf (buffer-name (car blist)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 (while (and blist (not found))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 (if (string-match (concat filename "<[0-9]+>") buf)
16510
e619a826afdb Enabled commentary for Finder.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
678 (setq found (buffer-file-name (car blist))))
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 (setq blist (cdr blist))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 (setq buf (buffer-name (car blist))))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 (setq suffixes (cdr suffixes))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 (setq this-suffix (car suffixes)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 ;; now look for the real file
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 (setq dirs search-dirs)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 (setq dir (car dirs))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689 (while (and (not found) dirs)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 (setq suffixes suffix-list)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 ;; if dir does not contain '/*', look for the file
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694 (if (and dir (not (string-match "\\([^*]*\\)/\\\*\\(/.*\\)*" dir)))
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
695 (progn
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48009
diff changeset
696
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697 ;; suffixes is nil => fname-stub is the file we are looking for
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 ;; otherwise fname-stub is a stub, and we append a suffix
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 (if suffixes
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 (setq this-suffix (car suffixes))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 (setq this-suffix "")
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702 (setq suffixes (list "")))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48009
diff changeset
703
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
704 (while (and suffixes (not found))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 (setq filename (concat fname-stub this-suffix))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 (setq file (concat dir "/" filename))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48009
diff changeset
708
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 (if (not ff-quiet-mode)
17548
dab7558986cd Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16510
diff changeset
710 (message "Finding %s..." file))
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712 (if (file-exists-p file)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 (setq found file))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48009
diff changeset
714
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 (setq suffixes (cdr suffixes))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 (setq this-suffix (car suffixes))))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 ;; otherwise dir matches the '/*', so search each dir separately
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 (progn
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 (if (match-beginning 2)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 (setq rest (substring dir (match-beginning 2) (match-end 2)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 (setq rest "")
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723 )
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 (setq dir (substring dir (match-beginning 1) (match-end 1)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 (let ((dirlist (ff-all-dirs-under dir '("..")))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 this-dir compl-dirs)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 (setq this-dir (car dirlist))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 (while dirlist
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731 (setq compl-dirs
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 (append
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 compl-dirs
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 (list (concat this-dir rest))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 ))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 (setq dirlist (cdr dirlist))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 (setq this-dir (car dirlist)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 (if compl-dirs
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 (setq found (ff-get-file-name compl-dirs
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741 fname-stub
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742 suffix-list))))))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743 (setq dirs (cdr dirs))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744 (setq dir (car dirs)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 (if found
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
747 (message "%s found" found))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749 found))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
750
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
751 (defun ff-string-match (regexp string &optional start)
13896
d23e1ac7b432 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12949
diff changeset
752 "Like `string-match', but set `case-fold-search' temporarily.
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
753 The value used comes from `ff-case-fold-search'."
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
754 (let ((case-fold-search ff-case-fold-search))
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755 (if regexp
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
756 (string-match regexp string start))))
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
757
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
758 (defun ff-list-replace-env-vars (search-list)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759 "Replace environment variables (of the form $VARIABLE) in SEARCH-LIST."
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760 (let (list
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761 (var (car search-list)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 (while search-list
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
763 (if (string-match "\\(.*\\)\\$[({]*\\([a-zA-Z0-9_]+\\)[)}]*\\(.*\\)" var)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
764 (setq var
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765 (concat
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
766 (substring var (match-beginning 1) (match-end 1))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 (getenv (substring var (match-beginning 2) (match-end 2)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768 (substring var (match-beginning 3) (match-end 3)))))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769 (setq search-list (cdr search-list))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
770 (setq list (cons var list))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
771 (setq var (car search-list)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
772 (setq search-list (reverse list))))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
773
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774 (defun ff-treat-as-special ()
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
775 "Return the file to look for if the construct was special, else nil.
13896
d23e1ac7b432 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12949
diff changeset
776 The construct is defined in the variable `ff-special-constructs'."
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
777 (let* (fname
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
778 (list ff-special-constructs)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
779 (elem (car list))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
780 (regexp (car elem))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
781 (match (cdr elem)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
782 (while (and list (not fname))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 (if (and (looking-at regexp) match)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784 (setq fname (funcall match)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785 (setq list (cdr list))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786 (setq elem (car list))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 (setq regexp (car elem))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788 (setq match (cdr elem)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789 fname))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791 (defun ff-basename (string)
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
792 "Return the basename of pathname STRING."
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793 (setq string (concat "/" string))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 (string-match ".*/\\([^/]+\\)$" string)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795 (setq string (substring string (match-beginning 1) (match-end 1))))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
797 (defun ff-all-dirs-under (here &optional exclude)
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
798 "Get all the directory files under directory HERE.
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
799 Exclude all files in the optional EXCLUDE list."
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 (if (file-directory-p here)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 (condition-case nil
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802 (progn
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803 (let ((files (directory-files here t))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804 (dirlist (list))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
805 file)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
806 (while files
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
807 (setq file (car files))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
808 (if (and
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
809 (file-directory-p file)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
810 (not (member (ff-basename file) exclude)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
811 (setq dirlist (cons file dirlist)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
812 (setq files (cdr files)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
813 (setq dirlist (reverse dirlist))))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
814 (error nil))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
815 nil))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817 (defun ff-switch-file (f1 f2 file &optional in-other-window new-file)
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
818 "Call F1 or F2 on FILE, according to IN-OTHER-WINDOW.
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
819 In addition, this runs various hooks.
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
820
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
821 Either F1 or F2 receives FILE as the sole argument.
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
822 The decision of which one to call is based on IN-OTHER-WINDOW
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
823 and on the global variable `ff-always-in-other-window'.
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
824
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
825 F1 and F2 are typically `find-file' / `find-file-other-window'
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
826 or `switch-to-buffer' / `switch-to-buffer-other-window' function pairs.
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
827
47354
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
828 If optional NEW-FILE is t, then a special hook (`ff-file-created-hook') is
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
829 called before `ff-post-load-hook'."
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
830 (run-hooks 'ff-pre-load-hook 'ff-pre-load-hooks)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831 (if (or
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
832 (and in-other-window (not ff-always-in-other-window))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
833 (and (not in-other-window) ff-always-in-other-window))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834 (funcall f2 file)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 (funcall f1 file))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836 (if new-file
47354
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
837 (run-hooks 'ff-file-created-hook 'ff-file-created-hooks))
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
838 (run-hooks 'ff-post-load-hook 'ff-post-load-hooks))
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840 (defun ff-find-file (file &optional in-other-window new-file)
13896
d23e1ac7b432 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12949
diff changeset
841 "Like `find-file', but may show the file in another window."
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
842 (ff-switch-file 'find-file
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
843 'find-file-other-window
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 file in-other-window new-file))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845
13896
d23e1ac7b432 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12949
diff changeset
846 (defun ff-switch-to-buffer (buffer-or-name &optional in-other-window)
d23e1ac7b432 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12949
diff changeset
847 "Like `switch-to-buffer', but may show the buffer in another window."
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
849 (ff-switch-file 'switch-to-buffer
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
850 'switch-to-buffer-other-window
13896
d23e1ac7b432 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 12949
diff changeset
851 buffer-or-name in-other-window nil))
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852
22192
bf83c23f3300 (ff-emacs-19, ff-xemacs): Functions deleted.
Richard M. Stallman <rms@gnu.org>
parents: 21087
diff changeset
853 ;;;###autoload
bf83c23f3300 (ff-emacs-19, ff-xemacs): Functions deleted.
Richard M. Stallman <rms@gnu.org>
parents: 21087
diff changeset
854 (defun ff-mouse-find-other-file (event)
bf83c23f3300 (ff-emacs-19, ff-xemacs): Functions deleted.
Richard M. Stallman <rms@gnu.org>
parents: 21087
diff changeset
855 "Visit the file you click on."
bf83c23f3300 (ff-emacs-19, ff-xemacs): Functions deleted.
Richard M. Stallman <rms@gnu.org>
parents: 21087
diff changeset
856 (interactive "e")
bf83c23f3300 (ff-emacs-19, ff-xemacs): Functions deleted.
Richard M. Stallman <rms@gnu.org>
parents: 21087
diff changeset
857 (save-excursion
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
858 (mouse-set-point event)
22192
bf83c23f3300 (ff-emacs-19, ff-xemacs): Functions deleted.
Richard M. Stallman <rms@gnu.org>
parents: 21087
diff changeset
859 (ff-find-other-file nil)))
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860
22192
bf83c23f3300 (ff-emacs-19, ff-xemacs): Functions deleted.
Richard M. Stallman <rms@gnu.org>
parents: 21087
diff changeset
861 ;;;###autoload
bf83c23f3300 (ff-emacs-19, ff-xemacs): Functions deleted.
Richard M. Stallman <rms@gnu.org>
parents: 21087
diff changeset
862 (defun ff-mouse-find-other-file-other-window (event)
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
863 "Visit the file you click on in another window."
22192
bf83c23f3300 (ff-emacs-19, ff-xemacs): Functions deleted.
Richard M. Stallman <rms@gnu.org>
parents: 21087
diff changeset
864 (interactive "e")
bf83c23f3300 (ff-emacs-19, ff-xemacs): Functions deleted.
Richard M. Stallman <rms@gnu.org>
parents: 21087
diff changeset
865 (save-excursion
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
866 (mouse-set-point event)
22192
bf83c23f3300 (ff-emacs-19, ff-xemacs): Functions deleted.
Richard M. Stallman <rms@gnu.org>
parents: 21087
diff changeset
867 (ff-find-other-file t)))
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
870 ;; This section offers an example of user defined function to select files
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
871
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
872 (defun ff-upcase-p (string &optional start end)
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
873 "Return t if STRING is all uppercase.
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
874 Given START and/or END, checks between these characters."
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
875 (let (match str)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
876 (if (not start)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
877 (setq start 0))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
878 (if (not end)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
879 (setq end (length string)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
880 (if (= start end)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
881 (setq end (1+ end)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
882 (setq str (substring string start end))
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
883 (if (and
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884 (ff-string-match "[A-Z]+" str)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
885 (setq match (match-data))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
886 (= (car match) 0)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887 (= (car (cdr match)) (length str)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888 t
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889 nil)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
890
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891 (defun ff-cc-hh-converter (arg)
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
892 "Discriminate file extensions.
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
893 Build up a new file list based possibly on part of the directory name
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
894 and the name of the file passed in."
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
895 (ff-string-match "\\(.*\\)/\\([^/]+\\)/\\([^.]+\\).\\([^/]+\\)$" arg)
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
896 (let ((path (if (match-beginning 1)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
897 (substring arg (match-beginning 1) (match-end 1)) nil))
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
898 (dire (if (match-beginning 2)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
899 (substring arg (match-beginning 2) (match-end 2)) nil))
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
900 (file (if (match-beginning 3)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901 (substring arg (match-beginning 3) (match-end 3)) nil))
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
902 (extn (if (match-beginning 4)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 (substring arg (match-beginning 4) (match-end 4)) nil))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904 return-list)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
905 (cond
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
906 ;; fooZapJunk.cc => ZapJunk.{hh,h} or fooZapJunk.{hh,h}
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
907 ((and (string= extn "cc")
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908 (ff-string-match "^\\([a-z]+\\)\\([A-Z].+\\)$" file))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909 (let ((stub (substring file (match-beginning 2) (match-end 2))))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910 (setq dire (upcase (substring file (match-beginning 1) (match-end 1))))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911 (setq return-list (list (concat stub ".hh")
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912 (concat stub ".h")
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913 (concat file ".hh")
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914 (concat file ".h")))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
915 ))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916 ;; FOO/ZapJunk.hh => fooZapJunk.{cc,C} or ZapJunk.{cc,C}
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
917 ((and (string= extn "hh") (ff-upcase-p dire) file)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
918 (let ((stub (concat (downcase dire) file)))
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
919 (setq return-list (list (concat stub ".cc")
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920 (concat stub ".C")
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921 (concat file ".cc")
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 (concat file ".C")))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923 ))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
924 ;; zap.cc => zap.hh or zap.h
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
925 ((string= extn "cc")
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926 (let ((stub file))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927 (setq return-list (list (concat stub ".hh")
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928 (concat stub ".h")))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 ))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
930 ;; zap.hh => zap.cc or zap.C
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931 ((string= extn "hh")
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 (let ((stub file))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 (setq return-list (list (concat stub ".cc")
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
934 (concat stub ".C")))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935 ))
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
936 (t
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937 nil))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48009
diff changeset
938
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
939 return-list))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 ;; This section offers an example of user defined function to place point.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943 ;; The regexps are Ada specific.
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 (defvar ff-function-name nil "Name of the function we are in.")
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946
44880
e772dea9fb2e Remove Ada-specific example code.
Gerd Moellmann <gerd@gnu.org>
parents: 42097
diff changeset
947 ;(eval-when-compile (require 'ada-mode))
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
948
47354
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
949 ;; bind with (setq ff-pre-load-hook 'ff-which-function-are-we-in)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
950 ;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
951 (defun ff-which-function-are-we-in ()
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
952 "Return the name of the function whose definition/declaration point is in.
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
953 Also remember that name in `ff-function-name'."
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
955 (setq ff-function-name nil)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957 (save-excursion
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
958 (if (re-search-backward ada-procedure-start-regexp nil t)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
959 (setq ff-function-name (buffer-substring (match-beginning 0)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960 (match-end 0)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
961 ; we didn't find a procedure start, perhaps there is a package
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
962 (if (re-search-backward ada-package-start-regexp nil t)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963 (setq ff-function-name (buffer-substring (match-beginning 0)
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964 (match-end 0)))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
965 ))))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
966
47354
27533450eb3b (ff-pre-find-hook, ff-pre-load-hook, ff-post-load-hook)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44880
diff changeset
967 ;; bind with (setq ff-post-load-hook 'ff-set-point-accordingly)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
968 ;;
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969 (defun ff-set-point-accordingly ()
11272
79fcaf4e0e75 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
970 "Find the function specified in `ff-function-name'.
12567
7318536fb256 (ff-set-point-accordingly): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 11272
diff changeset
971 That name was previously determined by `ff-which-function-are-we-in'."
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
972 (if ff-function-name
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973 (progn
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
974 (goto-char (point-min))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975 (search-forward ff-function-name nil t))))
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
976
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
977 (provide 'find-file)
10491
dfc0d2c81c56 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978
30816
e06965792db4 Doc fixes. Move provide to end.
Dave Love <fx@gnu.org>
parents: 22192
diff changeset
979 ;;; find-file.el ends here