-
Notifications
You must be signed in to change notification settings - Fork 1
/
CFuncEditor.m
101 lines (92 loc) · 3.33 KB
/
CFuncEditor.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
classdef CFuncEditor
% Edit Matlab package files with tab completion.
%
% Usage:
%
% % put in your startup.m:
% pedit = CFuncEditor(src_root_dirs);
%
% % then you can use with tab completion to existing functions:
% pedit.mypackage.func1
% % ^^ opens editor to [src_root_dirs '/+mypackage/func1.m']
% ======================================================================
% 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)
root
end
methods (Hidden = true)
function names = get_names(f)
files = dir(f.root);
names = {};
for i = 1:numel(files)
if ~isempty(strfind(files(i).name, '+'))
names{end+1} = [files(i).name(2:end)];
end
end
end
function fs = fieldnames(f)
fs = get_names(f);
end
function disp(f)
fprintf('Searching packages in ''%s'': %s\n', f.root, strjoin(',',get_names(f)));
end
function cd(f)
cd(f.root);
end
end
methods
function f = CFuncEditor(dir)
if exist(dir, 'dir')
f.root = dir;
else
f.root = fileparts(dir);
end
end
function [varargout] = subsref(f, S)
if numel(S) == 1
if isequal(S.type, '.')
packdir = fullfile(f.root, ['+' S.subs]);
if exist(packdir, 'dir')
varargout{1} = CFileFinder(fullfile(packdir, '*.m'), 0);
end
elseif isequal(S.type, '()')
B = fullfile(f.root, [S.subs{1} '.m']);
if nargout == 0
edit(B);
else
varargout{1} = B;
end
end
else
%B = CFileFinder(fullfile(f.root, ['+' S(1).subs]), 0);
%B = B.(S(2).subs);
B = fullfile(f.root, ['+' S(1).subs], [S(2).subs '.m']);
if nargout == 0
edit(B);
else
varargout{1} = B;
end
end
end
end
end