From: stardiviner <numbchild@gmail.com>
To: Nicolas Goaziou <mail@nicolasgoaziou.fr>
Cc: org-mode <emacs-orgmode@gnu.org>
Subject: Re: coderef does not provide file path for org-insert-link when not in original buffre
Date: Sun, 23 Sep 2018 16:46:05 +0800 [thread overview]
Message-ID: <87va6wk3ea.fsf@gmail.com> (raw)
In-Reply-To: <87bmc1tb4s.fsf@nicolasgoaziou.fr>
Nicolas Goaziou <mail@nicolasgoaziou.fr> writes:
> Hello,
>
> stardiviner <numbchild@gmail.com> 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
next prev parent reply other threads:[~2018-09-23 8:46 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-14 1:52 coderef does not provide file path for org-insert-link when not in original buffre stardiviner
2018-06-23 22:02 ` Nicolas Goaziou
2018-06-24 9:10 ` stardiviner
2018-09-23 8:46 ` stardiviner [this message]
[not found] ` <875zysr0bb.fsf@nicolasgoaziou.fr>
2018-10-24 2:51 ` stardiviner
2018-10-26 16:08 ` Nicolas Goaziou
2018-10-27 2:55 ` stardiviner
2018-11-01 17:39 ` Nicolas Goaziou
2018-11-02 6:15 ` stardiviner
2018-11-04 15:47 ` Nicolas Goaziou
2018-11-06 4:48 ` stardiviner
2018-11-06 4:48 ` [SOLVED] " stardiviner
2018-10-31 5:16 ` stardiviner
-- strict thread matches above, loose matches on Subject: below --
2018-09-26 13:18 Nicolas Goaziou
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87va6wk3ea.fsf@gmail.com \
--to=numbchild@gmail.com \
--cc=emacs-orgmode@gnu.org \
--cc=mail@nicolasgoaziou.fr \
/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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.