From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nicolas Goaziou Subject: Re: File local circular links Date: Thu, 03 Sep 2015 16:06:03 +0200 Message-ID: <87mvx3mwc4.fsf@nicolasgoaziou.fr> References: Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:50213) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZXV7q-0006uP-GJ for emacs-orgmode@gnu.org; Thu, 03 Sep 2015 10:04:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZXV7p-0001Xo-Gr for emacs-orgmode@gnu.org; Thu, 03 Sep 2015 10:04:26 -0400 Received: from relay4-d.mail.gandi.net ([2001:4b98:c:538::196]:33432) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZXV7p-0001XO-5u for emacs-orgmode@gnu.org; Thu, 03 Sep 2015 10:04:25 -0400 In-Reply-To: (Michael Brand's message of "Thu, 3 Sep 2015 15:42:38 +0200") 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-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Michael Brand Cc: Org Mode Hello, Michael Brand writes: > I use a hack to work around a missing feature that I would like to > call "file local circular links". It works until > release_8.2.10-2341-g8094d01 but stops with > release_8.2.10-2342-gcfe5bc9 > > commit cfe5bc97f8b18ccbf49d0764746c7563ce8d29da > Author: Nicolas Goaziou > Date: Mon Aug 3 01:06:32 2015 +0200 > > Fix link search > > and I would like to ask for some help to get it work again. > > File local circular links does this: C-c C-o on line 1 of the file > > ------------------------------------- > [[:file local circular link:]] > some text > [[:file local circular link:]] > ------------------------------------- > > moves to line 3 and C-c C-o again moves back to line 1. (It does not > follow all links when there are more than two but this limitation is a > different story.) > > The hack that I used so far is > > #+BEGIN_SRC emacs-lisp > (defun f-org-link-exec (str) > (let* ((context (org-element-context)) > (link (let ((up (org-element-property :parent context))) > (if (eq (org-element-type up) 'link) up context))) > (avoid-pos (org-element-property :begin link))) > (cond > ;; [[<>]]: Remove the angular brackets to let `org-link-search' > ;; match `str' as an angular bracket link. > ((string-match "^<<\\(.*\\)>>$" str) > (let ((org-execute-file-search-functions nil)) > (org-link-search (match-string 1 str) 'dedicated avoid-pos))) > ;; [[_:xy:]] (abbreviated with "#+LINK: _ file:bla.org:::") or > ;; [[:xy:]]: Bind `org-link-search-must-match-exact-headline' to nil > ;; temporarily. > ((string-match-p "^:.*:$" str) > (let ((org-execute-file-search-functions nil) > (org-link-search-must-match-exact-headline nil)) > ;; The leading part may be "[[link_abbreviation" or just "[[". > (org-link-search (concat "\\[\\[[^:]*" (regexp-quote str) "\\]\\]") > 'fuzzy avoid-pos)))))) > (add-hook 'org-execute-file-search-functions 'f-org-link-exec) > #+END_SRC > > The problematic part is the use of org-link-search which changed. In > the above example it is called as > > #+BEGIN_SRC emacs-lisp > (let ((org-execute-file-search-functions nil) > (org-link-search-must-match-exact-headline nil)) > (org-link-search "\\[\\[[^:]*:file local circular link:\\]\\]")) > #+END_SRC > > and after the commit org-link-search errors with "cond: No match for > fuzzy expression: \[\[[^:]*:file local circular link:\]\]". To me it > looks like if support for regular expressions for fuzzy links has been > dropped. I can not use the regexp search here because it invokes the > org-occur sparse tree. I don't know anything like regular expression support for fuzzy links. > How can I deal with this? Can't you simply do (org-link-search ":file local circular link:" (point)) ? You could also use target-links, or define a new type of link that would trigger a search in the buffer, see `org-add-link-type'. Regards, -- Nicolas Goaziou