2025-06-20-20-32

38 阅读1分钟
#+name: elisp-2025-06-20-20-32
#+begin_src emacs-lisp :eval no
  (lambda (url)
    (let* ((full nil) (abbr nil)
           (abbr-map (get 'org-noweb-expand-link
                          'http-abbr)))
      (save-match-data
        (when (string-match "http[s]://\\(/[^/]+/\\)"
                            url)
          (setq abbr (substring (match-string 1 url)
                                1 -1))
          (setq full (alist-get abbr abbr-map
                                nil nil #'string=))
          (unless full (error "Invalid abbr: %s" abbr))
          (setq url (replace-match full nil t url 1)))))
    (let* ((parsed-url `(:origin-url ,url))
           (url (string-split url "::"))
           (option (if (length> url 1)
                              (car (last url))))
           (url (if (null option)
                    (car url)
                  (string-join (nbutlast url) "::")))
           (full nil) (abbr nil)
           (abbr-map (get 'org-noweb-expand-link
                          'http-abbr)))
      (plist-put parsed-url :url url)
      (plist-put parsed-url :search-option option)
      parsed-url))
#+end_src