Function: ede-new
ede-new is an interactive and byte-compiled function defined in
ede.el.gz.
Signature
(ede-new TYPE &optional NAME)
Documentation
Create a new project starting from project type TYPE.
Optional argument NAME is the name to give this project.
Probably introduced at or before Emacs version 23.4.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/ede.el.gz
(defun ede-new (type &optional name)
"Create a new project starting from project type TYPE.
Optional argument NAME is the name to give this project."
(interactive
(list (completing-read "Project Type: "
(object-assoc-list
'name
(let* ((l ede-project-class-files)
(cp (ede-current-project))
(cs (when cp (eieio-object-class cp)))
(r nil))
(while l
(if cs
(if (eq (oref (car l) class-sym)
cs)
(setq r (cons (car l) r)))
(if (oref (car l) new-p)
(setq r (cons (car l) r))))
(setq l (cdr l)))
(when (not r)
(if cs
(error "No valid interactive sub project types for %s"
cs)
(error "EDE error: Can't find project types to create")))
r)
)
nil t)))
(require 'ede/custom)
;; Make sure we have a valid directory
(when (not (file-exists-p default-directory))
(error "Cannot create project in non-existent directory %s" default-directory))
(when (not (file-writable-p default-directory))
(error "No write permissions for %s" default-directory))
(unless (ede-check-project-directory default-directory)
(error "%s is not an allowed project directory in `ede-project-directories'"
default-directory))
;; Make sure the project directory is loadable in the future.
(ede-check-project-directory default-directory)
;; Create the project
(let* ((obj (object-assoc type 'name ede-project-class-files))
(nobj (let ((f (oref obj file))
(pf (oref obj proj-file)))
;; We are about to make something new, changing the
;; state of existing directories.
(ede-project-directory-remove-hash default-directory)
;; Make sure this class gets loaded!
(require f)
(make-instance (oref obj class-sym)
:name (or name (read-string "Name: "))
:directory default-directory
:file (cond ((stringp pf)
(expand-file-name pf))
((fboundp pf)
(funcall pf))
(t
(error
"Unknown file name specifier %S"
pf)))
:targets nil)
))
(inits (oref obj initializers)))
;; Force the name to match for new objects.
(setf (slot-value nobj 'object-name) (oref nobj name))
;; Handle init args.
(while inits
(eieio-oset nobj (car inits) (car (cdr inits)))
(setq inits (cdr (cdr inits))))
(let ((pp (ede-parent-project)))
(when pp
(ede-add-subproject pp nobj)
(ede-commit-project pp)))
(ede-commit-project nobj))
;; Once the project is created, load it again. This used to happen
;; lazily, but with project loading occurring less often and with
;; security in mind, this is now the safe time to reload.
(ede-load-project-file default-directory)
;; Have the menu appear
(setq ede-minor-mode t)
;; Allert the user
(message "Project created and saved. You may now create targets."))