Nicolas Goaziou <m...@nicolasgoaziou.fr> writes:
> Hello, > > stardiviner <numbch...@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