diff options
author | Jack Kamm <jackkamm@gmail.com> | 2020-10-28 17:29:04 -0700 |
---|---|---|
committer | Jack Kamm <jackkamm@gmail.com> | 2020-11-11 17:00:25 -0800 |
commit | 5371b30fe546469064a33c21baafb2ffc1ccbf86 (patch) | |
tree | cbf0455ca37a5a177536f9ff7cfd84ec89d4f155 | |
parent | e9c3993ee57985addd3e8e103e78b66b182a626f (diff) | |
download | org-mode-5371b30fe546469064a33c21baafb2ffc1ccbf86.tar.gz |
ol.el: New option to set org-link-file-path-type to a function
* lisp/ol.el (org-link-file-path-type): Add new option.
(org-insert-link): Handle function option for org-link-file-path-type.
-rw-r--r-- | etc/ORG-NEWS | 18 | ||||
-rw-r--r-- | lisp/ol.el | 12 |
2 files changed, 28 insertions, 2 deletions
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 60bff52..66347fe 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -35,6 +35,24 @@ omit a file description was to omit the header argument entirely, which made it difficult/impossible to provide a default value for =file-desc=. +*** New option to set ~org-link-file-path-type~ to a function + +~org-link-file-path-type~ can now be set to a function that takes the +full filename as an argument and returns the path to link to. + +For example, if you use ~project.el~, you can set this function to use +relative links within a project as follows: + +#+begin_src emacs-lisp +(setq (org-link-file-path-type + (lambda (path) + (let* ((proj (project-current)) + (root (if proj (project-root proj) default-directory))) + (if (string-prefix-p (expand-file-name root) path) + (file-relative-name path) + (abbreviate-file-name path)))))) +#+end_src + ** New features *** =ob-python= improvements to =:return= header argument @@ -212,13 +212,18 @@ relative Relative to the current directory, i.e. the directory of the file absolute Absolute path, if possible with ~ for home directory. noabbrev Absolute path, no abbreviation of home directory. adaptive Use relative path for files in the current directory and sub- - directories of it. For other files, use an absolute path." + directories of it. For other files, use an absolute path. + +Alternatively, users may supply a custom function that takes the +full filename as an argument and returns the path." :group 'org-link :type '(choice (const relative) (const absolute) (const noabbrev) - (const adaptive)) + (const adaptive) + (function)) + :package-version '(Org . "9.5") :safe #'symbolp) (defcustom org-link-abbrev-alist nil @@ -1876,6 +1881,9 @@ Use TAB to complete link prefixes, then RET for type-specific completion support (setq path (expand-file-name path))) ((eq org-link-file-path-type 'relative) (setq path (file-relative-name path))) + ((functionp org-link-file-path-type) + (setq path (funcall org-link-file-path-type + (expand-file-name path)))) (t (save-match-data (if (string-match (concat "^" (regexp-quote |