Function: viper-find-char
viper-find-char is a byte-compiled function defined in
viper-cmd.el.gz.
Signature
(viper-find-char ARG CHAR FORWARD OFFSET)
Source Code
;; Defined in /usr/src/emacs/lisp/emulation/viper-cmd.el.gz
;; Find ARG's occurrence of CHAR on the current line.
;; If FORWARD then search is forward, otherwise backward. OFFSET is used to
;; adjust point after search.
(defun viper-find-char (arg char forward offset)
(or (char-or-string-p char) (user-error viper-ViperBell))
(let ((arg (if forward arg (- arg)))
(cmd (if (eq viper-intermediate-command 'viper-repeat)
(nth 5 viper-d-com)
(viper-array-to-string (this-command-keys))))
point region-beg region-end)
(save-excursion
(save-restriction
(if (> arg 0) ; forward
(progn
(setq region-beg (point))
(if viper-allow-multiline-replace-regions
(viper-forward-paragraph 1)
(end-of-line))
(setq region-end (point)))
(setq region-end (point))
(if viper-allow-multiline-replace-regions
(viper-backward-paragraph 1)
(beginning-of-line))
(setq region-beg (point)))
(if (or (and (< arg 0)
(< (- region-end region-beg)
(if viper-allow-multiline-replace-regions
2 1))
(bolp))
(and (> arg 0)
(< (- region-end region-beg)
(if viper-allow-multiline-replace-regions
3 2))
(eolp)))
(error "Command `%s': At %s of %s"
cmd
(if (> arg 0) "end" "beginning")
(if viper-allow-multiline-replace-regions
"paragraph" "line")))
(narrow-to-region region-beg region-end)
;; if arg > 0, point is forwarded before search.
(if (> arg 0) (goto-char (1+ (point-min)))
(goto-char (point-max)))
(if (let ((case-fold-search nil))
(search-forward (char-to-string char) nil 0 arg))
(setq point (point))
(error "Command `%s': `%c' not found" cmd char))))
(goto-char point)
(if (> arg 0)
(backward-char (if offset 2 1))
(forward-char (if offset 1 0)))))