Haskell的openBrowser打开Gimp而非浏览器,如何调整使其打开浏览器?
解决Haskell程序用浏览器打开SVG文件的问题
你遇到的问题是openBrowser调用系统默认程序打开SVG时启动了Gimp,而图形文件管理器双击能正常用浏览器打开。这是因为终端环境下的MIME类型关联和图形会话规则不一致,或是openBrowser的调用方式未触发正确的关联逻辑,可通过以下方法解决:
方法一:直接指定浏览器命令打开
放弃依赖openBrowser,直接调用系统浏览器的命令打开SVG文件,确保用浏览器启动:
首先添加导入:
import System.Process (callCommand)
修改main函数:
main = do TLIO.writeFile "test.svg" $ renderText $ svg contents callCommand "firefox test.svg" -- 可替换为chromium、chrome等你系统中已安装的浏览器
方法二:传递file://协议的完整URL给openBrowser
部分程序对本地路径的处理逻辑和图形环境不同,传递file://开头的完整URL可触发正确的关联:
先导入模块获取当前工作目录:
import System.Directory (getCurrentDirectory)
修改main函数:
main = do TLIO.writeFile "test.svg" $ renderText $ svg contents cwd <- getCurrentDirectory let fileUrl = "file://" ++ cwd ++ "/test.svg" openBrowser fileUrl >>= print
方法三:修正终端环境的MIME类型关联
检查终端下SVG文件的默认关联程序,若被设为Gimp则修改为浏览器:
在终端执行命令查看当前关联:
xdg-mime query default image/svg+xml
若输出为Gimp对应的.desktop文件(如gimp.desktop),执行以下命令修改为浏览器:
xdg-mime default firefox.desktop image/svg+xml -- 替换为你常用浏览器的.desktop文件名
修改后重新运行Haskell程序,openBrowser就会用浏览器打开SVG文件。
内容的提问来源于stack exchange,提问作者Jogger
相关产品推荐
相关产品推荐

