I'm in mid of other stuff, so I'd like to delegate this work to someone else who would like to try himself at some elisp hacking.
I'd like to have M-x slime-open-system which would ask me for an asdf system, and then open all the files listed in its .asd file.
Look at contrib/{slime,swank}-asdf.el for inspiration.
-T.
"Tobias C. Rittweiler" tcr@freebits.de writes:
I'm in mid of other stuff, so I'd like to delegate this work to someone else who would like to try himself at some elisp hacking.
I'd like to have M-x slime-open-system which would ask me for an asdf system, and then open all the files listed in its .asd file.
Look at contrib/{slime,swank}-asdf.el for inspiration.
Opening all files doesn't sound good, how about something like dired?
From: "Tobias C. Rittweiler" tcr@freebits.de
I'm in mid of other stuff, so I'd like to delegate this work to someone else who would like to try himself at some elisp hacking.
I'd like to have M-x slime-open-system which would ask me for an asdf system, and then open all the files listed in its .asd file.
Maybe make speedbar present .asd files as containers?
regards, Samium Gromoff -- _deepfire-at-feelingofgreen.ru O< ascii ribbon campaign - stop html mail - www.asciiribbon.org
* "Tobias C. Rittweiler" 877huyjukd.fsf@freebits.de : Wrote on Wed, 14 Oct 2009 09:36:34 +0200:
| I'm in mid of other stuff, so I'd like to delegate this work to someone | else who would like to try himself at some elisp hacking. | | I'd like to have M-x slime-open-system which would ask me for an asdf | system, and then open all the files listed in its .asd file. |
Here is my code for doing that with MK-DEFSYSTEM systems. I prompt for system names via the minibuffer, and if the system has recursive dependencies, I get an sldb prompt asking whether I want to recursively handle files in the subsystems. Also I use SWANK::SLIME-EVAL-IN-EMACS to call find-file, rather than getting a list of files in emacs (for 2 reasons). So I set `slime-enable-evaluate-in-emacs' to `t'
;; Emacs side: (setq slime-enable-evaluate-in-emacs t) (defun slime-open-system (&optional system) (interactive (list (completing-read "MK Defsystem: " (slime-eval `(cl:mapcar 'mk::component-name (mk::defined-systems)))))) (slime-eval `(swank::open-system ,system)))
;; Lisp side: (defun swank::open-system (system) "Opens the files of a given MK:DEFSYSTEM system in Emacs." (swank::mk-map-files system (lambda (x) (with-simple-restart (skip-this "Skip.") (swank::eval-in-emacs `(progn (find-file ,(namestring (truename x))) nil ;; SWANK bug: SWANK::EVAL-IN-EMACS cant handle return ;; the value of find-file ))))))
(defun swank::mk-map-files (system &optional f) ;; One _could_ use mk::*operations-propagate-to-subsystems* instead of ;; *recursively-handle-deps* to control what happens on dependencies but the ;; default value may not be appropriate. (labels ((walk-components (component) (declare (special *recursively-handle-deps*)) (ecase (mk::component-type component) ((:file :private-file) (let ((src (mk::component-full-pathname component :source))) (if f (funcall f src) (list src)))) ((:module :system :subsystem :defsystem) (let ((deps (mk::component-depends-on component))) (when (and deps (not *recursively-handle-deps*)) (restart-case (cerror "Skip deps" "System ~S depends on: ~S." component deps) (recursively-open-deps () :report "Recursively handle deps." (setq *recursively-handle-deps* t)))) (nconc (when (and deps *recursively-handle-deps*) (loop for dep in deps for depsys = (ignore-errors (mk:find-system dep)) unless depsys do (warn "Not handling unknown system: ~S." dep) else nconc (walk-components depsys))) (loop for x in (mk::component-components component) nconc (walk-components x)))))))) (let ((*recursively-handle-deps* nil) (system (etypecase system (mk::component (ecase (mk::component-type system) (:defsystem system))) (symbol (mk:find-system system)) (string (mk:find-system system))))) (declare (special *recursively-handle-deps*)) (walk-components system))))
-- Madhu