;;; find-file.el --- find a file corresponding to this one given a pattern
;; Author: Henry Guillaume <henri@tibco.com, henry@c032.aone.net.au>
-;; Maintainer: FSF
+;; Maintainer: emacs-devel@gnu.org
;; Keywords: c, matching, tools
-;; Copyright (C) 1994-1995, 2001-2012 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2001-2014 Free Software Foundation, Inc.
;; This file is part of GNU Emacs.
("\\.hh\\'" (".cc" ".C"))
("\\.c\\'" (".h"))
- ("\\.h\\'" (".c" ".cc" ".C" ".CC" ".cxx" ".cpp"))
+ ("\\.m\\'" (".h"))
+ ("\\.h\\'" (".c" ".cc" ".C" ".CC" ".cxx" ".cpp" ".m"))
("\\.C\\'" (".H" ".hh" ".h"))
("\\.H\\'" (".C" ".CC"))
since the search algorithm searches sequentially through each directory
specified in `ff-search-directories'. If a file is not found, a new one
is created with the first matching extension (`.cc' yields `.hh')."
+ :version "24.4" ; add .m
:type '(repeat (list regexp (choice (repeat string) function)))
:group 'ff)
stub ;; name of the file without extension
alist ;; working copy of the list of file extensions
pathname ;; the pathname of the file or the #include line
- default-name ;; file we should create if none found
format ;; what we have to match
found ;; name of the file or buffer found - nil if none
- dirs ;; local value of ff-search-directories
- no-match) ;; whether we know about this kind of file
+ dirs) ;; local value of ff-search-directories
(message "Working...")
(cond
((and (not ff-ignore-include) fname)
- (setq default-name fname)
(setq found (ff-get-file-name dirs fname nil)))
;; let's just get the corresponding file
"/none.none"))
(setq fname (file-name-nondirectory pathname)
- no-match nil
match (car alist))
;; find the table entry corresponding to this file
(setq pos (ff-string-match (car match) fname)))
;; no point going on if we haven't found anything
- (if (not match)
- (setq no-match t)
+ (when match
;; otherwise, suffixes contains what we need
(setq suffixes (car (cdr match))
(progn
(setq suffixes (funcall action (buffer-file-name))
match (cons (car match) (list suffixes))
- stub nil
- default-name (car suffixes)))
+ stub nil))
;; otherwise build our filename stub
(cond
(setq format (concat "\\(.+\\)" (car match)))
(string-match format fname)
(setq stub (substring fname (match-beginning 1) (match-end 1)))
- ))
-
- ;; if we find nothing, we should try to get a file like this one
- (setq default-name
- (concat stub (car (car (cdr match))))))
+ )))
;; do the real work - find the file
(setq found
(setq buf (buffer-name (car blist)))
(while (and blist (not found))
- (if (string-match (concat filename "<[0-9]+>") buf)
+ (if (string-match-p (concat filename "<[0-9]+>") buf)
(setq found (buffer-file-name (car blist))))
(setq blist (cdr blist))
"Get all the directory files under directory HERE.
Exclude all files in the optional EXCLUDE list."
(if (file-directory-p here)
- (condition-case nil
- (progn
- (let ((files (directory-files here t))
- (dirlist (list))
- file)
- (while files
- (setq file (car files))
- (if (and
- (file-directory-p file)
- (not (member (ff-basename file) exclude)))
- (setq dirlist (cons file dirlist)))
- (setq files (cdr files)))
- (setq dirlist (reverse dirlist))))
- (error nil))
+ (ignore-errors
+ (let ((files (directory-files here t))
+ (dirlist (list))
+ file)
+ (while files
+ (setq file (car files))
+ (if (and
+ (file-directory-p file)
+ (not (member (ff-basename file) exclude)))
+ (setq dirlist (cons file dirlist)))
+ (setq files (cdr files)))
+ (setq dirlist (reverse dirlist))))
nil))
(defun ff-switch-file (f1 f2 file &optional in-other-window new-file)
Build up a new file list based possibly on part of the directory name
and the name of the file passed in."
(ff-string-match "\\(.*\\)/\\([^/]+\\)/\\([^.]+\\).\\([^/]+\\)$" arg)
- (let ((path (if (match-beginning 1)
- (substring arg (match-beginning 1) (match-end 1)) nil))
- (dire (if (match-beginning 2)
+ (let ((dire (if (match-beginning 2)
(substring arg (match-beginning 2) (match-end 2)) nil))
(file (if (match-beginning 3)
(substring arg (match-beginning 3) (match-end 3)) nil))