Mercurial > hg > octave-nkf
annotate scripts/miscellaneous/edit.m @ 12212:f1ab2a12b4f4
Add S_ISSOCK function to documentation.
author | Rik <octave@nomad.inbox5.com> |
---|---|
date | Sat, 29 Jan 2011 21:38:33 -0800 |
parents | c37f167a816a |
children | 2dbac27e0e40 |
rev | line source |
---|---|
11523 | 1 ## Copyright (C) 2001-2011 Paul Kienzle |
7325 | 2 ## |
3 ## This file is part of Octave. | |
4 ## | |
5 ## Octave is free software; you can redistribute it and/or modify it | |
6 ## under the terms of the GNU General Public License as published by | |
7 ## the Free Software Foundation; either version 3 of the License, or (at | |
8 ## your option) any later version. | |
9 ## | |
10 ## Octave is distributed in the hope that it will be useful, but | |
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 ## General Public License for more details. | |
14 ## | |
15 ## You should have received a copy of the GNU General Public License | |
16 ## along with Octave; see the file COPYING. If not, see | |
17 ## <http://www.gnu.org/licenses/>. | |
18 | |
19 ## -*- texinfo -*- | |
9724
f22bbc5d56e9
Fix various incorrect usages of TeXinfo deffn and deftypefn macros
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
20 ## @deftypefn {Command} {} edit @var{name} |
f22bbc5d56e9
Fix various incorrect usages of TeXinfo deffn and deftypefn macros
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
21 ## @deftypefnx {Command} {} edit @var{field} @var{value} |
7650 | 22 ## @deftypefnx {Command} {@var{value} =} edit get @var{field} |
7325 | 23 ## Edit the named function, or change editor settings. |
24 ## | |
25 ## If @code{edit} is called with the name of a file or function as | |
26 ## its argument it will be opened in a text editor. | |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
27 ## |
7325 | 28 ## @itemize @bullet |
29 ## @item | |
30 ## If the function @var{name} is available in a file on your path and | |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
31 ## that file is modifiable, then it will be edited in place. If it |
7325 | 32 ## is a system function, then it will first be copied to the directory |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
33 ## @env{HOME} (see further down) and then edited. |
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
34 ## If no file is found, then the m-file |
9038
fca0dc2fb042
Cleanup documentation files stmt.texi and func.texi
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
35 ## variant, ending with ".m", will be considered. If still no file |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
36 ## is found, then variants with a leading "@@" and then with both a |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
37 ## leading "@@" and trailing ".m" will be considered. |
7325 | 38 ## |
39 ## @item | |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
40 ## If @var{name} is the name of a function defined in the interpreter but |
10793
be55736a0783
Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
41 ## not in an m-file, then an m-file will be created in @env{HOME} |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
42 ## to contain that function along with its current definition. |
7325 | 43 ## |
44 ## @item | |
45 ## If @code{name.cc} is specified, then it will search for @code{name.cc} | |
46 ## in the path and try to modify it, otherwise it will create a new | |
10793
be55736a0783
Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
47 ## @file{.cc} file in @env{HOME}. If @var{name} happens to be an |
7325 | 48 ## m-file or interpreter defined function, then the text of that |
49 ## function will be inserted into the .cc file as a comment. | |
50 ## | |
51 ## @item | |
9038
fca0dc2fb042
Cleanup documentation files stmt.texi and func.texi
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
52 ## If @var{name.ext} is on your path then it will be edited, otherwise |
7325 | 53 ## the editor will be started with @file{HOME/name.ext} as the |
54 ## filename. If @file{name.ext} is not modifiable, it will be copied to | |
10793
be55736a0783
Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents:
10635
diff
changeset
|
55 ## @env{HOME} before editing. |
7325 | 56 ## |
57 ## @strong{WARNING!} You may need to clear name before the new definition | |
58 ## is available. If you are editing a .cc file, you will need | |
59 ## to mkoctfile @file{name.cc} before the definition will be available. | |
60 ## @end itemize | |
61 ## | |
62 ## If @code{edit} is called with @var{field} and @var{value} variables, | |
63 ## the value of the control field @var{field} will be @var{value}. | |
64 ## If an output argument is requested and the first argument is @code{get} | |
65 ## then @code{edit} will return the value of the control field @var{field}. | |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
66 ## If the control field does not exist, edit will return a structure |
9038
fca0dc2fb042
Cleanup documentation files stmt.texi and func.texi
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
67 ## containing all fields and values. Thus, @code{edit get all} returns |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
68 ## a complete control structure. |
7325 | 69 ## The following control fields are used: |
70 ## | |
71 ## @table @samp | |
72 ## @item editor | |
73 ## This is the editor to use to modify the functions. By default it uses | |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
74 ## Octave's @env{EDITOR} built-in function, which comes from |
7325 | 75 ## @code{getenv("EDITOR")} and defaults to @code{emacs}. Use @code{%s} |
76 ## In place of the function name. For example, | |
77 ## @table @samp | |
78 ## @item [EDITOR, " %s"] | |
79 ## Use the editor which Octave uses for @code{bug_report}. | |
10821
693e22af08ae
Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
80 ## |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
81 ## @item "xedit %s &" |
7325 | 82 ## pop up simple X11 editor in a separate window |
10821
693e22af08ae
Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
83 ## |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
84 ## @item "gnudoit -q \"(find-file \\\"%s\\\")\"" |
7325 | 85 ## Send it to current Emacs; must have @code{(gnuserv-start)} in @file{.emacs}. |
86 ## @end table | |
87 ## | |
8795
bb38a86efa1b
improve documentation for edit.m
Ivan Sutoris <ivan.sutoris@gmail.com>
parents:
8746
diff
changeset
|
88 ## See also field 'mode', which controls how the editor is run by Octave. |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
89 ## |
9038
fca0dc2fb042
Cleanup documentation files stmt.texi and func.texi
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
90 ## On Cygwin, you will need to convert the Cygwin path to a Windows |
10821
693e22af08ae
Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
91 ## path if you are using a native Windows editor. For example: |
693e22af08ae
Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
92 ## @c Set example in small font to prevent overfull line in TeX |
693e22af08ae
Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
93 ## |
9153
5247e89688e1
Eliminate most overfull errors when running texi2pdf for generating pdf documentation
Rik <rdrider0-list@yahoo.com>
parents:
9038
diff
changeset
|
94 ## @smallexample |
10821
693e22af08ae
Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
95 ## @exdent '"C:/Program Files/Good Editor/Editor.exe" "$(cygpath -wa %s)"' |
9153
5247e89688e1
Eliminate most overfull errors when running texi2pdf for generating pdf documentation
Rik <rdrider0-list@yahoo.com>
parents:
9038
diff
changeset
|
96 ## @end smallexample |
7325 | 97 ## |
98 ## @item home | |
9038
fca0dc2fb042
Cleanup documentation files stmt.texi and func.texi
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
99 ## This is the location of user local m-files. Be be sure it is in your |
fca0dc2fb042
Cleanup documentation files stmt.texi and func.texi
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
100 ## path. The default is @file{~/octave}. |
7325 | 101 ## |
102 ## @item author | |
103 ## This is the name to put after the "## Author:" field of new functions. | |
104 ## By default it guesses from the @code{gecos} field of password database. | |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
105 ## |
7325 | 106 ## @item email |
107 ## This is the e-mail address to list after the name in the author field. | |
108 ## By default it guesses @code{<$LOGNAME@@$HOSTNAME>}, and if @code{$HOSTNAME} | |
109 ## is not defined it uses @code{uname -n}. You probably want to override this. | |
110 ## Be sure to use @code{<user@@host>} as your format. | |
111 ## | |
112 ## @item license | |
113 ## @table @samp | |
114 ## @item gpl | |
115 ## GNU General Public License (default). | |
10821
693e22af08ae
Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
116 ## |
7325 | 117 ## @item bsd |
118 ## BSD-style license without advertising clause. | |
10821
693e22af08ae
Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
119 ## |
7325 | 120 ## @item pd |
121 ## Public domain. | |
10821
693e22af08ae
Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
122 ## |
7325 | 123 ## @item "text" |
124 ## Your own default copyright and license. | |
125 ## @end table | |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
126 ## |
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
127 ## Unless you specify @samp{pd}, edit will prepend the copyright statement |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
128 ## with "Copyright (C) yyyy Function Author". |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
129 ## |
7325 | 130 ## @item mode |
131 ## This value determines whether the editor should be started in async mode | |
8795
bb38a86efa1b
improve documentation for edit.m
Ivan Sutoris <ivan.sutoris@gmail.com>
parents:
8746
diff
changeset
|
132 ## (editor is started in the background and Octave continues) or sync mode |
9038
fca0dc2fb042
Cleanup documentation files stmt.texi and func.texi
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
133 ## (Octave waits until the editor exits). Set it to "async" to start the editor |
fca0dc2fb042
Cleanup documentation files stmt.texi and func.texi
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
134 ## in async mode. The default is "sync" (see also "system"). |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
135 ## |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
136 ## @item editinplace |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
137 ## Determines whether files should be edited in place, without regard to |
9038
fca0dc2fb042
Cleanup documentation files stmt.texi and func.texi
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
138 ## whether they are modifiable or not. The default is @code{false}. |
7325 | 139 ## @end table |
140 ## @end deftypefn | |
141 | |
142 ## Author: Paul Kienzle <pkienzle@users.sf.net> | |
143 | |
144 ## Original version by Paul Kienzle distributed as free software in the | |
145 ## public domain. | |
146 | |
147 function ret = edit (file, state) | |
148 | |
149 ## Pick up globals or default them. | |
150 | |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
151 persistent FUNCTION = struct ("EDITOR", cstrcat (EDITOR (), " %s"), |
10549 | 152 "HOME", fullfile (default_home, "octave"), |
153 "AUTHOR", default_user(1), | |
154 "EMAIL", [], | |
155 "LICENSE", "GPL", | |
12207
c37f167a816a
edit.m: As most editors open their own window, change mode to "async".
Ben Abbott <bpabbott@mac.com>
parents:
11587
diff
changeset
|
156 "MODE", "async", |
10549 | 157 "EDITINPLACE", false); |
8506 | 158 ## Make sure the state variables survive "clear functions". |
159 mlock; | |
7325 | 160 |
161 if (nargin == 2) | |
162 switch (toupper (file)) | |
163 case "EDITOR" | |
164 FUNCTION.EDITOR = state; | |
165 case "HOME" | |
166 if (! isempty (state) && state(1) == "~") | |
10549 | 167 state = [ default_home, state(2:end) ]; |
7325 | 168 endif |
169 FUNCTION.HOME = state; | |
170 case "AUTHOR" | |
171 FUNCTION.AUTHOR = state; | |
172 case "EMAIL" | |
173 FUNCTION.EMAIL = state; | |
174 case "LICENSE" | |
175 FUNCTION.LICENSE = state; | |
176 case "MODE" | |
177 if (strcmp (state, "sync") || strcmp (state, "async")) | |
178 FUNCTION.MODE = state; | |
179 else | |
10635
d1978e7364ad
Print name of function in error() string messages.
Rik <octave@nomad.inbox5.com>
parents:
10549
diff
changeset
|
180 error('edit: expected "edit MODE sync|async"'); |
7325 | 181 endif |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
182 case "EDITINPLACE" |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
183 if (ischar (state)) |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
184 if (strcmpi (state, "true")) |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
185 state = true; |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
186 elseif (strcmpi (state, "false")) |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
187 state = false; |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
188 else |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
189 state = eval (state); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
190 endif |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
191 endif |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
192 FUNCTION.EDITINPLACE = state; |
7325 | 193 case "GET" |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
194 if (isfield (FUNCTION, toupper(state))) |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
195 ret = FUNCTION.(toupper (state)); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
196 else |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
197 ret = FUNCTION; |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
198 endif |
7325 | 199 otherwise |
10635
d1978e7364ad
Print name of function in error() string messages.
Rik <octave@nomad.inbox5.com>
parents:
10549
diff
changeset
|
200 error ('edit: expected "edit EDITOR|HOME|AUTHOR|EMAIL|LICENSE|MODE val"'); |
7325 | 201 endswitch |
202 return | |
203 endif | |
204 | |
205 ## Start the editor without a file if no file is given. | |
206 if (nargin < 1) | |
207 if (exist (FUNCTION.HOME, "dir") == 7 && (isunix () || ! ispc ())) | |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
208 system (cstrcat ("cd \"", FUNCTION.HOME, "\" ; ", |
10549 | 209 sprintf (FUNCTION.EDITOR, "")), |
210 [], FUNCTION.MODE); | |
7325 | 211 else |
212 system (sprintf (FUNCTION.EDITOR,""), [], FUNCTION.MODE); | |
213 endif | |
214 return; | |
215 endif | |
216 | |
217 ## Check whether the user is trying to edit a builtin of compiled function. | |
218 switch (exist (file)) | |
219 case {3, 5} | |
10635
d1978e7364ad
Print name of function in error() string messages.
Rik <octave@nomad.inbox5.com>
parents:
10549
diff
changeset
|
220 error ("edit: unable to edit a built-in or compiled function"); |
7325 | 221 endswitch |
222 | |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
223 ## Checks for whether the file is |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
224 ## absolute or relative should be handled inside file_in_loadpath. |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
225 ## That way, it will be possible to look up files correctly given |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
226 ## partial path information. For example, you should be able to |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
227 ## edit a particular overloaded function by doing any one of |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
228 ## |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
229 ## edit classname/foo |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
230 ## edit classname/foo.m |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
231 ## edit @classname/foo |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
232 ## edit @classname/foo.m |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
233 ## |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
234 ## This functionality is needed for other functions as well (at least |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
235 ## help and type; there may be more). So the place to fix that is in |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
236 ## file_in_loadpath, possibly with some help from the load_path class. |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
237 |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
238 ## The code below includes a portion that serves as a place-holder for |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
239 ## the changes suggested above. |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
240 |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
241 ## Create list of explicit and implicit file names. |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
242 filelist = {file}; |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
243 ## If file has no extension, add file.m and file.cc to the list. |
7325 | 244 idx = rindex (file, "."); |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
245 if (idx == 0) |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
246 ## Create the list of files to look for |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
247 filelist = {file}; |
11032
c9b0a75b02e8
Make all regexp in Octave compatible with both POSIX and PCRE.
Rik <octave@nomad.inbox5.com>
parents:
10821
diff
changeset
|
248 if (isempty (regexp (file, '\.m$'))) |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
249 ## No ".m" at the end of the file, add to the list. |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
250 filelist{end+1} = cat (2, file, ".m"); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
251 endif |
11032
c9b0a75b02e8
Make all regexp in Octave compatible with both POSIX and PCRE.
Rik <octave@nomad.inbox5.com>
parents:
10821
diff
changeset
|
252 if (isempty (regexp (file, '\.cc$'))) |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
253 ## No ".cc" at the end of the file, add to the list. |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
254 filelist{end+1} = cat (2, file, ".cc"); |
7325 | 255 endif |
256 endif | |
257 | |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
258 ## If the file includes a path, it may be an overloaded function. |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
259 if (! strcmp (file, "@") && index (file, filesep)) |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
260 ## No "@" at the beginning of the file, add to the list. |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
261 numfiles = numel(filelist); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
262 for n = 1:numfiles |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
263 filelist{n+numfiles} = cat (2, "@", filelist{n}); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
264 endfor |
7325 | 265 endif |
266 | |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
267 ## Search the entire path for the 1st instance of a file in the list. |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
268 fileandpath = ""; |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
269 for n = 1:numel(filelist) |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
270 filetoedit = file_in_path (path, filelist{n}); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
271 if (! isempty (filetoedit)) |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
272 ## The path is explicitly included. |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
273 fileandpath = filetoedit; |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
274 break; |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
275 endif |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
276 endfor |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
277 |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
278 if (! isempty (fileandpath)) |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
279 ## If the file exists, then edit it. |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
280 if (FUNCTION.EDITINPLACE) |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
281 ## Edit in place even if it is protected. |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
282 system (sprintf (FUNCTION.EDITOR, cstrcat ("\"", fileandpath, "\"")), |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
283 [], FUNCTION.MODE); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
284 return; |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
285 else |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
286 ## If the file is modifiable in place then edit it, otherwise make |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
287 ## a copy in HOME and then edit it. |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
288 fid = fopen (fileandpath, "r+t"); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
289 if (fid < 0) |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
290 from = fileandpath; |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
291 fileandpath = cstrcat (FUNCTION.HOME, from (rindex (from, filesep):end)); |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
292 [status, msg] = copyfile (from, fileandpath, 1); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
293 if (status == 0) |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
294 error (msg); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
295 endif |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
296 else |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
297 fclose (fid); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
298 endif |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
299 system (sprintf (FUNCTION.EDITOR, cstrcat ("\"", fileandpath, "\"")), |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
300 [], FUNCTION.MODE); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
301 return; |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
302 endif |
7325 | 303 endif |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
304 |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
305 ## If editing a new file that is neither a m-file or an oct-file, |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
306 ## just edit it. |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
307 fileandpath = file; |
7325 | 308 idx = rindex (file, "."); |
309 name = file(1:idx-1); | |
310 ext = file(idx+1:end); | |
311 switch (ext) | |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
312 case {"cc", "m"} |
7325 | 313 0; |
314 otherwise | |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
315 system (sprintf (FUNCTION.EDITOR, cstrcat ("\"", fileandpath, "\"")), |
10549 | 316 [], FUNCTION.MODE); |
7325 | 317 return; |
318 endswitch | |
319 | |
320 ## The file doesn't exist in path so create it, put in the function | |
321 ## template and edit it. | |
322 | |
323 ## Guess the email name if it was not given. | |
324 if (isempty (FUNCTION.EMAIL)) | |
325 host = getenv("HOSTNAME"); | |
326 if (isempty (host) && ispc ()) | |
327 host = getenv ("COMPUTERNAME"); | |
328 endif | |
329 if (isempty (host)) | |
330 [status, host] = system ("uname -n"); | |
331 ## trim newline from end of hostname | |
332 if (! isempty (host)) | |
10549 | 333 host = host(1:end-1); |
7325 | 334 endif |
335 endif | |
336 if (isempty (host)) | |
337 FUNCTION.EMAIL = " "; | |
338 else | |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
339 FUNCTION.EMAIL = cstrcat ("<", default_user(0), "@", host, ">"); |
7325 | 340 endif |
341 endif | |
342 | |
343 ## Fill in the revision string. | |
344 now = localtime (time); | |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
345 revs = cstrcat ("Created: ", strftime ("%Y-%m-%d", now)); |
7325 | 346 |
347 ## Fill in the copyright string. | |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
348 copyright = cstrcat (strftime ("Copyright (C) %Y ", now), FUNCTION.AUTHOR); |
7325 | 349 |
350 ## Fill in the author tag field. | |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
351 author = cstrcat ("Author: ", FUNCTION.AUTHOR, " ", FUNCTION.EMAIL); |
7325 | 352 |
353 ## Fill in the header. | |
354 uclicense = toupper (FUNCTION.LICENSE); | |
355 switch (uclicense) | |
356 case "GPL" | |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
357 head = cstrcat (copyright, "\n\n", "\ |
7325 | 358 This program is free software; you can redistribute it and/or modify\n\ |
359 it under the terms of the GNU General Public License as published by\n\ | |
11104 | 360 the Free Software Foundation; either version 3 of the License, or\n\ |
7325 | 361 (at your option) any later version.\n\ |
362 \n\ | |
363 This program is distributed in the hope that it will be useful,\n\ | |
364 but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ | |
365 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ | |
366 GNU General Public License for more details.\n\ | |
367 \n\ | |
368 You should have received a copy of the GNU General Public License\n\ | |
7444 | 369 along with Octave; see the file COPYING. If not, see\n\ |
370 <http://www.gnu.org/licenses/>.\ | |
7325 | 371 "); |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
372 tail = cstrcat (author, "\n", revs); |
7325 | 373 |
374 case "BSD" | |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
375 head = cstrcat (copyright, "\n\n", "\ |
7325 | 376 This program is free software; redistribution and use in source and\n\ |
377 binary forms, with or without modification, are permitted provided that\n\ | |
378 the following conditions are met:\n\ | |
379 \n\ | |
380 1.Redistributions of source code must retain the above copyright\n\ | |
381 notice, this list of conditions and the following disclaimer.\n\ | |
382 2.Redistributions in binary form must reproduce the above copyright\n\ | |
383 notice, this list of conditions and the following disclaimer in the\n\ | |
384 documentation and/or other materials provided with the distribution.\n\ | |
385 \n\ | |
386 THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\n\ | |
387 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\ | |
388 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n\ | |
389 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n\ | |
390 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n\ | |
391 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n\ | |
392 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n\ | |
393 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n\ | |
394 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n\ | |
395 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n\ | |
396 SUCH DAMAGE.\ | |
397 "); | |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
398 tail = cstrcat (author, "\n", revs); |
7325 | 399 |
400 case "PD" | |
401 head = ""; | |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
402 tail = cstrcat (author, "\n", revs, "\n\n", |
10549 | 403 "This program is granted to the public domain."); |
7325 | 404 |
405 otherwise | |
406 head = ""; | |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
407 tail = cstrcat (copyright, "\n\n", FUNCTION.LICENSE, "\n", |
10549 | 408 author, "\n", revs); |
7325 | 409 endswitch |
410 | |
411 ## Generate the function template. | |
412 exists = exist (name); | |
413 switch (ext) | |
414 case {"cc", "C", "cpp"} | |
415 if (isempty (head)) | |
10549 | 416 comment = cstrcat ("/*\n", tail, "\n\n*/\n\n"); |
7325 | 417 else |
10549 | 418 comment = cstrcat ("/*\n", head, "\n\n", tail, "\n\n*/\n\n"); |
7325 | 419 endif |
420 ## If we are shadowing an m-file, paste the code for the m-file. | |
421 if (any (exists == [2, 103])) | |
10549 | 422 code = cstrcat ("\\ ", strrep (type (name), "\n", "\n// ")); |
7325 | 423 else |
10549 | 424 code = " "; |
7325 | 425 endif |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
426 body = cstrcat ("#include <octave/oct.h>\n\n", |
7325 | 427 "DEFUN_DLD(", name, ",args,nargout,\"\\\n", |
10549 | 428 name, "\\n\\\n\")\n{\n", |
429 " octave_value_list retval;\n", | |
430 " int nargin = args.length();\n\n", | |
431 code, "\n return retval;\n}\n"); | |
7325 | 432 |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
433 text = cstrcat (comment, body); |
7325 | 434 case "m" |
435 ## If we are editing a function defined on the fly, paste the | |
436 ## code. | |
437 if (any (exists == [2, 103])) | |
10549 | 438 body = type (name); |
7325 | 439 else |
10549 | 440 body = cstrcat ("function [ ret ] = ", name, " ()\n\nendfunction\n"); |
7325 | 441 endif |
442 if (isempty (head)) | |
10549 | 443 comment = cstrcat ("## ", name, "\n\n", |
444 "## ", strrep (tail, "\n", "\n## "), "\n\n"); | |
7325 | 445 else |
10549 | 446 comment = cstrcat ("## ", strrep(head,"\n","\n## "), "\n\n", ... |
447 "## ", name, "\n\n", ... | |
448 "## ", strrep (tail, "\n", "\n## "), "\n\n"); | |
7325 | 449 endif |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
450 text = cstrcat (comment, body); |
7325 | 451 endswitch |
452 | |
453 ## Write the initial file (if there is anything to write) | |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
454 fid = fopen (fileandpath, "wt"); |
7325 | 455 if (fid < 0) |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
456 error ("edit: could not create %s", fileandpath); |
7325 | 457 endif |
458 fputs (fid, text); | |
459 fclose (fid); | |
460 | |
461 ## Finally we are ready to edit it! | |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7502
diff
changeset
|
462 system (sprintf (FUNCTION.EDITOR, cstrcat ("\"", fileandpath, "\"")), |
10549 | 463 [], FUNCTION.MODE); |
7325 | 464 |
465 endfunction | |
466 | |
467 function ret = default_home () | |
468 | |
469 ret = getenv ("HOME"); | |
470 if (isempty (ret)) | |
471 ret = glob ("~"); | |
472 if (! isempty (ret)) | |
473 ret = ret{1}; | |
474 else | |
475 ret = ""; | |
476 endif | |
477 endif | |
478 | |
479 endfunction | |
480 | |
7434 | 481 ## Return the name associated with the current user ID. |
7325 | 482 ## |
7434 | 483 ## If LONG_FORM is 1, return the full name. This will be the |
484 ## default author. Otherwise return the login name. | |
7325 | 485 ## login@host will be the default email address. |
486 | |
487 function ret = default_user (long_form) | |
488 | |
489 ent = getpwuid (getuid); | |
490 if (! isstruct (ent)) | |
491 ret = getenv ("USER"); | |
7330 | 492 if (isempty (ret)) |
7325 | 493 ret = getenv ("USERNAME"); |
494 endif | |
495 elseif (long_form) | |
496 ret = ent.gecos; | |
7434 | 497 pos = strfind (ret, ","); |
498 if (! isempty (pos)) | |
499 ret = ret(1:pos-1); | |
500 endif | |
7325 | 501 else |
502 ret = ent.name; | |
503 endif | |
504 | |
505 endfunction | |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
506 |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
507 %!test |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8506
diff
changeset
|
508 %! s.editor = edit ("get", "editor"); |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8506
diff
changeset
|
509 %! s.home = edit ("get", "home"); |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8506
diff
changeset
|
510 %! s.author = edit ("get", "author"); |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8506
diff
changeset
|
511 %! s.email = edit ("get", "email"); |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8506
diff
changeset
|
512 %! s.license = edit ("get", "license"); |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8506
diff
changeset
|
513 %! s.editinplace = edit ("get", "editinplace"); |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8506
diff
changeset
|
514 %! s.mode = edit ("get", "mode"); |
7502
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
515 %! edit editor none |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
516 %! edit home none |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
517 %! edit author none |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
518 %! edit email none |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
519 %! edit license none |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
520 %! edit ("editinplace", !s.editinplace) |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
521 %! if (s.mode(1) == "a") |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
522 %! edit mode sync |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
523 %! else |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
524 %! edit mode async |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
525 %! endif |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
526 %! edit ("editor", s.editor); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
527 %! edit ("home", s.home); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
528 %! edit ("author", s.author); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
529 %! edit ("email", s.email); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
530 %! edit ("license", s.license); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
531 %! edit ("editinplace", s.editinplace); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
532 %! edit ("mode", s.mode); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
533 %! assert (edit ("get", "editor"), s.editor); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
534 %! assert (edit ("get", "home"), s.home); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
535 %! assert (edit ("get", "author"), s.author); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
536 %! assert (edit ("get", "email"), s.email); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
537 %! assert (edit ("get", "license"), s.license); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
538 %! assert (edit ("get", "editinplace"), s.editinplace); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
539 %! assert (edit ("get", "mode"), s.mode); |
2ce6b4258e96
Modified for consistency with Matlab. Modified to respect partial paths needed for overloaded functions.
Ben Abbott <bpabbott@mac.com>
parents:
7444
diff
changeset
|
540 |