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)))))