|
@@ -95,41 +95,43 @@ exported source code blocks by language."
|
|
|
she-banged)
|
|
|
(mapc
|
|
|
(lambda (spec)
|
|
|
- (let* ((tangle (cdr (assoc :tangle (third spec))))
|
|
|
- (base-name (or (cond
|
|
|
- ((string= "yes" tangle)
|
|
|
- (file-name-sans-extension (buffer-file-name)))
|
|
|
- ((string= "no" tangle) nil)
|
|
|
- ((> (length tangle) 0) tangle))
|
|
|
- target-file))
|
|
|
- (file-name (when base-name
|
|
|
- (if (and ext
|
|
|
- (string= base-name
|
|
|
- (file-name-sans-extension base-name)))
|
|
|
- (concat base-name "." ext) base-name))))
|
|
|
- ;; ;; debugging
|
|
|
- ;; (message "tangle=%S base-name=%S file-name=%S"
|
|
|
- ;; tangle base-name file-name)
|
|
|
- (when file-name
|
|
|
- ;; delete any old versions of file
|
|
|
- (when (and (file-exists-p file-name)
|
|
|
- (not (member file-name path-collector)))
|
|
|
- (delete-file file-name))
|
|
|
- ;; drop source-block to file
|
|
|
- (with-temp-buffer
|
|
|
- (funcall lang-f)
|
|
|
- (when (and she-bang (not (member file-name she-banged)))
|
|
|
- (insert (concat she-bang "\n"))
|
|
|
- (setq she-banged (cons file-name she-banged)))
|
|
|
- (when commentable
|
|
|
- (comment-region
|
|
|
- (point) (progn (insert "generated by org-babel-tangle") (point)))
|
|
|
- (move-end-of-line nil))
|
|
|
- (org-babel-spec-to-string spec)
|
|
|
- (append-to-file nil nil file-name))
|
|
|
- ;; update counter
|
|
|
- (setq block-counter (+ 1 block-counter))
|
|
|
- (add-to-list 'path-collector file-name))))
|
|
|
+ (flet ((get-spec (name)
|
|
|
+ (cdr (assoc name (third spec)))))
|
|
|
+ (let* ((tangle (get-spec :tangle))
|
|
|
+ (she-bang (if (> (length (get-spec :shebang)) 0)
|
|
|
+ (get-spec :shebang)
|
|
|
+ she-bang))
|
|
|
+ (base-name (or (cond
|
|
|
+ ((string= "yes" tangle)
|
|
|
+ (file-name-sans-extension (buffer-file-name)))
|
|
|
+ ((string= "no" tangle) nil)
|
|
|
+ ((> (length tangle) 0) tangle))
|
|
|
+ target-file))
|
|
|
+ (file-name (when base-name
|
|
|
+ (if (and ext
|
|
|
+ (string= base-name
|
|
|
+ (file-name-sans-extension base-name)))
|
|
|
+ (concat base-name "." ext) base-name))))
|
|
|
+ ;; ;; debugging
|
|
|
+ ;; (message
|
|
|
+ ;; "tangle=%S base-name=%S file-name=%S she-bang=%S commentable=%s"
|
|
|
+ ;; tangle base-name file-name she-bang commentable)
|
|
|
+ (when file-name
|
|
|
+ ;; delete any old versions of file
|
|
|
+ (when (and (file-exists-p file-name)
|
|
|
+ (not (member file-name path-collector)))
|
|
|
+ (delete-file file-name))
|
|
|
+ ;; drop source-block to file
|
|
|
+ (with-temp-buffer
|
|
|
+ (funcall lang-f)
|
|
|
+ (when (and she-bang (not (member file-name she-banged)))
|
|
|
+ (insert (concat she-bang "\n"))
|
|
|
+ (setq she-banged (cons file-name she-banged)))
|
|
|
+ (org-babel-spec-to-string spec)
|
|
|
+ (append-to-file nil nil file-name))
|
|
|
+ ;; update counter
|
|
|
+ (setq block-counter (+ 1 block-counter))
|
|
|
+ (add-to-list 'path-collector file-name)))))
|
|
|
specs)))
|
|
|
(org-babel-tangle-collect-blocks lang))
|
|
|
(message "tangled %d code block%s" block-counter
|
|
@@ -197,7 +199,9 @@ form
|
|
|
(let ((link (first spec))
|
|
|
(source-name (second spec))
|
|
|
(body (fourth spec))
|
|
|
- (commentable (not (fifth spec))))
|
|
|
+ (commentable (not (if (> (length (cdr (assoc :comments (third spec)))) 0)
|
|
|
+ (string= (cdr (assoc :comments (third spec))) "no")
|
|
|
+ (fifth spec)))))
|
|
|
(insert-comment (format "[[%s][%s]]" (org-link-escape link) source-name))
|
|
|
(insert (format "%s" (org-babel-chomp body)))
|
|
|
(insert-comment (format "%s ends here" source-name)))))
|