Next: User interface methods, Previous: Development Overview, Up: Extending EDE [Contents]
Project detection happens with the list of ede-project-autoload
instances stored in ede-project-class-files
. The full project
detection scheme works like this:
find-file-hook
calls ede-turn-on-hook
on BUFFER.
ede-turn-on-hook
turns on ede-minor-mode
ede-minor-mode
looks to see if BUFFER is associated with any
open projects. If not, it calls ede-load-project-file
to find
a project associated with the current directory BUFFER is in.
ede-minor-mode
associates the found project with the current
buffer with a series of variables, such as ede-object
, and
ede-object-project
and ede-object-root-project
.
Once a buffer is associated, EDE minor mode commands will operate on that buffer.
The function ede-load-project-file
is at the heart of detecting
projects, and it works by looping over all the known project autoload
types in ede-project-autoload
using the utility
ede-directory-project-p
.
The function ede-directory-project-p
will call
ede-dir-to-projectfile
on every ede-project-autoload
until one of them returns true. The method
ede-dir-to-projectfile
in turn gets the :proj-file
slot
from the autoload. If it is a string (i.e., a project file name), it
checks to see if that exists in BUFFER’s directory. If it is a
function, then it calls that function and expects it to return a file
name or nil
. If the file exists, then this directory is assumed to be
part of a project, and ede-directory-project-p
returns the
instance of ede-project-autoload
that matched.
If the current directory contains the file .ede-ignore
then
that directory is automatically assumed to contain no projects, even
if there is a matching pattern. Use this type of file in a directory
that may contain many other sub projects, but still has a Makefile of
some sort.
If the current directory is a project, then EDE scans upwards till
it finds the top of the project. It does this by calling
ede-toplevel-project
. If this hasn’t already been discovered,
the directories as scanned upward one at a time until a directory with
no project is found. The last found project becomes the project
root. If the found instance of ede-project-autoload
has a
valid proj-root
slot value, then that function is called instead
of scanning the project by hand. Some project types have a short-cut
for determining the root of a project, so this comes in handy.
Getting back to ede-load-project-file
, this now has an instance
of ede-project-autoload
. It uses the load-type
slot to
both autoload in the project type, and to create a new instance of the
project type found for the root of the project. That project is added
to the global list of all projects. All subprojects are then created
and assembled into the project data structures.
Next: User interface methods, Previous: Development Overview, Up: Extending EDE [Contents]