Current section
Files
Jump to
Current section
Files
src/opener.erl
-module(opener).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-define(FILEPATH, "src/opener.gleam").
-export([open/1]).
-export_type([opener/0, os_type/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-type opener() :: x_d_g_open | mac_o_s_open | windows_start.
-type os_type() :: linux | darwin | n_t | unknown.
-file("src/opener.gleam", 40).
-spec get_platform_opener() -> opener().
get_platform_opener() ->
case opener_ffi:get_os() of
linux ->
x_d_g_open;
n_t ->
windows_start;
darwin ->
mac_o_s_open;
unknown ->
x_d_g_open
end.
-file("src/opener.gleam", 23).
-spec opener_to_exec(opener()) -> fun((list(binary())) -> {ok, binary()} |
{error, {integer(), binary()}}).
opener_to_exec(Opener) ->
case Opener of
mac_o_s_open ->
fun(_capture) -> opener_ffi:exec(<<"open"/utf8>>, _capture) end;
windows_start ->
fun(_capture@1) -> opener_ffi:exec(<<"start"/utf8>>, _capture@1) end;
x_d_g_open ->
fun(_capture@2) ->
opener_ffi:exec(<<"xdg-open"/utf8>>, _capture@2)
end
end.
-file("src/opener.gleam", 8).
?DOC(
" Opens a target file or URL using the appropriate platform-specific opener.\n"
"\n"
" example:\n"
" ```gleam\n"
" let _ = open(\"https://gleam.run\")\n"
" ```\n"
).
-spec open(binary()) -> {ok, binary()} | {error, {integer(), binary()}}.
open(Target) ->
_pipe = get_platform_opener(),
_pipe@1 = opener_to_exec(_pipe),
(fun(Open) -> Open([Target]) end)(_pipe@1).