Make erc work when subword-mode is switched on
* lisp/erc/erc-backend.el (erc-forward-word, erc-word-at-arg-p) (erc-bounds-of-word-at-point): New functions to do word-based things when subword-mode is switched on. * lisp/erc/erc-button.el (erc-button-add-nickname-buttons): Use them (bug#17558).
This commit is contained in:
parent
255b68f00b
commit
66b315c9c9
2 changed files with 35 additions and 9 deletions
|
@ -474,13 +474,39 @@ Currently this is called by `erc-send-input'."
|
|||
nil t))
|
||||
(split-string (buffer-string) "\n"))))
|
||||
|
||||
(defun erc-forward-word ()
|
||||
"Moves forward one word, ignoring any subword settings. If no
|
||||
subword-mode is active, then this is (forward-word)."
|
||||
(skip-syntax-forward "^w")
|
||||
(> (skip-syntax-forward "w") 0))
|
||||
|
||||
(defun erc-word-at-arg-p (pos)
|
||||
"Reports whether the char after a given POS has word syntax.
|
||||
If POS is out of range, the value is nil."
|
||||
(let ((c (char-after pos)))
|
||||
(if c
|
||||
(eq ?w (char-syntax c))
|
||||
nil)))
|
||||
|
||||
(defun erc-bounds-of-word-at-point ()
|
||||
"Returns the bounds of a word at point, or nil if we're not at
|
||||
a word. If no subword-mode is active, then this
|
||||
is (bounds-of-thing-at-point 'word)."
|
||||
(if (or (erc-word-at-arg-p (point))
|
||||
(erc-word-at-arg-p (1- (point))))
|
||||
(save-excursion
|
||||
(let* ((start (progn (skip-syntax-backward "w") (point)))
|
||||
(end (progn (skip-syntax-forward "w") (point))))
|
||||
(cons start end)))
|
||||
nil))
|
||||
|
||||
;; Used by CTCP functions
|
||||
(defun erc-upcase-first-word (str)
|
||||
"Upcase the first word in STR."
|
||||
(with-temp-buffer
|
||||
(insert str)
|
||||
(goto-char (point-min))
|
||||
(upcase-word 1)
|
||||
(upcase-region (point) (progn (erc-forward-word) (point)))
|
||||
(buffer-string)))
|
||||
|
||||
(defun erc-server-setup-periodical-ping (buffer)
|
||||
|
|
|
@ -300,14 +300,14 @@ specified by `erc-button-alist'."
|
|||
(when (or (eq t form)
|
||||
(eval form))
|
||||
(goto-char (point-min))
|
||||
(while (forward-word 1)
|
||||
(setq bounds (bounds-of-thing-at-point 'word))
|
||||
(setq word (buffer-substring-no-properties
|
||||
(car bounds) (cdr bounds)))
|
||||
(when (or (and (erc-server-buffer-p) (erc-get-server-user word))
|
||||
(and erc-channel-users (erc-get-channel-user word)))
|
||||
(erc-button-add-button (car bounds) (cdr bounds)
|
||||
fun t (list word)))))))
|
||||
(while (erc-forward-word)
|
||||
(when (setq bounds (erc-bounds-of-word-at-point))
|
||||
(setq word (buffer-substring-no-properties
|
||||
(car bounds) (cdr bounds)))
|
||||
(when (or (and (erc-server-buffer-p) (erc-get-server-user word))
|
||||
(and erc-channel-users (erc-get-channel-user word)))
|
||||
(erc-button-add-button (car bounds) (cdr bounds)
|
||||
fun t (list word))))))))
|
||||
|
||||
(defun erc-button-add-buttons-1 (regexp entry)
|
||||
"Search through the buffer for matches to ENTRY and add buttons."
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue