ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Typora 粘贴图片时 PicGo 弹窗的解决方案

Typora 粘贴图片时 PicGo 弹窗的解决方案

Typora 每次粘贴图片时都跳出 PicGo 窗口的解决方案

问题说明

Typora 使用PicGo.app作为图片上传服务时,每次粘贴图片上传,PicGo 主窗口都会弹出,打断写作。即使将 PicGo 设为静默启动,仍可能出现这一现象。

本方案将 Typora 的上传服务改为自定义命令,通过脚本直接调用 PicGo 的本地上传服务,使图片在后台上传,避免重复启动 PicGo 导致主窗口弹出。

以下步骤默认已安装 PicGo,并已配置好图床及所需插件。

本地环境

项目版本或配置
操作系统macOS 26.6.2
架构Apple Silicon(arm64)
Typora1.14.10
PicGo3.0.3,已安装于/Applications/PicGo.app
Python3.9.6,解释器路径为/usr/bin/python3
上传服务PicGo-Server,127.0.0.1:36677

脚本保存路径

~/Library/Application Support/Typora/typora-picgo-background.py

完整路径示例(请替换用户名):

/Users/你的用户名/Library/Application Support/Typora/typora-picgo-background.py

配置步骤

  1. 在 PicGo 设置中,将启动模式设为静默启动,关闭显示 Dock 栏图标,保留显示顶部栏图标。
  2. 开启PicGo-Server,监听地址设为127.0.0.1,端口设为36677。
  3. 在终端执行以下命令,创建目录并打开脚本文件:
mkdir-p"$HOME/Library/Application Support/Typora"nano"$HOME/Library/Application Support/Typora/typora-picgo-background.py"
  1. 粘贴下方完整脚本代码,按Control + O、回车保存,按Control + X退出。
  2. 打开Typora → 偏好设置 → 图像,将插入图片时…设为上传图片,勾选对本地位置的图片应用上述规则。
  3. 将上传服务设为自定义命令,填写:
/usr/bin/python3"/Users/你的用户名/Library/Application Support/Typora/typora-picgo-background.py"

将你的用户名替换为自己的 macOS 用户名,保留路径两侧的双引号。需要有可用的 Python 3;若解释器安装在其他位置,将/usr/bin/python3替换为其完整路径。

脚本代码

#!/usr/bin/python3"""Upload through the existing PicGo server without activating its window."""importjsonimportsysimporttimeimportsubprocessimporturllib.requestimporturllib.error ENDPOINT="http://127.0.0.1:36677"HTTP=urllib.request.build_opener(urllib.request.ProxyHandler({}))defready():try:HTTP.open(ENDPOINT,timeout=1).close()returnTrueexcepturllib.error.HTTPError:returnTrueexcept(urllib.error.URLError,OSError):returnFalsedefmain():paths=sys.argv[1:]ifnotpaths:raiseRuntimeError("No image paths supplied; clipboard upload is disabled.")ifnotready():subprocess.run(["/usr/bin/open","-g","-a","/Applications/PicGo.app"],check=True)for_inrange(100):ifready():breaktime.sleep(0.2)else:raiseRuntimeError("PicGo server did not start on port 36677.")request=urllib.request.Request(ENDPOINT+"/upload",data=json.dumps({"list":paths}).encode(),headers={"Content-Type":"application/json"},method="POST")withHTTP.open(request,timeout=180)asresponse:result=json.load(response)urls=result.get("result",[])ifnotresult.get("success")orlen(urls)!=len(paths):raiseRuntimeError("PicGo upload failed: "+str(result.get("message",result.get("msg","Check PicGo logs"))))ifnotall(isinstance(url,str)andurl.startswith(("https://","http://"))forurlinurls):raiseRuntimeError("PicGo returned invalid image URLs.")print("\n".join(urls))if__name__=="__main__":try:main()exceptExceptionaserror:print(str(error),file=sys.stderr)sys.exit(1)
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进