Исправление и поддержание гиперссылок в режиме орг.

15

Это вопрос, состоящий из двух частей и имеющий отношение к гнили ссылок .

  1. Предоставляет ли org-mode какие-либо функции для проверки гиперссылок, особенно локальных? Это может быть использовано для борьбы с гнилью после свершившегося факта.

  2. Более того, предоставляет ли org функциональность, чтобы, если я переименую файл в dired, он обновлял затронутые файлы? Это может предотвратить некоторые виды гниения ссылок до того, как это произойдет, по крайней мере для локальных файлов.

Дэвид Дж.
источник

Ответы:

6

Для первой части я не нашел ничего встроенного. Следующая функция предоставит список неработающих ссылок в минибуфере. Я проверил это на нескольких простых примерах, но далеко не исчерпывающе.

(defun check-bit-rot ()
  "Searches current buffer for file: links, and reports the broken ones."
  (interactive)
  (save-excursion
    (beginning-of-buffer)
    (let (file-links)
      (while (re-search-forward org-bracket-link-analytic-regexp nil t)
        (if (string= "file:" (match-string-no-properties 1))
            (if (not (file-exists-p (match-string-no-properties 3)))
                (setq file-links
                      (cons (match-string-no-properties 0)
                            file-links)))))
      (message
       (concat "Warning: broken links in this file:\n"
               (mapconcat #'identity file-links "\n"))))))
Тайлер
источник
1
Как вы думаете, org-bracket-link-analytic-regexpэто поможет выбрать ссылки на Орг? Похоже, он был создан для задач, как эта.
Константин
@ Константин да, спасибо! Не знал об этом.
Тайлер
Ницца. Две возможные дополнительные идеи: (1) добавить некоторый маркировочный текст к плохим ссылкам, чтобы продвигать обнаружение с помощью поиска и / или выделения; (2) добавить в закладки плохие ссылки.
Дэвид Дж.
Идея (3) превратит это в проверку на лету, и выделение в буфере будет сделано за вас.
Малабарба
Интересные предложения. Я буду копаться в этом, когда позволит время в течение праздника.
Тайлер
8

Начиная с Org 9.0 вы можете запускать org-lintфункцию, которая, помимо прочего, проверяет наличие битых локальных ссылок.

Малый Пятнистый
источник
2

Я написал скрипт на Python https://github.com/cashTangoTangoCash/orgFixLinks, который пытается восстановить неработающие ссылки на локальные файлы внутри одного или нескольких файлов org на локальном диске в ОС Ubuntu. Это, конечно, любительский скрипт командной строки, но, возможно, стоит поиграть. Существует вики-сайт GitHub, который предоставляет определенную документацию: https://github.com/cashTangoTangoCash/orgFixLinks/wiki . Пожалуйста, проверьте предупреждения в README.

Я сожалею, что этот скрипт на Python не является частью Org, но совершенно отдельный / автономный. Я надеюсь, что никто не обеспокоен тем, что я не отвечаю на вопрос об ОП напрямую; Я просто подумал, что кому-то может понравиться играть со скриптом Python.

NoHatToday84
источник