-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCFileFinder.m
117 lines (109 loc) · 4.33 KB
/
CFileFinder.m
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
classdef CFileFinder
% Maps tab-completion of struct fields to a filesystem.
%
% Usage: (simple demo case)
%
% f = CFileFinder(); % search for directories only in current dir
% f.subdir_1 % evaluates to [pwd '/subdir_1'] and tab-completes
% ======================================================================
% Copyright (c) 2012 David Weiss
%
% Permission is hereby granted, free of charge, to any person obtaining
% a copy of this software and associated documentation files (the
% "Software"), to deal in the Software without restriction, including
% without limitation the rights to use, copy, modify, merge, publish,
% distribute, sublicense, and/or sell copies of the Software, and to
% permit persons to whom the Software is furnished to do so, subject to
% the following conditions:
%
% The above copyright notice and this permission notice shall be
% included in all copies or substantial portions of the Software.
%
% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
% LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
% OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
% WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
% ======================================================================
properties (Hidden = true)
dir
onlydir
root
lookup
end
methods (Hidden = true)
function f = CFileFinder(dir, onlydir)
if nargin < 1
dir = pwd;
end
f.dir = dir;
if nargin < 2
onlydir = true;
end
f.onlydir = onlydir;
if exist(dir, 'dir')
f.root = dir;
else
f.root = fileparts(dir);
end
end
function lookup = get_names(f)
files = dir(f.dir);
lookup = struct;
for i = 1:numel(files)
try
if files(i).isdir
if isequal(files(i).name, '.')==1 || isequal(files(i).name, '..')==1
continue;
end
lookup.(files(i).name) = [files(i).name];
elseif ~f.onlydir
[~, name, ext] = fileparts(files(i).name);
lookup.(name) = [name ext];
end
catch
end
end
end
function fs = fieldnames(f)
fs = fieldnames(get_names(f));
end
function disp(f)
fprintf('CFileFinder finding these files in ''%s'':\n', f.root);
disp(strvcat(fieldnames(get_names(f))));
end
function cd(f)
cd(f.root);
end
function B = subsref(f, S)
if S.type == '.'
lookup = get_names(f);
B = fullfile(f.root, lookup.(S.subs));
end
end
end
end
% ======================================================================
% Copyright (c) 2012 David Weiss
%
% Permission is hereby granted, free of charge, to any person obtaining
% a copy of this software and associated documentation files (the
% "Software"), to deal in the Software without restriction, including
% without limitation the rights to use, copy, modify, merge, publish,
% distribute, sublicense, and/or sell copies of the Software, and to
% permit persons to whom the Software is furnished to do so, subject to
% the following conditions:
%
% The above copyright notice and this permission notice shall be
% included in all copies or substantial portions of the Software.
%
% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
% LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
% OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
% WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
% ======================================================================