Function: eshell-find-delimiter

eshell-find-delimiter is a byte-compiled function defined in esh-util.el.gz.

Signature

(eshell-find-delimiter OPEN CLOSE &optional BOUND REVERSE-P BACKSLASH-P)

Documentation

From point, find the CLOSE delimiter corresponding to OPEN.

The matching is bounded by BOUND. If REVERSE-P is non-nil, process the region backwards. If BACKSLASH-P is non-nil, and OPEN and CLOSE are the same character, then quoting is done by a backslash, rather than a doubled delimiter.

Source Code

;; Defined in /usr/src/emacs/lisp/eshell/esh-util.el.gz
(defun eshell-find-delimiter
  (open close &optional bound reverse-p backslash-p)
  "From point, find the CLOSE delimiter corresponding to OPEN.
The matching is bounded by BOUND.
If REVERSE-P is non-nil, process the region backwards.
If BACKSLASH-P is non-nil, and OPEN and CLOSE are the same character,
then quoting is done by a backslash, rather than a doubled delimiter."
  (save-excursion
    (let ((depth 1)
	  (bound (or bound (point-max))))
      (if (if reverse-p
	      (eq (char-before) close)
	    (eq (char-after) open))
	  (forward-char (if reverse-p -1 1)))
      (while (and (> depth 0)
		  (funcall (if reverse-p '> '<) (point) bound))
	(let ((c (if reverse-p (char-before) (char-after))) nc)
	  (cond ((and (not reverse-p)
		      (or (not (eq open close))
			  backslash-p)
		      (eq c ?\\)
		      (setq nc (char-after (1+ (point))))
		      (or (eq nc open) (eq nc close)))
		 (forward-char 1))
		((and reverse-p
		      (or (not (eq open close))
			  backslash-p)
		      (or (eq c open) (eq c close))
		      (eq (char-before (1- (point)))
			  ?\\))
		 (forward-char -1))
		((eq open close)
		 (if (eq c open)
		     (if (and (not backslash-p)
			      (eq (if reverse-p
				      (char-before (1- (point)))
				    (char-after (1+ (point)))) open))
			 (forward-char (if reverse-p -1 1))
		       (setq depth (1- depth)))))
		((= c open)
		 (setq depth (+ depth (if reverse-p -1 1))))
		((= c close)
		 (setq depth (+ depth (if reverse-p 1 -1))))))
	(forward-char (if reverse-p -1 1)))
      (if (= depth 0)
	  (if reverse-p (point) (1- (point)))))))