aboutsummaryrefslogtreecommitdiff
path: root/emacs/.emacs.d/lisp/my/my-org.el
diff options
context:
space:
mode:
authorYuchen Pei <id@ypei.org>2023-12-26 16:47:17 +1100
committerYuchen Pei <id@ypei.org>2023-12-26 16:47:17 +1100
commit8bf74036d8d0d1699d05dbc335d5155ee5888805 (patch)
treea34fd323a8ccf4ecbb325a9c758e44bf4d7fb879 /emacs/.emacs.d/lisp/my/my-org.el
parent855a412061bc119dbc618158290745dd3b8664f6 (diff)
[emacs] Fixing a few things
- link-gopher: some formatting - my-org: extend my-org-attach-copy-attached-orgs to fallback to a staging area - my-libgen: better naming just in case
Diffstat (limited to 'emacs/.emacs.d/lisp/my/my-org.el')
-rw-r--r--emacs/.emacs.d/lisp/my/my-org.el56
1 files changed, 44 insertions, 12 deletions
diff --git a/emacs/.emacs.d/lisp/my/my-org.el b/emacs/.emacs.d/lisp/my/my-org.el
index b189b78..00a8a0f 100644
--- a/emacs/.emacs.d/lisp/my/my-org.el
+++ b/emacs/.emacs.d/lisp/my/my-org.el
@@ -822,22 +822,54 @@ When BLOCK-REGEXP is non-nil, use this regexp to find blocks."
my-org-attach-copy-attached-doc-exts "\\|")))
(defun my-org-attach-copy-attached-docs ()
+ "Copy docs to a mount point.
+
+Use `my-org-attach-copy-attached-targets', which is an list
+of (name to-dir staging). Try copying to to-dir.
+
+On failure, hard link to staging.
+On success, also move everything from staging to to-dir."
(interactive)
- (let* ((name
- (completing-read "Copy attached docs to: "
- my-org-attach-copy-attached-targets))
- (path (alist-get name my-org-attach-copy-attached-targets
- nil nil #'equal)))
- (let ((basedir (org-attach-dir)))
+ (pcase-let* ((name
+ (completing-read "Copy attached docs to: "
+ my-org-attach-copy-attached-targets
+ nil t))
+ (`(,to ,staging) (alist-get name my-org-attach-copy-attached-targets
+ nil nil #'equal)))
+ (let ((basedir (org-attach-dir))
+ (failed nil))
(dolist (attached (org-attach-file-list basedir))
(when (string-match my-org-attach-copy-attached-doc-re attached)
- (message "Copying %s to %s (%s)..." attached name path)
- (copy-file (file-name-concat basedir attached)
+ (message "Copying %s to %s (%s)..." attached name to)
+ (condition-case nil
+ (copy-file (file-name-concat basedir attached)
+ (file-name-concat
+ to
+ (replace-regexp-in-string ":" "_" attached))
+ t)
+ (error
+ (message "Hardlinking %s to %s staging area (%s)"
+ attached name staging)
+ (setq failed t)
+ (add-name-to-file
+ (file-name-concat basedir attached)
+ (file-name-concat
+ staging
+ (replace-regexp-in-string ":" "_" attached))
+ t)))
+ (message "Done!")))
+ (unless failed
+ (dolist (staged
+ (directory-files staging nil
+ my-org-attach-copy-attached-doc-re))
+ (message "Moving staged %s to %s (%s)..." staged name to)
+ (copy-file (file-name-concat staging staged)
(file-name-concat
- path
- (replace-regexp-in-string ":" "_" attached)))
- (message "Done!")))))
- )
+ to
+ (replace-regexp-in-string ":" "_" staged))
+ t)
+ (delete-file (file-name-concat staging staged))
+ (message "Done!"))))))
(defun my-org-attach-all-url-plaintext (arg)
(interactive "P")