Comme les fichiers URL ne sont que des fichiers texte, j'ai résolu ce problème en leur attachant un script comme handler, qui lit l'URL du fichier et ouvre cette URL avec le navigateur web par défaut. Le script de Nim suivant fait cela. Je ne l'ai testé que sur mon propre système d'exploitation, mais il devrait également fonctionner sur Linux et MacOS.
Vous devez le compiler. Installez Nim et ensuite exécuter nim compile urlhandler.nim
sur elle. Attribuez ensuite vos fichiers URL à l'exécutable créé.
# urlhandler.nim
import os, system, re, browsers, strutils, strformat
# You can change this. Use lowercase.
let URLEXTS = [".url", ".open"]
# I added the '.open' file type because on my OS it is not trivial to attach
# new programs to the URL filetype in the default file explorer. So lets create a
# new filetype, and attach this exe to it. Then batch renaming *.url files to
# *.open files (programmatically or by hand) shouldnt be too difficult, is it?
var url: string
block:
proc bye(reason: string) =
echo "*** ERROR ***"
echo "\n" & reason
echo "\n(press key to close)"
discard readLine(stdin)
quit()
var oldname: string
block:
try:
oldname = commandLineParams()[0]
except IndexDefect:
bye "Please provide a file"
oldname.normalizePath
if not oldname.fileExists:
bye fmt"{oldname} does not exist"
oldname = oldname.expandFilename
let (_, title, ext) = oldname.splitFile
let cleanext = ext.toLower
if cleanext in URLEXTS:
let filecontents = readFile(oldname)
if filecontents.isEmptyOrWhitespace:
bye fmt"{title & ext} is empty."
let urlpattern = re(
"""
^ \s* URL \s* = \s* ( [^\s]+ )
""",
flags = {reExtended, reMultiLine}
)
var matchgroups: array[1, string]
if filecontents.find(urlpattern, matchgroups) > 0:
url = matchgroups[0]
else:
bye fmt"""
{title & ext} has an unknown format. I was expecting something like ...
[InternetShortcut]
URL=https://nim-lang.org/
... but instead i got ...
""".dedent &
filecontents.strip.indent(4)
else:
bye fmt"""unsupported filetype: "{ext}". If you want to have it """ &
"supported, add it to the URLEXTS list."
openDefaultbrowser(url)