From 19e6cd8b04ecdb34c6f7e227332a90ede4cc84d6 Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Mon, 18 Nov 2019 10:24:48 -0500 Subject: [PATCH v3] Improve ERC's matching of nicks and URLs (bug#38257) * lisp/erc/erc-{button,match}.el (erc-{button,match}-syntax-table): Omit (, ), and '; as they're not valid nick characters, per RFC 2812 section 2.3.1. This enables correct matching/highlighting of nicks when they're surrounded by parens, like (nick), and when adjacent to an apostrophe, like nick's. * lisp/erc/erc-button.el (erc-button-url-regexp): Use the regexp from browse-url-button-regexp, which among other things, seems to handle surrounding pair of parens better. --- etc/NEWS | 12 ++++++++++++ lisp/erc/erc-button.el | 11 +++-------- lisp/erc/erc-match.el | 3 --- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 6d4a6119af..02d9135571 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1569,6 +1569,18 @@ and its value has been changed to Duck Duck Go. The user option to use instead to alter text to be sent is now 'erc-pre-send-functions'. +--- +*** Improve matching/highlighting of nicknames +Open and close parenthesis and apostrophe are not considered valid +nick characters anymore, matching the given grammar in RFC 2812 +section 2.3.1. This enables correct matching and highlighting of +nicks when they are surrounded by parentheses, like (nick), and when +adjacent to an apostrophe, like nick's. + +--- +*** Set 'erc-button-url-regexp' to 'browse-url-button-regexp' +which better handles surrounding pair of parentheses. + ** EUDC --- diff --git a/lisp/erc/erc-button.el b/lisp/erc/erc-button.el index 6e30b3a793..e4f5a19091 100644 --- a/lisp/erc/erc-button.el +++ b/lisp/erc/erc-button.el @@ -41,6 +41,7 @@ (require 'erc) (require 'wid-edit) (require 'erc-fill) +(require 'browse-url) ;;; Minor Mode @@ -87,12 +88,9 @@ erc-button-mouse-face :type 'face :group 'erc-faces) -(defcustom erc-button-url-regexp - (concat "\\(www\\.\\|\\(s?https?\\|" - "ftp\\|file\\|gopher\\|news\\|telnet\\|wais\\|mailto\\):\\)" - "\\(//[-a-zA-Z0-9_.]+:[0-9]*\\)?" - "[-a-zA-Z0-9_=!?#$@~`%&*+\\/:;.,()]+[-a-zA-Z0-9_=#$@~`%&*+\\/()]") +(defcustom erc-button-url-regexp browse-url-button-regexp "Regular expression that matches URLs." + :version "27.1" :group 'erc-button :type 'regexp) @@ -223,14 +221,11 @@ erc-button-keymap (defvar erc-button-syntax-table (let ((table (make-syntax-table))) - (modify-syntax-entry ?\( "w" table) - (modify-syntax-entry ?\) "w" table) (modify-syntax-entry ?\[ "w" table) (modify-syntax-entry ?\] "w" table) (modify-syntax-entry ?\{ "w" table) (modify-syntax-entry ?\} "w" table) (modify-syntax-entry ?` "w" table) - (modify-syntax-entry ?' "w" table) (modify-syntax-entry ?^ "w" table) (modify-syntax-entry ?- "w" table) (modify-syntax-entry ?_ "w" table) diff --git a/lisp/erc/erc-match.el b/lisp/erc/erc-match.el index 7a824cce9f..8b9ab33128 100644 --- a/lisp/erc/erc-match.el +++ b/lisp/erc/erc-match.el @@ -246,14 +246,11 @@ erc-match-exclude-server-buffer ;; just put it in erc.el (defvar erc-match-syntax-table (let ((table (make-syntax-table))) - (modify-syntax-entry ?\( "w" table) - (modify-syntax-entry ?\) "w" table) (modify-syntax-entry ?\[ "w" table) (modify-syntax-entry ?\] "w" table) (modify-syntax-entry ?\{ "w" table) (modify-syntax-entry ?\} "w" table) (modify-syntax-entry ?` "w" table) - (modify-syntax-entry ?' "w" table) (modify-syntax-entry ?^ "w" table) (modify-syntax-entry ?- "w" table) (modify-syntax-entry ?_ "w" table) -- 2.23.0