From: Ryan Scott <ryan@vicarious-living.com>
To: emacs-orgmode@gnu.org
Subject: New source block results option for attaching file to node
Date: Thu, 26 Aug 2021 01:48:50 -0700 [thread overview]
Message-ID: <CAHBUXNyDdDShTvS=uv7Zh9Y7Wku0oHrAfASWV63Mw-dSsk8qDw@mail.gmail.com> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 239 bytes --]
An additional option for use with ":results file" that moves the returned
path to the node attachment directory (as returned by org-attach-dir),
creating it if necessary.
First time submitting a patch. Any feedback is appreciated.
-ryan
[-- Attachment #1.2: Type: text/html, Size: 338 bytes --]
[-- Attachment #2: 0001-ob-core-Added-option-for-attaching-file-from-babel-s.patch --]
[-- Type: application/octet-stream, Size: 4923 bytes --]
From cbe97587df4b660f56e420015222e4f3559588a2 Mon Sep 17 00:00:00 2001
From: "Ryan C. Scott" <ryan@5pmcasual.com>
Date: Wed, 25 Aug 2021 02:15:09 -0700
Subject: [PATCH] ob-core: Added option for attaching file from babel src block
result
* ob-core.el (org-babel-format-result): Added `:results-param' option `attach' which when used with `file' will cause the resultant file path to be moved to the `org-attach-dir' for the node.
(org-babel-result-to-file): Added optional 3rd parameter `type' which will be used in place of "file" in link type, if present.
(org-babel-result-to-file-attachment): New function that moves the file at theh provided `result' path to the nodes attachment directory, creating it as necessary using `org-attach-dir'. A new function was created to adhere to the design of the API and not complicated `org-babel-result-to-file' with the movement to the attachment directory.
* org-attach.el (org-attach-dir): Added autoload header to simplify dependencies necessary to support this feature (called in `org-babel-result-to-file-attachment').
---
lisp/ob-core.el | 31 ++++++++++++++++++++++++++-----
lisp/org-attach.el | 1 +
2 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/lisp/ob-core.el b/lisp/ob-core.el
index 857e03e55..c1d1b77e0 100644
--- a/lisp/ob-core.el
+++ b/lisp/ob-core.el
@@ -2188,6 +2188,10 @@ silent -- no results are inserted into the Org buffer but
file ---- the results are interpreted as a file path, and are
inserted into the buffer using the Org file syntax.
+attach -- used with `file', will move the file at the path returned
+ by the source block to the nodes attachmen directory (as
+ reported by `org-attach-dir'.
+
list ---- the results are interpreted as an Org list.
raw ----- results are added directly to the Org file. This is
@@ -2241,9 +2245,13 @@ INFO may provide the values of these header arguments (in the
(cond ((stringp result)
(setq result (org-no-properties result))
(when (member "file" result-params)
- (setq result (org-babel-result-to-file
- result
- (org-babel--file-desc (nth 2 info) result)))))
+ (setq result (if (member "attach" result-params)
+ (org-babel-result-to-file-attachment
+ result
+ (org-babel--file-desc (nth 2 info) result))
+ (org-babel-result-to-file
+ result
+ (org-babel--file-desc (nth 2 info) result))))))
((listp result))
(t (setq result (format "%S" result))))
(if (and result-params (member "silent" result-params))
@@ -2548,7 +2556,7 @@ in the buffer."
(line-beginning-position 2))
(point))))))
-(defun org-babel-result-to-file (result &optional description)
+(defun org-babel-result-to-file (result &optional description type)
"Convert RESULT into an Org link with optional DESCRIPTION.
If the `default-directory' is different from the containing
file's directory then expand relative links."
@@ -2559,7 +2567,8 @@ file's directory then expand relative links."
(expand-file-name
(file-name-directory
(buffer-file-name (buffer-base-buffer)))))))))
- (format "[[file:%s]%s]"
+ (format "[[%s:%s]%s]"
+ (or type "file")
(if (and default-directory
(buffer-file-name (buffer-base-buffer)) same-directory?)
(if (eq org-link-file-path-type 'adaptive)
@@ -2571,6 +2580,18 @@ file's directory then expand relative links."
result)
(if description (concat "[" description "]") "")))))
+(defun org-babel-result-to-file-attachment (result &optional description)
+ "Convert RESULT into an Org link after moving the provided path to the current node's attachment directory as reported by `org-attach-dir', using the optional DESCRIPTION if provided.
+See `org-babel-result-to-file' for further link generation details."
+
+ (let* ((dir (file-relative-name
+ (org-attach-dir t)))
+ (filename (file-name-nondirectory result))
+ (newname (format "%s/%s" dir filename)))
+
+ (rename-file result newname t)
+ (org-babel-result-to-file filename description "attachment")))
+
(defun org-babel-examplify-region (beg end &optional results-switches inline)
"Comment out region using the inline `==' or `: ' org example quote."
(interactive "*r")
diff --git a/lisp/org-attach.el b/lisp/org-attach.el
index e8e8ade83..9f180255a 100644
--- a/lisp/org-attach.el
+++ b/lisp/org-attach.el
@@ -323,6 +323,7 @@ Shows a list of commands and prompts for another key to execute a command."
(call-interactively command)
(error "No such attachment command: %c" c))))))
+;;;###autoload
(defun org-attach-dir (&optional create-if-not-exists-p no-fs-check)
"Return the directory associated with the current outline node.
First check for DIR property, then ID property.
--
2.32.0.windows.2
next reply other threads:[~2021-08-26 9:01 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-26 8:48 Ryan Scott [this message]
2021-08-31 11:15 ` New source block results option for attaching file to node Timothy
2021-08-31 19:43 ` Ryan Scott
2021-09-01 14:45 ` Ihor Radchenko
2021-09-01 20:01 ` Ryan Scott
2021-09-02 7:40 ` [PATCH] " Ryan Scott
2021-09-02 13:44 ` Greg Minshall
2021-09-03 3:10 ` Ihor Radchenko
2021-09-03 3:28 ` Ryan Scott
2021-09-05 13:22 ` Ihor Radchenko
2021-09-05 13:56 ` Ryan Scott
2021-09-10 1:04 ` Ryan Scott
2021-09-10 6:26 ` Timothy
2021-10-02 8:32 ` Ihor Radchenko
2021-10-02 9:39 ` Ryan Scott
2021-10-05 0:04 ` Christopher M. Miles
2021-10-05 1:05 ` Ryan Scott
2021-10-08 1:22 ` Christopher M. Miles
2021-11-05 7:16 ` Ryan Scott
2022-04-21 12:47 ` Ihor Radchenko
2022-04-21 17:29 ` Ryan Scott
2022-04-22 6:02 ` Ihor Radchenko
2022-04-22 6:19 ` Ryan Scott
2022-06-10 8:06 ` Ryan Scott
2022-06-11 4:32 ` Ihor Radchenko
2022-06-11 7:47 ` Ryan Scott
2022-06-11 12:49 ` Ihor Radchenko
2022-06-12 0:47 ` Ryan Scott
2022-06-14 4:11 ` Ihor Radchenko
2022-06-14 5:55 ` Ryan Scott
2022-06-14 9:04 ` Ryan Scott
2022-06-14 13:48 ` Ihor Radchenko
2022-06-14 18:23 ` Ryan Scott
2022-06-11 12:51 ` Ihor Radchenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAHBUXNyDdDShTvS=uv7Zh9Y7Wku0oHrAfASWV63Mw-dSsk8qDw@mail.gmail.com' \
--to=ryan@vicarious-living.com \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).