-
Notifications
You must be signed in to change notification settings - Fork 5
/
simp-project-files.el
74 lines (59 loc) · 2.31 KB
/
simp-project-files.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
67
68
69
70
71
72
73
74
;;; simp-project-files.el --- Find files in a simp project
;; Copyright (C) 2011 @re5et
;; Author: atom smith
;; URL: https://github.com/re5et/simp
;; Created: 22 Dec 2011
;; Version: 0.1.1
;; Keywords: project grep find
;; This file is NOT part of GNU Emacs.
;; This is free software; you can redistribute it and/or modify it under
;; the terms of the GNU General Public License as published by the Free
;; Software Foundation; either version 3, or (at your option) any later
;; version.
;; This file is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with Emacs; see the file COPYING, or type `C-h C-c'. If not,
;; write to the Free Software Foundation at this address:
;; Free Software Foundation
;; 51 Franklin Street, Fifth Floor
;; Boston, MA 02110-1301
;; USA
;;; Commentary
;; Bind simp-project-find-file to something so you can quickly narrow down
;; files in a project without having to traverse directories. I use:
;; (global-set-key (kbd "C-x M-f") 'simp-project-find-file)
;; You should also customize the variable simp-completing-read if you
;; want to use ido or something else to manage the completion
(require 'simp-project)
(defun simp-project-find-file ()
"find file in project, excluding project's ignored paths,
using the unix find command for speedy results"
(interactive)
(find-file
(format "%s/%s"
(simp-project-root)
(ido-completing-read
"file: "
(simp-project-files)))))
(defun simp-project-files ()
"returns a list of files in a project, excluding project's
ignored paths, using the unix find command for speedy results"
(split-string
(shell-command-to-string
(mapconcat
'identity
`("find"
,(simp-project-root)
"\\("
,(format "-path \\*/%s" (car (simp-project-ignored)))
,(mapconcat (lambda (dir)
(format "-o -path \\*/%s" (symbol-name dir)))
(cdr (simp-project-ignored)) " ")
"\\)"
"-prune -o -type f"
,(format "| sed -E s:'%s/'::" (simp-project-root))
) " "))))
(provide 'simp-project-files)