From mboxrd@z Thu Jan 1 00:00:00 1970 From: stardiviner 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 Message-ID: <87va6wk3ea.fsf@gmail.com> References: <87po1zvw9n.fsf@gmail.com> <87bmc1tb4s.fsf@nicolasgoaziou.fr> Reply-To: numbchild@gmail.com Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:55948) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g401t-00013T-Ia for emacs-orgmode@gnu.org; Sun, 23 Sep 2018 04:46:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1g401p-0003Pb-Hs for emacs-orgmode@gnu.org; Sun, 23 Sep 2018 04:46:13 -0400 Received: from [218.75.119.140] (port=47448 helo=dark.localdomain) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g401p-0003OD-5l for emacs-orgmode@gnu.org; Sun, 23 Sep 2018 04:46:09 -0400 In-reply-to: <87bmc1tb4s.fsf@nicolasgoaziou.fr> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: Nicolas Goaziou Cc: org-mode Nicolas Goaziou writes: > Hello, > > stardiviner 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