I have the following factor code in a file:
IN: set-work-dir
USING: shell ;
CONSTANT: work-dir "/code" ! I also tried "c:/code" and "c:\\code"--same error
work-dir cd
When I attempt to run the script from factor I get this error:
C:\>/usr/bin/factor/factor /usr/bin/factor/work/set-work-dir.factor
Generic word absolute-path does not define a method for the fixnum class.
Dispatching on object: 47
(U) Quotation: [ c-to-factor => ]
Word: c-to-factor
(U) Quotation: [ [ (get-catchstack) push ] dip call => (get-catchstack) pop* ]
(O) Word: command-line-startup
(O) Word: run-script
(O) Word: set-current-directory
(O) Method: M\ object absolute-path
(O) Word: no-method
(O) Method: M\ object throw
(U) Quotation: [
OBJ-CURRENT-THREAD special-object error-thread set-global
current-continuation => error-continuation set-global
[ original-error set-global ] [ rethrow ] bi
]
I can get this to run if instead of USING: shell ; I have USING: io.files.private but the directory change isn't preserved outside of the running of the script. I'm assuming using shell will cause the directory change to persist--which I realize may be a bad assumption. How can I write a script to change the directory and have the directory change persist outside of the script?
Windows 7 (Yes, I know the dir separator on Windows is usually \ and I tried '\' too. But / actually works on Windows too. Besides the path works when I use io.files.private).
Factor 0.98 x86.64 (1788, heads/master-e187d63d3c, Tue Oct 18 02:14:22 2016) [Microsoft Visual C++ 190023506] on windows
The
cdwork exists in two vocabs. Which onecdwill call depends on what you areUSING:. Ifshellthenshell:cdis called ifio.files.privatethenio.files.private:cdis called. You can of course use the fully qualified name too.Though the
io.files.private:cdword shouldn't be used by user code because the vocab's name ends with.privatewhich indicates that the word isn't part of the public interface. Instead useset-current-directory:The change will not persist after the Factor process terminates.