Function: ex-next-related-buffer

ex-next-related-buffer is a byte-compiled function defined in viper-ex.el.gz.

Signature

(ex-next-related-buffer DIRECTION &optional NO-RECURSION)

Source Code

;; Defined in /usr/src/emacs/lisp/emulation/viper-ex.el.gz
(defun ex-next-related-buffer (direction &optional no-recursion)

  (viper-ring-rotate1 viper-related-files-and-buffers-ring direction)

  (let ((file-or-buffer-name
	 (viper-current-ring-item viper-related-files-and-buffers-ring))
	(old-ring viper-related-files-and-buffers-ring)
	(old-win (selected-window))
	skip-rest buf wind)

    (or (and (ring-p viper-related-files-and-buffers-ring)
	     (> (ring-length viper-related-files-and-buffers-ring) 0))
	(error "This buffer has no related files or buffers"))

    (or (stringp file-or-buffer-name)
	(error
	 "File and buffer names must be strings, %S" file-or-buffer-name))

    (setq buf (cond ((get-buffer file-or-buffer-name))
		    ((file-exists-p file-or-buffer-name)
		     (find-file-noselect file-or-buffer-name))
		    ))

    (if (not (viper-buffer-live-p buf))
	(error "Didn't find buffer %S or file %S"
	       file-or-buffer-name
	       (abbreviate-file-name
		(expand-file-name file-or-buffer-name))))

    (if (equal buf (current-buffer))
	(or no-recursion
	    ;; try again
	    (progn
	      (setq skip-rest t)
	      (ex-next-related-buffer direction 'norecursion))))

    (if skip-rest
	()
      ;; setup buffer
      (if (setq wind (get-buffer-window buf 'visible))
	  ()
	(setq wind (get-lru-window 'visible))
	(set-window-buffer wind buf))

      (if (viper-window-display-p)
	  (progn
	    (raise-frame (window-frame wind))
	    (if (equal (window-frame wind) (window-frame old-win))
		(save-window-excursion (select-window wind) (sit-for 1))
	      (select-window wind)))
	(save-window-excursion (select-window wind) (sit-for 1)))

      (with-current-buffer buf
	(setq viper-related-files-and-buffers-ring old-ring))

      (setq viper-local-search-start-marker (point-marker))
      )))