You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从浏览器打开本地文件到Emacs?解决macOS URI跳转异常

解决macOS下Firefox无法通过emacs://链接打开文件的问题

1. 补全URI Scheme注册配置

Firefox对URI协议的校验比终端open命令更严格,得确保包装应用的Info.plist配置完全合规:

  • 打开你制作的包装应用的Contents/Info.plist,确认包含以下关键配置:
    <key>CFBundleURLTypes</key>
    <array>
      <dict>
        <key>CFBundleURLName</key>
        <string>Emacs URI Handler</string>
        <key>CFBundleURLSchemes</key>
        <array>
          <string>emacs</string>
        </array>
      </dict>
    </array>
    <key>CFBundleIdentifier</key>
    <string>com.yourid.emacshandler</string> <!-- 用唯一的标识符,别和其他应用重复 -->
    
  • 保存后重新注册应用:open -a /Applications/你的Emacs包装应用名.app,然后重启Firefox。

2. 修复包装应用的执行脚本

Firefox传递URI参数的逻辑和终端open有差异,得确保脚本能正确解析路径并调用emacsclient:

  • 打开包装应用Contents/MacOS/下的执行脚本,替换成以下内容:
    #!/bin/bash
    # 剥离emacs://前缀,提取文件路径
    RAW_PATH="${1#emacs://}"
    # 解码URL编码的特殊字符(比如空格会变成%20)
    FILE_PATH=$(echo "$RAW_PATH" | python3 -c "import sys, urllib.parse; print(urllib.parse.unquote(sys.stdin.read()))")
    
    # 检查是否有运行的Emacs实例
    if emacsclient -e "(server-running-p)" > /dev/null 2>&1; then
        emacsclient -n "$FILE_PATH"  # -n表示不等待Emacs关闭
    else
        # 启动Emacs daemon并打开文件
        open -a Emacs --args --daemon
        sleep 1  # 给daemon启动留时间
        emacsclient -n "$FILE_PATH"
    fi
    
  • 给脚本加执行权限:chmod +x /Applications/你的Emacs包装应用名.app/Contents/MacOS/脚本文件名

3. 重置Firefox的URI关联缓存

Firefox可能缓存了旧的协议关联设置,手动重置:

  • 在Firefox地址栏输入about:config,搜索network.protocol-handler.expose.emacs
  • 如果值是true,双击改成false,之后再点emacs://链接时,Firefox会重新让你选择打开应用,选你的包装应用并勾选“始终使用此应用打开”。
  • 或者直接去Firefox设置里搜“应用程序”,找到emacs协议,手动指定为你的包装应用。

4. 验证参数传递是否正常

不确定问题出在哪时,加日志排查:

  • 在执行脚本开头加一行日志:
    echo "收到的URI: $1" >> ~/emacs-handler.log
    
  • 点击Firefox里的emacs://链接,查看~/emacs-handler.log的内容,确认文件路径是否被正确解析。

内容的提问来源于stack exchange,提问作者kjmh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 00:55:11