-
Notifications
You must be signed in to change notification settings - Fork 236
/
setup-ffip.el
66 lines (55 loc) · 2.3 KB
/
setup-ffip.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
(require 'find-file-in-project)
(require 's)
;; No need to be stingy
(setq ffip-limit 4096)
;; Use full project path for ffip
(defun ffip-project-files ()
"Return an alist of all filenames in the project and their path."
(let ((file-alist nil))
(mapcar (lambda (file)
(let ((file-cons (cons (s-chop-prefix (file-truename (ffip-project-root)) (expand-file-name file))
(expand-file-name file))))
(add-to-list 'file-alist file-cons)
file-cons))
(split-string (shell-command-to-string
(format "find %s -type f \\( %s \\) %s | head -n %s"
(or ffip-project-root
(ffip-project-root)
(error "No project root found"))
(ffip-join-patterns)
ffip-find-options
ffip-limit))))))
;; Helper methods to create local settings
(defun ffip--create-exclude-find-options (names)
(mapconcat (lambda (name)
(concat "-not -regex \".*" name ".*\"")) names " "))
(defun ffip-local-excludes (&rest names)
"Given a set of names, will exclude results with those names in the path."
(set (make-local-variable 'ffip-find-options)
(ffip--create-exclude-find-options names)))
(defun ffip-local-patterns (&rest patterns)
"An exhaustive list of file name patterns to look for."
(set (make-local-variable 'ffip-patterns) patterns))
;; Function to create new functions that look for a specific pattern
(defun ffip-create-pattern-file-finder (&rest patterns)
(lexical-let ((patterns patterns))
(lambda ()
(interactive)
(let ((ffip-patterns patterns))
(find-file-in-project)))))
;; Default excludes - override with ffip-local-excludes
(setq-default ffip-find-options
(ffip--create-exclude-find-options
'("/node_modules"
"/bower_components"
"/target"
"/out"
"/overlays"
"/build"
"/dist"
"/vendor"
"/.cask"
"/generated"
"/.repl"
"/.tmp")))
(provide 'setup-ffip)