Jak sprawić, by Flyspell ignorował adresy URL?

14

Kiedy używam flyspell-mode, zgłasza błędy ortograficzne przy każdym wpisywaniu adresu URL. Czy istnieje sposób, aby powiedzieć Flyspell, aby przestał sprawdzać adresy URL?

Matthew Piziak
źródło
1
W przypadku ispell(nie flyspell) tego częściowo powiązanego linku, dotyczącego ispell-skip-region-alist, wydaje się pomocny: superuser.com/a/345461/206164 Być może flyspellma coś podobnego, co można zaimplementować - np flyspell-mode-predicate. Za pomocą .
prawnik

Odpowiedzi:

11

Po odrobinie kopania znalazłem podpowiedź w [tej odpowiedzi Superuser.com : musisz ustawić flyspell-mode-predicatefunkcję, która zdecyduje, czy słowa powinny zostać sprawdzone, czy nie. Oto sposób, aby Flyspell ignorował wszystko zaczynające się od „http” lub „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)

Oczywiście istnieją pewne niedociągnięcia:

  • Zakładam, że wszystko, co zaczyna się od „http” lub „https”, powinno zostać pominięte; obejmuje to „ http://cnn.com ” i „ https://google.com ” (dobre), ale także „httpomatic” i „httpstatisticiansarehip” (przypuszczalnie złe)
  • Nie przejmuję się mailto :, ftp :, file :, itd. Itd. (Ale w ten sposób może leżeć szaleństwo ...)

Ale jako szybka i brudna metoda powinna działać.

Święty Aardvark Wykładzina
źródło
1

Mam coś w tym stylu (w moim przypadku dla trybu przeceny), aby być nieco bardziej odpornym na niektóre powszechne, ale patologiczne przypadki odpowiedzi Świętego Aardwarka Wykładziny:

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

W szczególności, jeśli zaczniesz od spojrzenia na spację przed słowem, adres URL niekoniecznie zacznie się od https. Rozważ te przypadki:

(/emacs/)
[text text](/emacs/)
\url{/emacs/}
VF1
źródło