Esegui automaticamente org-lint tramite flycheck


12

Ho un mucchio di file in modalità org che pubblico in HTML per una knowledge base, a volte la pubblicazione si interrompe a causa di un collegamento interrotto o qualcosa del genere ed è difficile trovare il problema.

Recentemente ho usato org-lint per trovare i problemi. C'è un modo per eseguirlo automaticamente attraverso il flycheck?


1
perché non eseguirlo tramite org-export-before-processing-hook? Penso che per usare il flycheck sia necessario un programma esterno per la lanugine. Sembra che sia possibile scrivere funzioni elisp in flycheck-define-generic-checker che funzionerebbe con org-lint e farebbe quello che vuoi in flycheck.
John Kitchin,

Forse eseguirlo prima dell'esportazione sarebbe abbastanza buono? Se controlli ogni volta che salvi, sarebbe troppo costoso.
xji,

@JohnKitchin: I programmi esterni sono comuni ma non necessari, anche se in questo caso il programma esterno naturale da eseguire sarebbe emacs stesso :)
Clément

Risposte:


6

Ho provato a limitare la lanugine a un controllore con (org-lint '(link-to-local-file)), tuttavia l'analisi continuerà a indurre un notevole ritardo. Forse limitare la linter alla sottostruttura corrente o usare la asynclibreria può migliorare le prestazioni. Ad ogni modo, di seguito è riportato un setup flycheck piuttosto semplice per org-lint:

(flycheck-define-generic-checker 'org-lint
  "Syntax checker for org-lint."
  :start 'flycheck-org-lint-start
  :modes '(org-mode))

(defun flycheck-org-lint-start (checker callback)
    (funcall
     callback 'finished
     (save-excursion
       (mapcar
        (lambda (err)
          (goto-char (car err))
          (flycheck-error-new-at
           (org-current-line) (1+ (current-column))
           'warning (cadr err) :checker checker))
        (org-lint-link-to-local-file (org-element-parse-buffer))))))

(add-to-list 'flycheck-checkers 'org-lint)

1
Ottengo questo errore quando utilizzo questo codice; Errore durante il controllo automatico della sintassi: (funzione void org-lint-link-to-local-file). Ho dovuto cambiare quella riga in (org-lint '(link-to-local-file)) e funziona. Grazie
map7
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.