Старая тема (Emacs, добавление заголовка к ссылке в org-mode) уже в архиве. Но прогресс не остановить.
Понадобилось добавить отмену по timeout. Спросил у ChatGPT o1-preview. Он выдал мне такой рабочий код:
(defun org-link-describe (url &optional descr)
"Retrieve the HTML title from a URL with a 3-second timeout using request.el."
(require 'request)
(require 'dom)
(let ((result nil)
(done nil)
(timeout 3)
(request-backend 'url-retrieve)) ;; Use url-retrieve backend
;; Send the HTTP request
(request
url
:timeout timeout
:headers '(("User-Agent" . "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \
(KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"))
:parser (lambda ()
;; Parse the HTML content into a DOM
(libxml-parse-html-region (point) (point-max)))
:success (cl-function
(lambda (&key data &allow-other-keys)
;; Extract the <title> element
(let ((title-node (dom-by-tag data 'title)))
(when title-node
(setq result (dom-text (car title-node)))))
(setq done t))) ;; Ensure this is inside the lambda
:error (cl-function
(lambda (&rest args &key error-thrown &allow-other-keys)
(message "Error fetching URL: %s" error-thrown)
(setq done t)))) ;; Ensure this is inside the lambda
;; Wait for the request to finish or timeout
(let ((wait-time 0)
(step 0.1))
(while (and (not done)
(< wait-time timeout))
(sleep-for step)
(setq wait-time (+ wait-time step))))
result))
;; Fill a description for a link
(setq org-make-link-description-function 'org-link-describe)
Но этот код не работает со страницами в кодировке koi8-r, например, opennet. Предложения по улучшению кода всячески приветствуются (я не знаю ELisp).