jrblevin / markdown-mode

Emacs Markdown Mode
http://jblevins.org/projects/markdown-mode/
GNU General Public License v3.0
875 stars 160 forks source link

register yank-media-handler so we can paste images #804

Closed unhammer closed 8 months ago

unhammer commented 8 months ago

Expected Behavior

When an image is in the clipboard, yanking/pasting should create a file with the image in the same dir (perhaps customizable) and add a markdown image link.

See https://yhetil.org/orgmode/87jzsintv0.fsf@gmail.com/ for examples of yank-media handlers (this issue prompted by https://old.reddit.com/r/emacs/comments/17alspd/intelligent_paste_in_emacs/k5fnuta/ )

Actual Behavior

It pastes the latest text instead (and messages Selection owner couldn’t convert: text/plain;charset=utf-8)

Steps to Reproduce

  1. Copy some image contents to clipboard
  2. M-x markdown-mode in emacs
  3. C-y

Software Versions

syohex commented 8 months ago

How about #807 ?

unhammer commented 8 months ago

Nice! I can now M-x yank-media in a markdown-buffer and it does the right thing :-)

If I drag from thunar into emacs, it still just opens the file – I believe this requires (setq-local dnd-protocol-alist (cons '("^file:///" . markdown--dnd-local-file-handler-which-is-not-yet-implemented) dnd-protocol-alist)) as in https://yhetil.org/orgmode/87jzsintv0.fsf@gmail.com/ ?

If I use yank instead of yank-media with an image in clipboard contents I still get the "Selection owner couldn't convert" – is this something that should work, or is plain yank always expected to only yank text and never images?

syohex commented 8 months ago

I'll look into dnd later.

If I use yank instead of yank-media with an image in clipboard contents I still get the "Selection owner couldn't convert" – is this something that should work, or is plain yank always expected to only yank text and never images?

I'm not sure yet, but I suppose yank always yanks text.

syohex commented 8 months ago

I've also implemented the dnd feature

the42 commented 8 months ago

Is this meant to work cross-plattform or exclusively for Gnome? I am using Emacs 29.1. on Windows and when an image is on the clipboard and I call yank-media in a markdown-buffer I get the following message:

yank-media: No handler in the current buffer for anything on the clipboard

syohex commented 8 months ago

Emacs has not supported images in clipboard on Windows yet.So this feature works only on Desktop Linux and macOS.

https://www.gnu.org/software/emacs/manual/html_node/elisp/Window-System-Selections.html

When Emacs runs on MS-Windows, it does not implement X selections in general, but it does support the clipboard. gui-get-selection and gui-set-selection on MS-Windows support the text data type only; if the clipboard holds other types of data, Emacs treats the clipboard as empty. The supported data type is STRING.

9viz commented 8 months ago

You might also want to support the XDS protocol so that you can e.g., directly drag an image shown in firefox and drop it onto Emacs frame without needing to save it first somewhere, etc. Po Lu's initial message in the linked thread should be of help (and the later patches of course).

I neglected to do this in the org-mode patch but you definitely want to call decode-coding-string on the string returned by url-unhex-string in the copied files yank-media handler.

If I use yank instead of yank-media with an image in clipboard contents I still get the "Selection owner couldn't convert" – is this something that should work, or is plain yank always expected to only yank text and never images?

See the subthread https://yhetil.org/emacs-devel/837ddk9tc8.fsf@gnu.org/ and the conclusion therein.