Function: find-sibling-file

find-sibling-file is an interactive and byte-compiled function defined in files.el.gz.

Signature

(find-sibling-file FILE)

Documentation

Visit a "sibling" file of FILE.

When called interactively, FILE is the currently visited file.

The "sibling" file is defined by the find-sibling-rules variable.

View in manual

Probably introduced at or before Emacs version 29.1.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/files.el.gz
(defun find-sibling-file (file)
  "Visit a \"sibling\" file of FILE.
When called interactively, FILE is the currently visited file.

The \"sibling\" file is defined by the `find-sibling-rules' variable."
  (interactive (progn
                 (unless buffer-file-name
                   (user-error "Not visiting a file"))
                 (list buffer-file-name)))
  (unless find-sibling-rules
    (user-error "The `find-sibling-rules' variable has not been configured"))
  (let ((siblings (find-sibling-file-search (expand-file-name file)
                                            find-sibling-rules)))
    (cond
     ((null siblings)
      (user-error "Couldn't find any sibling files"))
     ((length= siblings 1)
      (find-file (car siblings)))
     (t
      (let ((relatives (mapcar (lambda (sibling)
                                 (file-relative-name
                                  sibling (file-name-directory file)))
                               siblings)))
        (find-file
         (completing-read (format-prompt "Find file" (car relatives))
                          relatives nil t nil nil (car relatives))))))))