| 1 | module os |
| 2 | |
| 3 | // open_uri opens a given uri. |
| 4 | pub fn open_uri(uri string) ! { |
| 5 | mut vopen_uri_cmd := getenv('VOPEN_URI_CMD') |
| 6 | if vopen_uri_cmd == '' { |
| 7 | $if macos { |
| 8 | vopen_uri_cmd = 'open' |
| 9 | } $else $if freebsd || openbsd { |
| 10 | vopen_uri_cmd = 'xdg-open' |
| 11 | } $else $if linux { |
| 12 | providers := ['xdg-open', 'x-www-browser', 'www-browser', 'wslview', 'exo-open'] |
| 13 | // There are multiple possible providers to open a browser on linux |
| 14 | // One of them is xdg-open, another is x-www-browser, then there's www-browser, etc. |
| 15 | // Look for one that exists and run it |
| 16 | for provider in providers { |
| 17 | if exists_in_system_path(provider) { |
| 18 | vopen_uri_cmd = provider |
| 19 | break |
| 20 | } |
| 21 | } |
| 22 | } |
| 23 | } |
| 24 | if vopen_uri_cmd == '' { |
| 25 | return error('unsupported platform') |
| 26 | } |
| 27 | result := execute('${vopen_uri_cmd} "${uri}"') |
| 28 | if result.exit_code != 0 { |
| 29 | return error('unable to open url: ${result.output}') |
| 30 | } |
| 31 | } |
| 32 | |