[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [O] coderef does not provide file path for org-insert-link when not
From: |
stardiviner |
Subject: |
Re: [O] coderef does not provide file path for org-insert-link when not in original buffre |
Date: |
Sun, 23 Sep 2018 16:46:05 +0800 |
User-agent: |
mu4e 1.1.0; emacs 26.1 |
Nicolas Goaziou <address@hidden> writes:
> Hello,
>
> stardiviner <address@hidden> writes:
>
>> `org-insert-link` should be smart on decide whether current buffer is the
>> same buffer with `org-store-link` source buffer, if yes, use [[(set the temp
>> buffer to unibyte)]]. If no, use:
>>
>> [[file:~/Org/elquery.org::(set%20the%20temp%20buffer%20to%20unibyte)][(set
>> the temp buffer to unibyte)]]
>>
>> WDYT?
>
> It sounds like a good idea. Do you want to implement it?
>
> Regards,
I take a look at the org.el code of functions `org-store-link`,
`org-insert-link`, they can't inherit the original buffer file name
`buffer-file-name`. So can't use `org-link-file-path-type 'adaptive` case. But
I found `org-insert-link` function definition has this snippet of code:
```
(defun org-insert-link ...
...
(cond
((or (eq org-link-file-path-type 'absolute)
(equal complete-file '(16)))
(setq path (abbreviate-file-name (expand-file-name path))))
((eq org-link-file-path-type 'noabbrev)
(setq path (expand-file-name path)))
((eq org-link-file-path-type 'relative)
(setq path (file-relative-name path)))
;; I tried to add this, but failed. because `coderef` is executed in
`org-edit-src-code` which invokes `org-src--edit-element`, it create a
dedicated buffer which does not have `buffer-file-name`. I don't know how to
archive what I want now.
;; ((eq org-link-file-path-type 'adaptive)
;; (setq path (file-relative-name path)))
(t
(save-match-data
(if (string-match (concat "^" (regexp-quote
(expand-file-name
(file-name-as-directory
default-directory))))
(expand-file-name path))
;; We are linking a file with relative path name.
(setq path (substring (expand-file-name path)
(match-end 0)))
(setq path (abbreviate-file-name (expand-file-name path)))))))
.....
```
I don't know which function should I change to let `org-insert-link` and
`org-store-link` can inherit the original buffer filename info. Because
'adaptive org-link-file-path-type need compare two pathes like this:
```
(let ((coderef-path PATH) ; TODO:
(org-unbracket-string "<" ">" (
(org-link-prettify (first
(reverse org-stored-links)))))
(same-directory? (not (string=
(expand-file-name default-directory)
(expand-file-name
(file-name-directory (or coderef-path
"")))))))
(if (and default-directory same-directory?)
(if (eq org-link-file-path-type 'adaptive)
(format "[[file:%s::%s][%s]]"
(file-relative-name
(expand-file-name (or coderef-path "")
default-directory)
(file-name-directory buffer-file-name))
label ; (format coderef-format label)
label ; (format coderef-format label)
)
(expand-file-name coderef-path default-directory))))
```
This is a snippet of code I adapted from my original commit:
"49a8de4ffd2d0fc50c975ff3edac15d2bb37a809"
Can you help me on this? Thanks :) :)
--
[ stardiviner ] don't need to convince with trends.
Blog: https://stardiviner.github.io/
IRC(freenode): stardiviner
GPG: F09F650D7D674819892591401B5DF1C95AE89AC3
- Re: [O] coderef does not provide file path for org-insert-link when not in original buffre,
stardiviner <=