Como posso fazer com que o flyspell ignore os URLs?

14

Quando uso flyspell-mode, ele relata erros de ortografia sempre que digito um URL. Existe uma maneira de dizer ao Flyspell para parar de verificar os URLs?

Matthew Piziak
fonte
1
Pois ispell(não flyspell) esse link semi-relacionado ispell-skip-region-alist, parece útil: superuser.com/a/345461/206164 Talvez flyspelltenha algo semelhante que possa ser implementado - por exemplo, usando flyspell-mode-predicate.
lawlist

Respostas:

11

Depois de um pouco de pesquisa, encontrei uma dica na [ resposta do Superuser.com : você precisa definir flyspell-mode-predicateuma função que decida se as palavras devem ser verificadas ou não. Aqui está uma maneira de fazer com que o Flyspell ignore qualquer coisa que comece com "http" ou "https":

(defun flyspell-ignore-http-and-https ()
  "Function used for `flyspell-generic-check-word-predicate' to ignore stuff starting with \"http\" or \"https\"."
  (save-excursion
    (forward-whitespace -1)
    (when (looking-at " ")
        (forward-char)
    (not (looking-at "https?\\b"))))) 

(put 'text-mode 'flyspell-mode-predicate 'flyspell-ignore-http-and-https)

Existem algumas falhas, é claro:

  • Estou assumindo que qualquer coisa que comece com "http" ou "https" deve ser ignorada; que inclui " http://cnn.com " e " https://google.com " (bom), mas também "activationpomatic" e "httpstatisticiansarehip" (presumivelmente ruim)
  • Não estou me incomodando com mailto :, ftp :, file :, etc etc. (Mas dessa maneira pode haver loucura ...)

Mas, como um método rápido e sujo, deve funcionar.

Saint Aardvark, o Carpete
fonte
1

Eu tenho algo nesse sentido (no meu caso para o modo de remarcação) ser um pouco mais resistente a alguns casos comuns, mas patológicos, da resposta de Saint Aardvark, o Carpete:

(require 'thingatpt)
(defun markdown-flyspell-predicate ()
  (not (thing-at-point 'url)))
(put 'markdown-mode 'flyspell-mode-predicate 'markdown-flyspell-predicate)

Em particular, se você começar olhando o espaço em branco antes de uma palavra, o URL não começará necessariamente com https. Considere estes casos:

(/emacs/)
[text text](/emacs/)
\url{/emacs/}
VF1
fonte