プログラム系統備忘録ブログ

記事中のコードは自己責任の下でご自由にどうぞ。

EmacsでURLと認識する正規表現を設定

以前の記事

URLの後ろに全角スペースがあってもURLの区切り文字と認識されない。

と書きましたが、これを解決できたのでメモ。

Emacs内部でのURL判別ではthing-at-point-url-regexpを参照しているので、直接それを書き換えます。デフォルト値では色々なプロトコルの後、「[^] \n \"'<>[^`{}]*[^] \n \"'<>[^`{}.,;]+」を使って正規表現判別をしていました。
プロトコルは自分が使いそうなものだけにし、OSDIRを参考に、URLと認識する範囲に全角文字全く含めないようにしました。ついでにhttp://www.bookshelf.jp/soft/meadow_55.html#SEC829を参考に、ttp://表記でも開けるようにしました。

(setq thing-at-point-url-regexp "\\(h?ttps?://\\|ftp://\\)[-~/A-Za-z0-9_.${}#%,:@?%&|=+]+")
(defadvice thing-at-point-url-at-point (after support-omitted-h activate)
  (when (and ad-return-value (string-match "\\`ttps?://" ad-return-value))
    (setq ad-return-value (concat "h" ad-return-value))))

自分の環境では上のものでうまく行きましたが、環境によってはeval-after-loadにしたほうが確実かもしれません。