Open amano-kenji opened 5 months ago
awawawawawa.
(pp (dyn *args*))
(pp (dyn *current-file*))
@iacore That doesn't give me a path to the source file.
@amano-kenji You can pass what comes back from (dyn *current-file*)
to (spork/path/abspath)
:
# scratch.janet
(import spork/path)
(print (path/abspath (dyn *current-file*)))
$ janet scratch.janet
If you're opposed to using spork, you can look at the implementation of spork/path for how to roll your own (spork/path is implemented in pure Janet).
I read spork/path.janet
(defmacro- decl-abspath
[pre]
~(defn ,(symbol pre "/abspath")
"Coerce a path to be absolute."
[path]
(if (,(symbol pre "/abspath?") path)
(,(symbol pre "/normalize") path)
(,(symbol pre "/join") (or (dyn :path-cwd) (os/cwd)) path))))
I think it just adds the current working directory to path
.
I assume that janet doesn't let you get the source directory, yet.
jpm doesn't install a lua script into /usr/bin, either. I want to execute a lua script and get its standard output from my janet code.
The following idea does not address the issue but I think one might say it can address:
I want to execute a lua script and get its standard output from my janet code.
Within one's project directory, create the lua script named script.lua
, for example.
Then, in one's project.janet
, place the following:
(declare-binscript
:main "script.lua")
Executing jpm install
should lead to script.lua
being in the same directory as jpm
itself (might need to set permissions appropriately) which should be on one's PATH
.
Now script.lua
should be executable via os/execute
or os/spawn
(assuming at least :p
is used).
To increase the probability of one's script being executed, it might help to choose a name for it that is unlikely to be used by other folks.
Update: I looked at this comment and following its advice, discovered declare-bin
:
(defn declare-bin
"Declare a generic file to be installed as an executable."
[&keys {:main main}]
(install-rule main (dyn:binpath)))
That might be a better choice than declare-binscript
because:
(defn declare-binscript
``Declare a janet file to be installed as an executable script. Creates
a shim on windows. If hardcode is true, will insert code into the script
such that it will run correctly even when JANET_PATH is changed. if auto-shebang
is truthy, will also automatically insert a correct shebang line.
``
It seems declare-binscript
is intended for Janet scripts.
declare-bin
is not documented, yet. That's why I didn't know about it. But, declare-bin
can be a workaround.
Sometimes, I want to execute an executable on a path relative to the janet source file that executes it.
For now, that doesn't seem possible.