/// Opens a target file or URL using the appropriate platform-specific opener. /// /// example: /// ```gleam /// let _ = open("https://gleam.run") /// ``` /// pub fn open(target: String) { get_platform_opener() |> opener_to_exec() |> fn(open) { open([target]) } } type Opener { /// Opener for many UNIX based systems using `xdg-open` XDGOpen /// Opener for macOS systems using `open` MacOSOpen /// Opener for Windows using `start` WindowsStart } fn opener_to_exec( opener: Opener, ) -> fn(List(String)) -> Result(String, #(Int, String)) { case opener { MacOSOpen -> exec("open", _) WindowsStart -> exec("start", _) XDGOpen -> exec("xdg-open", _) } } type OsType { Linux Darwin NT Unknown } fn get_platform_opener() -> Opener { case get_os() { Linux -> XDGOpen NT -> WindowsStart Darwin -> MacOSOpen Unknown -> XDGOpen } } @external(erlang, "opener_ffi", "get_os") fn get_os() -> OsType @external(erlang, "opener_ffi", "exec") fn exec(command: String, args: List(String)) -> Result(String, #(Int, String))