Function: gnus-group-name-at-point

gnus-group-name-at-point is a byte-compiled function defined in gnus-group.el.gz.

Signature

(gnus-group-name-at-point)

Documentation

Return a group name from around point if it exists, or nil.

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/gnus-group.el.gz
(defun gnus-group-name-at-point ()
  "Return a group name from around point if it exists, or nil."
  (if (derived-mode-p 'gnus-group-mode)
      (gnus-group-group-name)
    ;; FIXME: Use rx.
    (let ((regexp "[][\C-@-\t\v-*,/:-@\\^`{-\C-?]*\
\\(nn[a-z]+\\(?:\\+[^][\C-@-*,/:-@\\^`{-\C-?]+\\)?:\
[^][\C-@-*,./:-@\\^`{-\C-?]+\\(?:\\.[^][\C-@-*,./:-@\\^`{-\C-?]+\\)*\
\\|[^][\C-@-*,./:-@\\^`{-\C-?]+\\(?:\\.[^][\C-@-*,./:-@\\^`{-\C-?]+\\)+\\)")
	  (start (point))
	  (case-fold-search nil))
      (prog1
	  (if (or (and (not (or (eobp)
				(looking-at "[][\C-@-*,/;-@\\^`{-\C-?]")))
		       (prog1 t
			 (skip-chars-backward "^][\C-@-\t\v-*,/;-@\\^`{-\C-?"
                                              (line-beginning-position))))
		  (and (looking-at "[][\C-@-\t\v-*,/;-@\\^`{-\C-?]*$")
		       (prog1 t
			 (skip-chars-backward "][\C-@-\t\v-*,/;-@\\^`{-\C-?")
			 (skip-chars-backward "^][\C-@-\t\v-*,/;-@\\^`{-\C-?"
                                              (line-beginning-position))))
		  (string-match "\\`[][\C-@-\t\v-*,/;-@\\^`{-\C-?]*\\'"
                                (buffer-substring (line-beginning-position) (point))))
	      (when (looking-at regexp)
		(match-string 1))
	    (let (group distance)
	      (when (looking-at regexp)
		(setq group (match-string 1)
		      distance (- (match-beginning 1) (match-beginning 0))))
	      (skip-chars-backward "][\C-@-\t\v-*,/;-@\\^`{-\C-?")
	      (skip-chars-backward "^][\C-@-\t\v-*,/;-@\\^`{-\C-?"
                                   (line-beginning-position))
	      (if (looking-at regexp)
		  (if (and group (<= distance (- start (match-end 0))))
		      group
		    (match-string 1))
		group)))
	(goto-char start)))))