From 986330f5162b308e63d8ae228d54240c1e73ad90 Mon Sep 17 00:00:00 2001 From: Profpatsch Date: Wed, 12 May 2021 23:37:42 +0200 Subject: pkgs/profpatsch/xdg-open: directly pass MimeMatch to xdg-open script No use in passing through the mime type now that we can just directly render the commands in the protocol handlers. This gives us the base for generating the Firefox handlers.json. --- pkgs/profpatsch/xdg-open/config.dhall | 14 +++++++------- pkgs/profpatsch/xdg-open/types.dhall | 12 ++++++------ pkgs/profpatsch/xdg-open/xdg-open.dhall | 22 ++++++++++++++++------ 3 files changed, 29 insertions(+), 19 deletions(-) (limited to 'pkgs/profpatsch') diff --git a/pkgs/profpatsch/xdg-open/config.dhall b/pkgs/profpatsch/xdg-open/config.dhall index 2b1fb686..13810b3a 100644 --- a/pkgs/profpatsch/xdg-open/config.dhall +++ b/pkgs/profpatsch/xdg-open/config.dhall @@ -141,37 +141,37 @@ in λ(pkgs : { package : Text, binary : Text } → Executable) → let TODO = UriGlobHandler.Transparent special.fetch-http-url-mime - in UriGlobHandler.Mime mime.text.html.mime + in UriGlobHandler.Mime mime.text.html } , { desc = "gemini link" , glob = [ "gemini://*" ] , schema-prefix = [ "gemini" ] - , handler = UriGlobHandler.Mime mime.text.gemini.mime + , handler = UriGlobHandler.Mime mime.text.gemini } , { desc = "gemini link" , glob = [ "gopher://*", "gophers://*" ] , schema-prefix = [ "gopher", "gophers" ] - , handler = UriGlobHandler.Mime mime.text.gopher.mime + , handler = UriGlobHandler.Mime mime.text.gopher } , { glob = [ "mailto:*" ] , desc = "mail address" , schema-prefix = [ "mailto" ] - , handler = UriGlobHandler.Mime mime.mail-address.mime + , handler = UriGlobHandler.Mime mime.mail-address } , { glob = [ "magnet:*" ] , desc = "bittorrent magnet link" , schema-prefix = [ "magnet" ] - , handler = UriGlobHandler.Mime mime.torrent.mime + , handler = UriGlobHandler.Mime mime.torrent } , { desc = "irc channel" , glob = [ "irc:*", "ircs:*" ] , schema-prefix = [ "irc", "ircs" ] - , handler = UriGlobHandler.Mime mime.irc.mime + , handler = UriGlobHandler.Mime mime.irc } , { desc = "local file" , glob = [ "file://*" ] , schema-prefix = [ "file" ] - , handler = UriGlobHandler.Mime mime.file.mime + , handler = UriGlobHandler.Mime mime.file } ] diff --git a/pkgs/profpatsch/xdg-open/types.dhall b/pkgs/profpatsch/xdg-open/types.dhall index 72184ad5..b7ae944b 100644 --- a/pkgs/profpatsch/xdg-open/types.dhall +++ b/pkgs/profpatsch/xdg-open/types.dhall @@ -22,10 +22,15 @@ let Special = , notify : ∀(message : Text) → Command } +let + -- describes the command `cmd` to run for the matched mime type `mime` + MimeMatch = + { mime : Mime, cmd : Command } + let -- Handler of an uri glob. Mime maps the uri to a file handler. Transparent is a command which, when run, returns a mimetype of the file. UriGlobHandler = - < Transparent : Command | Mime : Mime > + < Transparent : Command | Mime : MimeMatch > let UriMimeGlob = { desc : Text @@ -36,11 +41,6 @@ let UriMimeGlob = , handler : UriGlobHandler } -let - -- describes the command `cmd` to run for the matched mime type `mime` - MimeMatch = - { mime : Mime, cmd : Command } - in { Mime , Executable , Arg diff --git a/pkgs/profpatsch/xdg-open/xdg-open.dhall b/pkgs/profpatsch/xdg-open/xdg-open.dhall index cd9e8d4c..66ab88a3 100644 --- a/pkgs/profpatsch/xdg-open/xdg-open.dhall +++ b/pkgs/profpatsch/xdg-open/xdg-open.dhall @@ -15,13 +15,17 @@ let types = ./types.dhall let renderMime = Text/concatSep "/" -let shellEscapeCommand = +let + -- Escape the given shell command, at least the String arguments of it. + -- Passes `$file` as variable argument. + -- The final shell command is executed into. + shellEscapeExecCommand = λ(shellEscape : Text → Text) → λ(file : Text) → λ(cmd : types.Command) → Text/concatSep " " - ( [ shellEscape cmd.exe ] + ( [ "exec", shellEscape cmd.exe ] # List/map types.Arg Text @@ -56,7 +60,7 @@ let xdg-open = λ(file2 : Text) → λ(m : types.MimeMatch) → [ "${renderMime m.mime})" - , "${shellEscapeCommand shellEscape2 file2 m.cmd}" + , "${shellEscapeExecCommand shellEscape2 file2 m.cmd}" , ";;" ] @@ -70,12 +74,18 @@ let xdg-open = ( λ(match : Text) → merge { Mime = - λ(mime : types.Mime) → - [ "${match})", "mime=${renderMime mime}", ";;" ] + λ(mime : types.MimeMatch) → + [ "${match})" + , shellEscapeExecCommand + shellEscape2 + file2 + mime.cmd + , ";;" + ] , Transparent = λ(cmd : types.Command) → [ "${match})" - , "mime=\"\$(${shellEscapeCommand + , "mime=\"\$(${shellEscapeExecCommand shellEscape2 file2 cmd})\"" -- cgit 1.4.1