[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [O] [ANN] Changes to link syntax
From: |
stardiviner |
Subject: |
Re: [O] [ANN] Changes to link syntax |
Date: |
Tue, 26 Mar 2019 17:08:06 +0800 |
User-agent: |
mu4e 1.1.0; emacs 27.0.50 |
Nicolas Goaziou <address@hidden> writes:
> stardiviner <address@hidden> writes:
>
>> Hi, @Nicolas, will you release a method to update all existing Org
>> file links?
>
> On second though, you may want to test the following:
>
> (defun org-update-link-syntax ()
> "Update syntax for links in current buffer."
> (org-with-point-at 1
> (let ((case-fold-search t))
> (while (re-search-forward "\\[\\[[^]]*?%\\(?:2[05]\\|5[BD]\\)" nil t)
> (let ((object (save-match-data (org-element-context))))
> (when (and (eq 'link (org-element-type object))
> (= (match-beginning 0)
> (org-element-property :begin object)))
> (goto-char (org-element-property :end object))
> (let* ((uri-start (+ 2 (match-beginning 0)))
> (uri-end (save-excursion
> (goto-char uri-start)
> (re-search-forward "\\][][]" nil t)
> (match-beginning 0)))
> (uri (buffer-substring-no-properties uri-start uri-end))
> (start 0))
> (when (catch :obsolete
> (while (string-match "%\\(..\\)?" uri start)
> (setq start (match-end 0))
> (unless (member (match-string 1 uri)
> '("25" "5B" "5D" "20"))
> (throw :obsolete nil)))
> (y-or-n-p
> (format "Possibly obsolete URI syntax: %S. Update?"
> uri)))
> (setf (buffer-substring uri-start uri-end)
> (org-link-escape (org-link-decode uri)))))))))))
>
I applied your function in my testing Org file. most links are updated. Except
some links. I think this link is not detected.
#+begin_src org
[[file:~/Org/Wiki/Computer%20Technology/Softwares/%E9%9A%8F%E6%89%8B%E8%AE%B0.org::*Export%20through%20Web%20client][Export
through Web client]]
#+end_src
Also, I might write a command to using your suggested ~dolist~ and
~directory-files-recursively~.
--
[ 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