Ihor Radchenko <yanta...@posteo.net> writes: > Joseph Turner <jos...@ushin.org> writes: > >>>> I'd like for users to be able to take an existing directory of Org mode >>>> documents and copy them all into a hyperdrive. I think the least >>>> surprising behavior is for the links between those files to continue >>>> working. Perhaps the best option is for hyperdrive.el to make all "file" >>>> type links, explicit or not, point to other files inside the hyperdrive? >>>> >>>> In that case, there would be no way for Org mode files in a hyperdrive >>>> to point to the local filesystem. Similarly, when Org documents are >>>> exported to HTML, there's no way to export <a href="file:///index.html">. >>> >>> May you please elaborate? How is hyperdrive directory different from >>> local directory? >> >> On disk, hyperdrive data is stored by hash prefixes like so: >> >> /home/joseph/.local/share/hyper-gateway-nodejs/cores/ >> └── 00 >> ... >> This is similar to the way .git/objects/ directories are structured. >> ... >> Does that answer your question? > > Not really. > May you please provide an example with an Org file containing file links > and how you envision to transform them? Will they be transformed > depending on the directory the Org file is located in?
I don't want to transform the file links. The idea is that an Org file "foo.org" could be copied into a hyperdrive, and [[./bar.org]] would point to a file called "bar.org" in the same folder in the hyperdrive. That way, you could copy both "foo.org" and "bar.org" from your local directory into a hyperdrive, the links between them would work as-is. Pseudo-code for a hyperdrive.el :follow function for file: links: (defun hyperdrive--org-file-link-follow (url &optional _prefix _link) (when hyperdrive-mode (hyperdrive-open (hyperdrive-convert-path-to-hyper-url url option)) ;; Turns "/foo" into "hyper://PUBLIC-KEY/foo" t)) (org-link-set-parameters "file" :follow #'hyperdrive--org-file-link-follow) >>>> (org-element-property :search-option link) >>> >>> :follow functions are passed both path and search option. >> >> How is the search option passed in? >> >> IIUC in org-link-open, the path argument passed in has no search option: >> >> (funcall (org-link-get-parameter type :follow) path arg) > > You are right. > What we can do then is pass an extra argument to :follow function - the > link object. That way, :follow function can get all the information it > needs. I like this idea! Would this change break existing :follow functions which only expect max two args? >> By the way, I think this minor improvement could be made at the bottom >> of org-link-open: >> >> From 0c83446f16441df39618e43f964e18f672205d55 Mon Sep 17 00:00:00 2001 >> From: Joseph Turner <jos...@breatheoutbreathe.in> >> Date: Mon, 15 Jan 2024 00:24:30 -0800 >> Subject: [PATCH] lisp/ol.el (org-link-open): Use let-bound :follow function > > Thanks! > Applied, onto main; I added TINYCHANGE cookie to the commit message. > https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=0254854ee Thanks! Joseph