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)
(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."