emacs-orgmode
[Top][All Lists]
Advanced

[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
      



reply via email to

[Prev in Thread] Current Thread [Next in Thread]