Function: viper-skip-syntax
viper-skip-syntax is a byte-compiled function defined in
viper-util.el.gz.
Signature
(viper-skip-syntax DIRECTION SYNTAX ADDL-CHARS &optional LIMIT)
Source Code
;; Defined in /usr/src/emacs/lisp/emulation/viper-util.el.gz
;; Skip SYNTAX like skip-syntax-* and ADDL-CHARS like skip-chars-*
;; Return the number of chars traveled.
;; Both SYNTAX or ADDL-CHARS can be strings or lists of characters.
;; When SYNTAX is "w", then viper-non-word-characters are not considered to be
;; words, even if Emacs syntax table says they are.
(defun viper-skip-syntax (direction syntax addl-chars &optional limit)
(let ((total 0)
(local 1)
(skip-chars-func
(if (eq direction 'forward)
'skip-chars-forward 'skip-chars-backward))
(skip-syntax-func
(if (eq direction 'forward)
'viper-forward-char-carefully 'viper-backward-char-carefully))
char-looked-at syntax-of-char-looked-at negated-syntax)
(setq addl-chars
(cond ((listp addl-chars) (viper-charlist-to-string addl-chars))
((stringp addl-chars) addl-chars)
(t "")))
(setq syntax
(cond ((listp syntax) syntax)
((stringp syntax) (viper-string-to-list syntax))
(t nil)))
(if (memq ?^ syntax) (setq negated-syntax t))
(while (and (not (= local 0))
(cond ((eq direction 'forward)
(not (eobp)))
(t (not (bobp)))))
(setq char-looked-at (viper-char-at-pos direction)
;; if outside the range, set to nil
syntax-of-char-looked-at (if char-looked-at
(char-syntax char-looked-at)))
(setq local
(+ (if (and
(cond ((and limit (eq direction 'forward))
(< (point) limit))
(limit ; backward & limit
(> (point) limit))
(t t)) ; no limit
;; char under/before cursor has appropriate syntax
(if negated-syntax
(not (memq syntax-of-char-looked-at syntax))
(memq syntax-of-char-looked-at syntax))
;; if char-syntax class is "word", make sure it is not one
;; of the excluded characters
(if (and (eq syntax-of-char-looked-at ?w)
(not negated-syntax))
(not (viper-memq-char
char-looked-at viper-non-word-characters))
t))
(funcall skip-syntax-func 1)
0)
(funcall skip-chars-func addl-chars limit)))
(setq total (+ total local)))
total
))