emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
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
      

  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

  List information: https://www.orgmode.org/

* 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 public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).