|
|
@@ -38,18 +38,35 @@ language, and the cdr should be a list containing the extension
|
|
|
and shebang(#!) line to use when writing out the language to
|
|
|
file.")
|
|
|
|
|
|
-(defun org-bable-tangle ()
|
|
|
+(defun org-babel-tangle ()
|
|
|
"Extract the bodies of all source code blocks form the current
|
|
|
file into their own source-specific files."
|
|
|
(interactive)
|
|
|
- (let (by-lang)
|
|
|
+ (let (blocks)
|
|
|
+ ;; blocks will be two nested association lists, first grouped by
|
|
|
+ ;; language, then by session, the contents of the second a-list
|
|
|
+ ;; will be source-code blocks
|
|
|
(org-babel-map-source-blocks (buffer-file-name)
|
|
|
- (let ((link (progn (org-store-link nil) (pop org-stored-links)))
|
|
|
- (source-name (intern (org-babel-get-src-block-name)))
|
|
|
- (info (org-babel-get-src-block-info)))
|
|
|
- ;; once collected these can be added to by-lang and then
|
|
|
- ;; dropped out to buffers
|
|
|
- ))))
|
|
|
+ (let* ((link (progn (org-store-link nil) (pop org-stored-links)))
|
|
|
+ (source-name (intern (org-babel-get-src-block-name)))
|
|
|
+ (info (org-babel-get-src-block-info))
|
|
|
+ (lang (first info))
|
|
|
+ (body (second info))
|
|
|
+ (params (third info))
|
|
|
+ (spec (list link source-name params body))
|
|
|
+ (session (cdr (assoc :session params)))
|
|
|
+ by-lang by-session)
|
|
|
+ ;; add the spec for this block to blocks under it's lang and session
|
|
|
+ (setq by-lang (org-babel-alist-pop lang blocks))
|
|
|
+ (setq by-session (org-babel-alist-pop session by-lang))
|
|
|
+ (setq blocks (cons ;; by-language
|
|
|
+ (cons lang (cons ;; by-session
|
|
|
+ (cons session (cons spec by-session)) by-lang))
|
|
|
+ blocks))))
|
|
|
+ ;; blocks should contain all source-blocks organized by language
|
|
|
+ ;; and session
|
|
|
+ (message "block = %S" blocks)
|
|
|
+ blocks))
|
|
|
|
|
|
(provide 'org-babel-tangle)
|
|
|
;;; org-babel-tangle.el ends here
|