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: Fri, 02 Nov 2018 14:15:52 +0800 Message-ID: <87pnvoxaw7.fsf@gmail.com> References: <87po1zvw9n.fsf@gmail.com> <87bmc1tb4s.fsf@nicolasgoaziou.fr> <87va6wk3ea.fsf@gmail.com> <875zysr0bb.fsf@nicolasgoaziou.fr> <875zxst5to.fsf@gmail.com> <87bm7gg06l.fsf@nicolasgoaziou.fr> <87zhv0p07b.fsf@gmail.com> <874ld0d7e3.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]:48254) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gISkS-0002wM-S7 for emacs-orgmode@gnu.org; Fri, 02 Nov 2018 02:16:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gISkP-0001ow-Lp for emacs-orgmode@gnu.org; Fri, 02 Nov 2018 02:16:00 -0400 Received: from [61.175.244.13] (port=52411 helo=dark.localdomain) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gISkO-0001j5-1i for emacs-orgmode@gnu.org; Fri, 02 Nov 2018 02:15:57 -0400 In-reply-to: <874ld0d7e3.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: >> --- >> lisp/org-src.el | 9 ++++++++- >> lisp/org.el | 9 ++++++--- >> 2 files changed, 14 insertions(+), 4 deletions(-) >> >> diff --git a/lisp/org-src.el b/lisp/org-src.el >> index 42e1225ed..0426ff96a 100644 >> --- a/lisp/org-src.el >> +++ b/lisp/org-src.el > > Why not using `defvar-local' instead? Also, since it is meant to be used > in other libraries, it should be `org-src-source-file'. Because the variable `org-src-source-file' is a bridge to pass info between two buffers "source buffer" and source block opened "dedicated buffer". So this variable must be global. Otherwise the "dedicated buffer" can't read it. > >> + (lang-f (progn >> + (setq-local org-src--source-file (buffer-file-name)) >> + (and (eq type 'src-block) (org-src--get-lang-mode lang)))) > > I don't think this is the right place to set `org-src--source-file': it > is unrelated to LANG-F. > I tried this: #+begin_src diff @@ -1000,9 +1000,11 @@ name of the sub-editing buffer." (let* ((lang (if (eq type 'src-block) (org-element-property :language element) "example")) - (lang-f (progn - (setq-local org-src--source-file (buffer-file-name)) - (and (eq type 'src-block) (org-src--get-lang-mode lang)))) + (lang-f (and (eq type 'src-block) (org-src--get-lang-mode lang))) + (org-src-source-file (buffer-file-name)) + (initialize (lambda () + (setq org-src-source-file (buffer-file-name)) + (funcall lang-f))) (babel-info (and (eq type 'src-block) (org-babel-get-src-block-info 'light))) deactivate-mark) #+end_src Put it into initialize function. This is the best way I can come up with. > Also, the value comes from the source buffer, but the variable needs to > be set in the edit buffer. AFAIU, here you set it in the source buffer, > not in the edit buffer. > >> + (insert (format coderef-format label)) >> + (setq link (format "file:%s::%s" >> + org-src--source-file >> + (concat "(" label ")"))) > > Should we check if `org-src-source-file' is the same as the current > file, and offer a simplified link in this case? Don't know which part you mean, I just insert the source file path into the link. About the final link is modified by bellowing `org-link-file-path-type' variable. > >> (setq desc nil))) >> (t (setq link nil))))) >> >> @@ -9852,6 +9853,8 @@ Use TAB to complete link prefixes, then RET for type-specific completion support >> (setq path (expand-file-name path))) >> ((eq org-link-file-path-type 'relative) >> (setq path (file-relative-name path))) >> + ((eq org-link-file-path-type 'adaptive) >> + (setq path (file-relative-name path))) >> (t >> (save-match-data >> (if (string-match (concat "^" (regexp-quote > > Would you writing a few tests? > > Thank you. > > Regards, -- [ stardiviner ] I try to make every word tell the meaning what I want to express. Blog: https://stardiviner.github.io/ IRC(freenode): stardiviner, Matrix: stardiviner GPG: F09F650D7D674819892591401B5DF1C95AE89AC3