Function: find-buffer-visiting

find-buffer-visiting is a byte-compiled function defined in files.el.gz.

Signature

(find-buffer-visiting FILENAME &optional PREDICATE)

Documentation

Return the buffer visiting file FILENAME (a string).

This is like get-file-buffer, except that it checks for any buffer visiting the same file, possibly under a different name. If PREDICATE is non-nil, only buffers satisfying it are eligible, and others are ignored. If there is no such live buffer, return nil.

Aliases

reftex-get-buffer-visiting (obsolete since 28.1) idlwave-get-buffer-visiting (obsolete since 28.1)

Source Code

;; Defined in /usr/src/emacs/lisp/files.el.gz
(defun find-buffer-visiting (filename &optional predicate)
  "Return the buffer visiting file FILENAME (a string).
This is like `get-file-buffer', except that it checks for any buffer
visiting the same file, possibly under a different name.
If PREDICATE is non-nil, only buffers satisfying it are eligible,
and others are ignored.
If there is no such live buffer, return nil."
  (let ((predicate (or predicate #'identity))
        (truename (abbreviate-file-name (file-truename filename))))
    (or (let ((buf (get-file-buffer filename)))
          (when (and buf (funcall predicate buf)) buf))
        (let ((list (buffer-list)) found)
          (while (and (not found) list)
            (with-current-buffer (car list)
              (if (and buffer-file-name
                       (string= buffer-file-truename truename)
                       (funcall predicate (current-buffer)))
                  (setq found (car list))))
            (setq list (cdr list)))
          found)
        (let* ((attributes (file-attributes truename))
               (number (nthcdr 10 attributes))
               (list (buffer-list)) found)
          (and buffer-file-numbers-unique
               (car-safe number)       ;Make sure the inode is not just nil.
               (while (and (not found) list)
                 (with-current-buffer (car list)
                   (if (and buffer-file-name
                            (equal buffer-file-number number)
                            ;; Verify this buffer's file number
                            ;; still belongs to its file.
                            (file-exists-p buffer-file-name)
                            (equal (file-attributes buffer-file-truename)
                                   attributes)
                            (funcall predicate (current-buffer)))
                       (setq found (car list))))
                 (setq list (cdr list))))
          found))))