org-download无法拖放图片

今天尝试使用org-download,在doomemacs环境里安装,config.el里加入 (use-package org-download :ensure t ;;将截屏功能绑定到快捷键:Ctrl + Shift + Y :bind (“f9” . org-download-screenshot) :config (require 'org-download) ;; Drag and drop to Dired (add-hook 'dired-mode-hook 'org-download-enable) )

重启emacs后,用鼠标左键点住chrome浏览器里图片,拉到emacs里释放左键,发现没有变化。 请问可能是哪个步骤不对? 我在论坛上搜索查看,都说org-download好,似乎没人遇到过这种简单使用问题,都有些不好意思问。。。

因为你没有给 org-mode enable org-download (add-hook 'org-mode-hook 'org-download-enable),另外 config 里面不需要加 require,配置参考:

(use-package org-download
  :ensure t
  :hook ((org-mode dired-mode) . org-download-enable)
  :config
  (defun +org-download-method (link)
    (org-download--fullname (org-link-unescape link)))
  (setq org-download-method '+org-download-method)

  (setq org-download-annotate-function (lambda (_link) "")
        org-download-method 'attach
        org-download-screenshot-method "screencapture -i %s"))
1 个赞

org-download只支持拖放图片,我用windows,参考着org-download写了几个函数,不仅能拖放图片,也能拖放其它文件作为附件。

有convert.exe,还能从剪贴板获取图片放进去。

补充一点,如果你的操作系统是Windows的话。

Windows下一个应用要想接收浏览器等拖放的URL、文本等的话,需要通过RegisterDragDrop注册实现 IDropTarget,但是Emacs在Windows下只处理了WM_DROPFILES消息,所以当你从浏览器拖放图片到Emacs触发不了[drag-n-drop]消息,对应绑定的命令w32-drag-n-drop也不会执行,所以拖放不了。 只能拖放文件、文件夹等等了(就WM_DROPFILES能处理的部分)。

org-download本来就支持从剪贴板放图片。org-download-clipboard

我就是从它里面抽出来的,主要是为了能拖放其它格式的文件到org中作为附件。

@owensys 请问一个 org-download 在 Windows10 系统下使用的问题。 Windows系统自带了一个C:\WINDOWS\system32\convert.exe 命令,但是 org-download 依赖 imagemagick/convert ,调用的时候总是会调用系统的 convert 。请问大家是怎么解决这个冲突的?

我的 imagemagick 是 scoop 安装的,如果把 scoop 的Path 设置到系统环境变量最高会不会造成问题?

請問org-download具體怎麼用? 我試着把圖片拖進emacs,但怎麼是一個單獨的buffer了?並沒有插入我的文檔啊。

已经解决:
在 Windows 下可以通过 imagemagick 官网下载安装包, 安装的时候勾选 安装 convert 的选项。
image

安装好以后,C:\Program Files\ImageMagick-7.1.0-Q16-HDRI 这个路径默认已经加入到系统的 Path 中。这时在终端输入convert --version 找到的应该就是 imageMagick的 convert了。

然后随便在网上复制一张图片到剪贴板,在org-mode 中执行这个命令 M-x,org-download-clipboard 就可以将剪贴版的图片插入到 org 文档中了。

详细内容,可以参考这个issue

应该也支持 Irfanview, 但我尝试了,没成功。

我之前也遇到了这个问题,即使安装了ImageMagick也得确保它的路径在PATH环境变量的最前面,否则找到的就是系统自带的convert.exe,不过由于是系统自带的convert.exe,可能会有程序去用这个东西,我怕如果把ImageMagick的路径提到PATH之前,导致其他原本要用系统自带的convert.exe现在变成去用ImageMagick的convert.exe会导致出错,同时我还不确定除了convert.exe还有没有其他同名程序会被ImageMagick的覆盖。

编辑下答案。。。这里我不该用advice,定义个新command,绑定按键到新command就好。

一个可选的解决方案是,覆盖org-download-clipboard,让它使用magick convert,不要用convert:

(when (memq system-type '(windows-nt cygwin))
  (define-advice org-download-clipboard (:override (&rest args))
    "Copy image from clipboard to a file using 'magick convert' instead of 'convert'."
    (unless (executable-find "magick")
      (user-error
       "Please install ImageMagick and put its path inside the PATH environment variable"))
    (let ((org-download-screenshot-method "magick convert clipboard: %s"))
      (apply #'org-download-screenshot args))))

不过由于覆盖了整个函数的实现,感觉有点不干净。。。不过org-download也没提供相应的定制选项,我也没找到比较好的修改点。

用 advice-add 机制吧,感觉更简单,define-advice 机制可能已经被废弃了

defadvice 被废弃了吧?define-advice似乎仅仅对advice-add进行了一个简单的封装而已。 前者22.1版本引入的,后者25.1版本引入的。

。。。话说我干嘛加advice,定义个新的command,绑定到新的command不就好了:

我靠,我可能记错了。。。。

没事,系统的 convert 一般用不到。他就是用来转磁盘格式的(比如FAT32 -> NTFS),需要用的话再改一下系统变量就好了。

1 个赞

不过我还是喜欢 advice-add, define-advice 好像类似 defadvice, 实在是适应不了。。。 :crazy_face:

1 个赞

我也碰到这个问题,这个bug是chrome本身的造成的。 可以在init.el中添加如下内容以解决这个问题

(defun my-x-dnd-test-function (_window _action types)
  "X-DND test function that returns copy instead of private as action
Otherwise the same as the default function"
  (let ((type (x-dnd-choose-type types)))
    (when type (cons 'copy type))))

(setq x-dnd-test-function #'my-x-dnd-test-function)

参考连接:

https://debbugs.gnu.org/cgi/bugreport.cgi?bug=19885