From: Visuwesh <visuweshm@gmail.com>
To: Ihor Radchenko <yantar92@posteo.net>
Cc: Rens Oliemans <hallo@rensoliemans.nl>,
org-mode-email <emacs-orgmode@gnu.org>
Subject: Re: [PATCH] Add yank-media handler for LibreOffice Calc tables
Date: Tue, 24 Dec 2024 08:23:09 +0530 [thread overview]
Message-ID: <878qs5bxm2.fsf@gmail.com> (raw)
In-Reply-To: <875xnajn21.fsf@localhost> (Ihor Radchenko's message of "Mon, 23 Dec 2024 18:01:42 +0000")
[-- Attachment #1: Type: text/plain, Size: 1178 bytes --]
[திங்கள் டிசம்பர் 23, 2024] Ihor Radchenko wrote:
>> I have now done this in the attached patch. I use a temporary buffer to
>> convert the table, and also decode it as per buffer-file-coding-system
>> of the Org buffer as I could not tell whether LibreOffice always uses
>> UTF-8 or not. I believe buffer-file-coding-system should be utf-8 on
>> most systems so it should be a safe choice.
>
> utf-8 is not used everywhere. Quite far from that, AFAIK.
> You can try 'undecided as coding system value (see 34.10.7 Explicit
> Encoding and Decoding)
Ah thank you, I missed it. Using it now.
>> When yanking images from clipboard, Org saves the image on disk and
>> @@ -21702,6 +21703,9 @@ of ~org-yank-dnd-method~. Image files
>> pasted this way also respect
>> the value of ~org-yank-image-save-method~ when the action to perform
>> is =attach=.
>>
>> +Yanking tables copied from LibreOffice Calc documents are inserted as
>> +Org tables.
>
> Looks like "yanking" is stray.
I reworded it to
Tables copied from LibreOffice Calc documents are yanked as Org
tables.
Updated patch attached below.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Add-yank-media-handler-for-LibreOffice-Calc-tables.patch --]
[-- Type: text/x-diff, Size: 4499 bytes --]
From 39aeafc4b748110562044e9488097bf0b8de3a64 Mon Sep 17 00:00:00 2001
From: Visuwesh <visuweshm@gmail.com>
Date: Mon, 14 Oct 2024 22:04:23 +0530
Subject: [PATCH] Add `yank-media' handler for LibreOffice Calc tables
* lisp/org.el (org--libreoffice-table-handler): Add new `yank-media'
handler for tables copied from LibreOffice Calc documents.
(org-setup-yank-dnd-handlers): Register it.
* doc/org-manual.org: (Drag and Drop & ~yank-media~): Update the
manual to mention the new feature.
* etc/ORG-NEWS: Announce the new feature.
---
doc/org-manual.org | 6 +++++-
etc/ORG-NEWS | 5 +++++
lisp/org.el | 27 ++++++++++++++++++++++++++-
3 files changed, 36 insertions(+), 2 deletions(-)
diff --git a/doc/org-manual.org b/doc/org-manual.org
index 451fd72cd..8a58b9966 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -21640,7 +21640,8 @@ value as ~org-attach-method~ (~cp~ by default).]
#+cindex: pasting files, images from clipboard
Starting from Emacs 29, Org mode supports ~yank-media~ command to yank
-images from the clipboard and files from a file manager.
+images from the clipboard, files from a file manager and tables copied
+from LibreOffice Calc documents.
#+vindex: org-yank-image-save-method
When yanking images from clipboard, Org saves the image on disk and
@@ -21658,6 +21659,9 @@ of ~org-yank-dnd-method~. Image files pasted this way also respect
the value of ~org-yank-image-save-method~ when the action to perform
is =attach=.
+Tables copied from LibreOffice Calc documents are yanked as Org
+tables.
+
** Repeating commands
:PROPERTIES:
:DESCRIPTION: Repeating navigation commands
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 5d421172f..37ee9a52f 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -114,6 +114,11 @@ The keybindings in the repeat-maps can be changed by customizing
See the new [[info:org#Repeating commands]["Repeating commands"]] section in Org mode manual.
+*** Tables copied from LibreOffice Calc documents can be pasted as Org tables
+
+Tables copied into the clipboard from LibreOffice Calc documents can
+now be pasted as an Org table using ~yank-media~.
+
** New and changed options
# Chanes deadling with changing default values of customizations,
diff --git a/lisp/org.el b/lisp/org.el
index 6177856c3..1c08e6300 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -20860,7 +20860,9 @@ (defun org-setup-yank-dnd-handlers ()
;; Looks like different DEs go for different handler names,
;; https://larsee.com/blog/2019/05/clipboard-files/.
(yank-media-handler "x/special-\\(?:gnome\\|KDE\\|mate\\)-files"
- #'org--copied-files-yank-media-handler))
+ #'org--copied-files-yank-media-handler)
+ (yank-media-handler "application/x-libreoffice-tsvc"
+ #'org--libreoffice-table-handler))
(when (boundp 'x-dnd-direct-save-function)
(setq-local x-dnd-direct-save-function #'org--dnd-xds-function)))
@@ -20953,6 +20955,29 @@ (defun org--copied-files-yank-media-handler (_mimetype data)
(org--dnd-local-file-handler f action sep)
(message "File `%s' is not readable, skipping" f)))))
+(defun org--libreoffice-table-handler (_mimetype data)
+ "Insert LibreOffice Calc table DATA as an Org table.
+DATA is in the TSV format."
+ ;; Some LibreOffice versions have the null byte in the selection.
+ ;; It should be safe to remove it.
+ (when (string-search "\0" data)
+ (setq data (string-replace "\0" "" data)))
+ (let ((orig-buf (current-buffer)))
+ (with-temp-buffer
+ (decode-coding-string data 'undecided nil (current-buffer))
+ (let ((tmp (current-buffer))
+ (nlines (count-lines (point-min) (point-max))))
+ (when (> nlines org-table-convert-region-max-lines)
+ (unless (yes-or-no-p
+ (format "Inserting large table with %d lines, more than `org-table-convert-region-max-lines'. Continue? "
+ nlines))
+ (user-error "Table is larger than limit `org-table-convert-region-max-lines'")))
+ ;; User has chosen to ignore the limit.
+ (let ((org-table-convert-region-max-lines most-positive-fixnum))
+ (org-table-convert-region (point-min) (point-max)))
+ (with-current-buffer orig-buf
+ (insert-buffer-substring tmp))))))
+
(defcustom org-yank-dnd-method 'ask
"Action to perform on the dropped and the pasted files.
When the value is the symbol,
--
2.45.2
next prev parent reply other threads:[~2024-12-24 2:54 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-14 16:36 [PATCH] Add yank-media handler for LibreOffice Calc tables Visuwesh
2024-10-14 18:58 ` Ihor Radchenko
2024-10-15 5:57 ` Visuwesh
2024-10-15 18:42 ` Ihor Radchenko
2024-10-17 17:19 ` Visuwesh
2024-10-17 17:37 ` Ihor Radchenko
2024-10-18 16:45 ` Visuwesh
2024-10-19 7:10 ` Ihor Radchenko
2024-10-19 7:36 ` Visuwesh
2024-10-19 7:08 ` Ihor Radchenko
2024-10-19 7:35 ` Visuwesh
2024-10-19 7:42 ` Ihor Radchenko
2024-10-19 8:45 ` Visuwesh
2024-10-19 8:51 ` Ihor Radchenko
2024-10-19 9:06 ` Visuwesh
2024-10-19 10:09 ` Rens Oliemans
2024-10-19 10:36 ` Visuwesh
2024-10-21 8:51 ` Rens Oliemans
2024-10-21 10:34 ` Visuwesh
2024-11-29 14:05 ` Visuwesh
2024-12-23 18:01 ` Ihor Radchenko
2024-12-24 2:53 ` Visuwesh [this message]
2024-12-24 9:19 ` Ihor Radchenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=878qs5bxm2.fsf@gmail.com \
--to=visuweshm@gmail.com \
--cc=emacs-orgmode@gnu.org \
--cc=hallo@rensoliemans.nl \
--cc=yantar92@posteo.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).