[CHANGED] Improved mojo.el. Lots of work still needed.

This commit is contained in:
Sami Samhuri 2009-11-20 12:09:40 -08:00
parent e45e1e2cf1
commit f287b64e6e

View file

@ -86,7 +86,7 @@ the Emacs Wiki, but soon there will be a spot on github for it.")
(case system-type (case system-type
((windows-nt) "c:/progra~1/palm/sdk") ((windows-nt) "c:/progra~1/palm/sdk")
((darwin) "/opt/PalmSDK/Current") ((darwin) "/opt/PalmSDK/Current")
(t "")) (t "/opt/PalmSDK/Current"))
"Path to where the mojo SDK is. "Path to where the mojo SDK is.
Note, using the old-school dos name of progra~1 was the only way i could make Note, using the old-school dos name of progra~1 was the only way i could make
@ -94,11 +94,16 @@ this work."
:type 'directory :type 'directory
:group 'mojo) :group 'mojo)
(defcustom mojo-project-directory "/Users/sjs/Projects/brighthouse/webOS" (defcustom mojo-project-directory "~/Projects/brighthouse/webOS"
"Directory where all your Mojo projects are located." "Directory where all your Mojo projects are located."
:type 'directory :type 'directory
:group 'mojo) :group 'mojo)
(defcustom mojo-build-directory (expand-file-name "build" mojo-project-directory)
"Directory where builds are saved."
:type 'directory
:group 'mojo)
;;* buffer const ;;* buffer const
(defconst mojo-buffer-name "*mojo*") (defconst mojo-buffer-name "*mojo*")
@ -112,6 +117,36 @@ this work."
:type 'boolean :type 'boolean
:group 'mojo) :group 'mojo)
(defun drop-last-path-component (path)
"Get the head of a path by dropping the last component."
(if (string= "/" path)
path
(substring path 0 (- (length path)
(length (last-path-component path))
1)))) ;; subtract one more for the trailing slash
(defun last-path-component (path)
"Get the tail of a path, i.e. the last component."
(if (string= "/" path)
path
(let ((start -2))
(while (not (string= "/" (substring path start (+ start 1))))
(setq start (- start 1)))
(substring path (+ start 1)))))
(defun find-project-subdirectory (path)
"Find a project's subdirectory under mojo-project-directory."
(let ((project-subdirectory (expand-file-name mojo-project-directory))
(last-component (last-path-component path))
(dir-prefix path))
;; remove last path element until we find the project subdir under mojo-project-directory
(while (and (not (string= project-subdirectory dir-prefix))
(not (string= "/" dir-prefix)))
(setq last-component (last-path-component dir-prefix))
(setq dir-prefix (drop-last-path-component dir-prefix)))
(concat dir-prefix "/" last-component)))
;;* interactive generate ;;* interactive generate
(defun mojo-generate (title directory) (defun mojo-generate (title directory)
"Generate a new Mojo application in the `mojo-project-directory'. "Generate a new Mojo application in the `mojo-project-directory'.
@ -121,7 +156,7 @@ ID is the id of the application.
DIRECTORY is the directory where the files are stored." DIRECTORY is the directory where the files are stored."
;;TODO handle existing directories (use --overwrite) ;;TODO handle existing directories (use --overwrite)
(interactive "sTitle: \nsDirectory Name (inside of mojo-project-directory): \n") (interactive "sTitle: \nsDirectory Name (inside of mojo-project-directory): \n")
(let ((mojo-dir (concat mojo-project-directory "/" directory))) (let ((mojo-dir (expand-file-name (concat mojo-project-directory "/" directory))))
(when (file-exists-p mojo-dir) (when (file-exists-p mojo-dir)
(error "Cannot mojo-generate onto an existing directory! (%s)" mojo-dir)) (error "Cannot mojo-generate onto an existing directory! (%s)" mojo-dir))
(make-directory mojo-dir) (make-directory mojo-dir)
@ -135,17 +170,16 @@ DIRECTORY is the directory where the files are stored."
(mojo-cmd "palm-emulator" nil)) (mojo-cmd "palm-emulator" nil))
;;* interactive ;;* interactive
(defun mojo-package (dir) (defun mojo-package ()
"Package up an application inside of DIR." "Package up an application inside of DEFAULT-DIRECTORY for the current buffer."
(interactive "DPackage up Application Dir: ") (interactive)
(let ((default-directory dir)) (mojo-cmd "palm-package" (list "-o" mojo-build-directory (find-project-subdirectory))))
(mojo-cmd "palm-package" (list dir))))
;;* interactive ;;* interactive
(defun mojo-install (package) (defun mojo-install (package)
"Install PACKAGE. The emulator needs to be running." "Install PACKAGE. The emulator needs to be running."
(interactive "fInstall Package File: ") (interactive "fInstall Package File: ")
(mojo-cmd "palm-install" (list package))) (mojo-cmd "palm-install" (list (expand-file-name package))))
;;* interactive ;;* interactive
(defun mojo-list () (defun mojo-list ()