Nicolas Goaziou <m...@nicolasgoaziou.fr> writes:
> stardiviner <numbch...@gmail.com> 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 found a simple and better solution to replace those. I use =rg (ripgrep)= to search you mentioned escape characters "%20 %25 %5B %5D". I then use =wgrep= on results. I spend pretty long time to processing all links. There are about 40000 links matched. And about 20000 links processed. Still there are some links matched but not process (or ignored) by your upper function. Here I picked some typical cases: #+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]] - [ ] [[file:Data/Books/%E7%89%9B%E6%B4%A5%E9%80%9A%E8%AF%86%E8%AF%BB%E6%9C%AC:%20%E7%A7%91%E5%AD%A6%E5%93%B2%E5%AD%A6.azw3][牛津通识读本: 科学哲学 (azw3)]] -- by 萨米尔·奥卡沙 [[file:~/Org/Wiki/Computer%20Technology/Programming/Data%20Structure/Data/Books/%E5%A4%A7%E8%AF%9D%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84.pdf::%25PDF-1.4][数据结构起源 -- 《大话数据结构》]] [[file:~/Org/Wiki/Computer Technology/Programming/Emacs/Data/Emacs Packages/Org mode/Org mode.org::*Write Online Book of Programming Data Structures and Algorithms][Write Online Book of Programming Data Structures and Algorithms]] - [[file:Data/Videos/%E8%B5%8C%E5%8D%9A%E9%BB%98%E7%A4%BA%E5%BD%95/%5B%E8%B5%8C%E5%8D%9A%E9%BB%98%E7%A4%BA%E5%BD%95%5D%20Ultimate_Survivor_Kaiji%20-%2015.rmvb][Ultimate Survivor Kaiji 15]] #+end_src After finished this upgrading, I will write a blog post about this for helping user migration. -- [ 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