Re: Obtaining the path of the application program?
Jeff Henrikson <[email protected]> Fri, 27 Aug 2021 13:06:37 -0700
| Newsgroups | gmane.comp.lang.racket.user,gmane.lisp.scheme.plt |
|---|---|
| Message-ID | <[email protected]> |
> On 8/26/21 8:14 AM, Matthew Flatt wrote:
>> The analog to the first argument to main in C is
>>
>> (find-system-path 'run-file)
>>
>> I think that's probably what you want.
Yes, this has the behavior I want.=C2=A0 Thank you.
Procedure find-system-path seems well documented once one finds its=20
section.=C2=A0 But not knowing what to search for, I found it hard to find =
in=20
the documentation.=C2=A0 It seems like one easy concrete discoverability=20
improvement would be to mention (find-system-path 'run-file) in the docs=20
for current-command-line-arguments, command-line, or both.=C2=A0 I was sure=
=20
to look carefully in those places.
Regards,
Jeff Henrikson
On 8/26/21 8:14 AM, Matthew Flatt wrote:
> The analog to the first argument to main in C is
>
> (find-system-path 'run-file)
>
> I think that's probably what you want.
>
>
> Something closer to `get-current-source` but adapting to a run-time
> file is
>
> (variable-reference->module-source
> (#%variable-reference))
>
> Here, `(#%variable-reference)` is the primitive form that obtains a
> connection to the enclosing module at run time. If you create an
> executable with `raco exe`, though, the "source" of the module will be
> a symbolic name instead of a path, because a module that's embedded in
> an executable doesn't have a file identity anymore.
>
> At Thu, 26 Aug 2021 07:51:35 -0700, Jeff Henrikson wrote:
>> Racket users,
>>
>> Many software applications use their location in the filesystem to
>> establish filesystem relationships between their executable file, their
>> configuration and their data.=C2=A0 For this purpose, C provides the fir=
st
>> element of the string array provided to main, python provides __file__,
>> bash provides ${BASH_SOURCE[0]}, etc.
>>
>> Racket strips said value before current-command-line-arguments receives
>> the subsequent command-line arguments from the operating system.
>>
>> A related value can be pulled from syntax-source as follows:
>>
>> (define-syntax (get-current-source stx)
>> =C2=A0 (datum->syntax
>> =C2=A0=C2=A0 (quote-syntax here)
>> =C2=A0=C2=A0 (syntax-source stx)
>> =C2=A0=C2=A0 stx))
>>
>> Macro get-current-source works as intended if called at program startup
>> and the program is compiled on the fly with:
>>
>> racket program.rkt
>>
>> However get-current-source has the unintended property of memorizing the
>> original source location if the program is compiled with raco exe (and
>> then moved).
>>
>> Is there a way in racket to obtain the path of the application program?
>>
>>
>> Jeff Henrikson
>>
>>
>> --=20
>> You received this message because you are subscribed to the Google Group=
s
>> "Racket Users" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n email
>> to racket-users+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected]
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/racket-users/a076dfa2-d1a5-3cda-72ae-a=
30cdb91d
>> c31%40gmail.com.
--=20
You received this message because you are subscribed to the Google Groups "=
Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to racket-users+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected]
To view this discussion on the web visit https://groups.google.com/d/msgid/=
racket-users/f1133af2-a244-be6b-f9ff-c021f5b88366%40gmail.com.