Function: viper-search

viper-search is a byte-compiled function defined in viper-cmd.el.gz.

Signature

(viper-search STRING FORWARD ARG &optional NO-OFFSET INIT-POINT FAIL-IF-NOT-FOUND)

Source Code

;; Defined in /usr/src/emacs/lisp/emulation/viper-cmd.el.gz
;; Search for COUNT's occurrence of STRING.
;; Search is forward if FORWARD is non-nil, otherwise backward.
;; INIT-POINT is the position where search is to start.
;; Arguments:
;;   (STRING FORW COUNT &optional NO-OFFSET INIT-POINT LIMIT FAIL-IF-NOT-FOUND)
(defun viper-search (string forward arg
			    &optional no-offset init-point fail-if-not-found)
  (if (not (equal string ""))
    (let ((val (viper-p-val arg))
	  (com (viper-getcom arg))
	  (offset (not no-offset))
	  (case-fold-search viper-case-fold-search)
	  (start-point (or init-point (point))))
      (deactivate-mark)
      (if forward
	  (condition-case nil
	      (progn
                (if offset (viper-forward-char-carefully))
                (if viper-re-search
		    (progn
		      (re-search-forward string nil nil val)
		      (re-search-backward string))
		  (search-forward string nil nil val)
		  (search-backward string))
		(if (not (equal start-point (point)))
		    (push-mark start-point t)))
	    (search-failed
	     (if (and (not fail-if-not-found) viper-search-wrap-around)
                 (progn
		   (message "Search wrapped around BOTTOM of buffer")
		   (goto-char (point-min))
		   (viper-search string forward (cons 1 com) t start-point 'fail)
		   ;; don't wait in macros
		   (or executing-kbd-macro
		       (memq viper-intermediate-command
			     '(viper-repeat
			       viper-digit-argument
			       viper-command-argument))
		       (sit-for 2))
		   ;; delete the wrap-around message
		   (message "")
		   )
	       (goto-char start-point)
	       (error "`%s': %s not found"
		      string
		      (if viper-re-search "Pattern" "String"))
	       )))
	;; backward
        (condition-case nil
	    (progn
	      (if viper-re-search
		  (re-search-backward string nil nil val)
                (search-backward string nil nil val))
	      (if (not (equal start-point (point)))
		  (push-mark start-point t)))
	  (search-failed
	   (if (and (not fail-if-not-found) viper-search-wrap-around)
	       (progn
		 (message "Search wrapped around TOP of buffer")
                 (goto-char (point-max))
                 (viper-search string forward (cons 1 com) t start-point 'fail)
		 ;; don't wait in macros
		 (or executing-kbd-macro
		     (memq viper-intermediate-command
			   '(viper-repeat
			     viper-digit-argument
			     viper-command-argument))
		     (sit-for 2))
		 ;; delete the wrap-around message
		 (message "")
		 )
	     (goto-char start-point)
	     (error "`%s': %s not found"
		    string
		    (if viper-re-search "Pattern" "String"))
	     ))))
      ;; pull up or down if at top/bottom of window
      (viper-adjust-window)
      ;; highlight the result of search
      ;; don't wait and don't highlight in macros
      (or executing-kbd-macro
	  (memq viper-intermediate-command
		'(viper-repeat viper-digit-argument viper-command-argument))
	  (viper-flash-search-pattern))
      )))