all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#65892: 30.0.50; yank-media fails for clipboard selection that are wiped after being accessed
@ 2023-09-12 16:54 Visuwesh
  2024-06-24  3:53 ` Visuwesh
  0 siblings, 1 reply; 10+ messages in thread
From: Visuwesh @ 2023-09-12 16:54 UTC (permalink / raw)
  To: 65892

[-- Attachment #1: Type: text/plain, Size: 2375 bytes --]

To reproduce the bug,

    1. Install pcmanfm
    2. emacs -Q
    3. Eval the following lines 

    (defun vz/message-yank-media-copied-files-handler (_ data)
      "Attach files copied/cut from the file manager.
    DATA is a string where the first line is the operation to
    perform: copy or cut.  Rest are file: links.  The operation is
    always ignored, and the files are only attached."
      (let* ((files (cdr (split-string data "[\0\n\r]" t "^file://"))))
        (dolist (f files)
          (mml-attach-file f (or (mm-default-file-type f) "application/octet-stream")))))

     (add-hook 'message-mode-hook
               (defun vz/message-register-yank-media-handler ()
                 (yank-media-handler "x-special/gnome-copied-files"
                                     #'vz/message-yank-media-copied-files-handler)))
    4. C-x m
    5. Cut a file from pcmanfm using C-x
    6. In Emacs, choose the message-mode buffer and say M-x yank-media
    7. Witness the wrong-type-argument error

This happens because pcmanfm "wipes" the clipboard data it is accessed
once.  This is a problem because yank-media uses
yank-media--get-selection to access the clipboard data twice

    · Once in yank-media--find-matching-media to find out if the
      buffer's registered handlers can work with the data (see
      pcase-dolist form in yank-media function).  At this point,
      vz/message-register-yank-media-handler is chosen since it can
      handle x-special/gnome-copied-files (which is the type used for
      the cut file).

    · Second when yank-media calls the handler to do its thing, which
      can be seen in the funcall forms in yank-media function again.

The problem here is that once yank-media--find-matching-media calls
yank-media--get-selection to get the clipboard selection, pcmanfm wipes
the clipboard so when yank-media calls that function again and passes
the return value to the handler, the handler receives nil.

The attached patch fixes this issue by making
yank-media--find-matching-media return the selection value, and passing
the returned value to the handler avoiding calling
yank-media--get-selection again.

P.S. I don't know if it is a problem with other file managers.
P.P.S. I plan on submitting a patch to add the yank-media-handler here
       once this bug is fixed.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Fix-yank-media-when-clipboard-selection-is-wiped-aft.patch --]
[-- Type: text/x-diff, Size: 3339 bytes --]

From f059e0ad33bad47ab14259c9ca4391152349548b Mon Sep 17 00:00:00 2001
From: Visuwesh <visuweshm@gmail.com>
Date: Tue, 12 Sep 2023 22:21:58 +0530
Subject: [PATCH] Fix yank-media when clipboard selection is wiped after access

Certain applications wipes the clipboard selection after is accessed
once e.g., pcmanfm with cut files which makes yank-media pass nil to
the chosen yank-media handler eventually breaking it.

* lisp/yank-media.el (yank-media--find-matching-media): Make it return
the selection.
(yank-media): Pass the returned selection to the handler instead.
---
 lisp/yank-media.el | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/lisp/yank-media.el b/lisp/yank-media.el
index abc137d9c38..bb9880047dc 100644
--- a/lisp/yank-media.el
+++ b/lisp/yank-media.el
@@ -44,26 +44,26 @@ yank-media
   (let ((all-types nil))
     (pcase-dolist (`(,handled-type . ,handler)
                    yank-media--registered-handlers)
-      (dolist (type (yank-media--find-matching-media handled-type))
-        (push (cons type handler) all-types)))
+      (pcase-dolist (`(,type . ,selection) (yank-media--find-matching-media handled-type))
+        (push (list type handler selection) all-types)))
     (unless all-types
       (user-error
        "No handler in the current buffer for anything on the clipboard"))
     ;; We have a handler in the current buffer; if there's just
     ;; matching type, just call the handler.
     (if (length= all-types 1)
-        (funcall (cdar all-types) (caar all-types)
-                 (yank-media--get-selection (caar all-types)))
+        (funcall (cadar all-types) (caar all-types)
+                 (caddar all-types))
       ;; More than one type the user for what type to insert.
       (let ((type
              (intern
               (completing-read "Several types available, choose one: "
                                (mapcar #'car all-types) nil t))))
-        (funcall (alist-get type all-types)
-                 type (yank-media--get-selection type))))))
+        (funcall (car (alist-get type all-types))
+                 type (cadr (alist-get type all-types)))))))
 
 (defun yank-media--find-matching-media (handled-type)
-  (seq-filter
+  (seq-keep
    (lambda (type)
      (pcase-let ((`(,major ,minor) (split-string (symbol-name type) "/")))
        (if (and (equal major "image")
@@ -73,11 +73,13 @@ yank-media--find-matching-media
            ;; `image/x-win-bitmap'.
            nil
          ;; Check that the handler wants this type.
-         (and (if (symbolp handled-type)
-                  (eq handled-type type)
-                (string-match-p handled-type (symbol-name type)))
-              ;; An element may be in TARGETS but be empty.
-              (yank-media--get-selection type)))))
+         (let ((selection (and (if (symbolp handled-type)
+                                   (eq handled-type type)
+                                 (string-match-p handled-type (symbol-name type)))
+                               ;; An element may be in TARGETS but be empty.
+                               (yank-media--get-selection type))))
+           (and selection
+                (cons type selection))))))
    (gui-get-selection 'CLIPBOARD 'TARGETS)))
 
 (defun yank-media--get-selection (data-type)
-- 
2.40.1


[-- Attachment #3: Type: text/plain, Size: 37854 bytes --]



In GNU Emacs 30.0.50 (build 7, x86_64-pc-linux-gnu, X toolkit, Xaw
 scroll bars) of 2023-09-10 built on astatine
Repository revision: af1e860570191014d94484d6944348b1766ba59f
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101008
System Description: Debian GNU/Linux trixie/sid

Configured using:
 'configure --with-sound=alsa --with-x-toolkit=lucid --with-json
 --without-xaw3d --without-gconf --without-libsystemd --without-cairo'
Configured features:
ACL DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG JSON
LIBOTF LIBSELINUX LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG RSVG
SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS WEBP X11 XDBE XFT
XIM XINPUT2 XPM LUCID ZLIB
Important settings:
  value of $LC_MONETARY: ta_IN.UTF-8
  value of $LC_NUMERIC: ta_IN.UTF-8
  value of $LANG: en_GB.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Diff

Minor modes in effect:
  whitespace-mode: t
  TeX-PDF-mode: t
  recentf-mode: t
  server-mode: t
  eros-mode: t
  pdf-occur-global-minor-mode: t
  minibuffer-depth-indicate-mode: t
  repeat-mode: t
  display-time-mode: t
  display-battery-mode: t
  delete-selection-mode: t
  xterm-mouse-mode: t
  straight-use-package-mode: t
  straight-package-neutering-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  use-hard-newlines: t
  tab-bar-history-mode: t
  tab-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  undelete-frame-mode: t
  minibuffer-regexp-mode: t
  buffer-read-only: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
/home/viz/lib/emacs/straight/build/org/ob-awk hides /home/viz/lib/emacs/straight/build/org-mode/ob-awk
/home/viz/lib/emacs/straight/build/org/org-capture hides /home/viz/lib/emacs/straight/build/org-mode/org-capture
/home/viz/lib/emacs/straight/build/org/ob-sql hides /home/viz/lib/emacs/straight/build/org-mode/ob-sql
/home/viz/lib/emacs/straight/build/org/ol-doi hides /home/viz/lib/emacs/straight/build/org-mode/ol-doi
/home/viz/lib/emacs/straight/build/org/org-latex-preview hides /home/viz/lib/emacs/straight/build/org-mode/org-latex-preview
/home/viz/lib/emacs/straight/build/org/org-plot hides /home/viz/lib/emacs/straight/build/org-mode/org-plot
/home/viz/lib/emacs/straight/build/org/ob-dot hides /home/viz/lib/emacs/straight/build/org-mode/ob-dot
/home/viz/lib/emacs/straight/build/org/ol-eshell hides /home/viz/lib/emacs/straight/build/org-mode/ol-eshell
/home/viz/lib/emacs/straight/build/org/ob-C hides /home/viz/lib/emacs/straight/build/org-mode/ob-C
/home/viz/lib/emacs/straight/build/org/ob-ref hides /home/viz/lib/emacs/straight/build/org-mode/ob-ref
/home/viz/lib/emacs/straight/build/org/ox-mathml hides /home/viz/lib/emacs/straight/build/org-mode/ox-mathml
/home/viz/lib/emacs/straight/build/org/org-list hides /home/viz/lib/emacs/straight/build/org-mode/org-list
/home/viz/lib/emacs/straight/build/org/org-mouse hides /home/viz/lib/emacs/straight/build/org-mode/org-mouse
/home/viz/lib/emacs/straight/build/org/ob-haskell hides /home/viz/lib/emacs/straight/build/org-mode/ob-haskell
/home/viz/lib/emacs/straight/build/org/ob-plantuml hides /home/viz/lib/emacs/straight/build/org-mode/ob-plantuml
/home/viz/lib/emacs/straight/build/org/org-keys hides /home/viz/lib/emacs/straight/build/org-mode/org-keys
/home/viz/lib/emacs/straight/build/org/org-clock hides /home/viz/lib/emacs/straight/build/org-mode/org-clock
/home/viz/lib/emacs/straight/build/org/ox-html hides /home/viz/lib/emacs/straight/build/org-mode/ox-html
/home/viz/lib/emacs/straight/build/org/oc-biblatex hides /home/viz/lib/emacs/straight/build/org-mode/oc-biblatex
/home/viz/lib/emacs/straight/build/org/ob-table hides /home/viz/lib/emacs/straight/build/org-mode/ob-table
/home/viz/lib/emacs/straight/build/org/ob hides /home/viz/lib/emacs/straight/build/org-mode/ob
/home/viz/lib/emacs/straight/build/org/ol-w3m hides /home/viz/lib/emacs/straight/build/org-mode/ol-w3m
/home/viz/lib/emacs/straight/build/org/ob-groovy hides /home/viz/lib/emacs/straight/build/org-mode/ob-groovy
/home/viz/lib/emacs/straight/build/org/org-footnote hides /home/viz/lib/emacs/straight/build/org-mode/org-footnote
/home/viz/lib/emacs/straight/build/org/org-entities hides /home/viz/lib/emacs/straight/build/org-mode/org-entities
/home/viz/lib/emacs/straight/build/org/ob-org hides /home/viz/lib/emacs/straight/build/org-mode/ob-org
/home/viz/lib/emacs/straight/build/org/org-macs hides /home/viz/lib/emacs/straight/build/org-mode/org-macs
/home/viz/lib/emacs/straight/build/org/ob-shell hides /home/viz/lib/emacs/straight/build/org-mode/ob-shell
/home/viz/lib/emacs/straight/build/org/ob-R hides /home/viz/lib/emacs/straight/build/org-mode/ob-R
/home/viz/lib/emacs/straight/build/org/ob-lisp hides /home/viz/lib/emacs/straight/build/org-mode/ob-lisp
/home/viz/lib/emacs/straight/build/org/ob-js hides /home/viz/lib/emacs/straight/build/org-mode/ob-js
/home/viz/lib/emacs/straight/build/org/ob-maxima hides /home/viz/lib/emacs/straight/build/org-mode/ob-maxima
/home/viz/lib/emacs/straight/build/org/org-element-ast hides /home/viz/lib/emacs/straight/build/org-mode/org-element-ast
/home/viz/lib/emacs/straight/build/org/ox-ascii hides /home/viz/lib/emacs/straight/build/org-mode/ox-ascii
/home/viz/lib/emacs/straight/build/org/org-persist hides /home/viz/lib/emacs/straight/build/org-mode/org-persist
/home/viz/lib/emacs/straight/build/org/ox-md hides /home/viz/lib/emacs/straight/build/org-mode/ox-md
/home/viz/lib/emacs/straight/build/org/org-duration hides /home/viz/lib/emacs/straight/build/org-mode/org-duration
/home/viz/lib/emacs/straight/build/org/ob-lilypond hides /home/viz/lib/emacs/straight/build/org-mode/ob-lilypond
/home/viz/lib/emacs/straight/build/org/ob-ruby hides /home/viz/lib/emacs/straight/build/org-mode/ob-ruby
/home/viz/lib/emacs/straight/build/org/ob-core hides /home/viz/lib/emacs/straight/build/org-mode/ob-core
/home/viz/lib/emacs/straight/build/org/ol-mhe hides /home/viz/lib/emacs/straight/build/org-mode/ol-mhe
/home/viz/lib/emacs/straight/build/org/ob-ditaa hides /home/viz/lib/emacs/straight/build/org-mode/ob-ditaa
/home/viz/lib/emacs/straight/build/org/ol-irc hides /home/viz/lib/emacs/straight/build/org-mode/ol-irc
/home/viz/lib/emacs/straight/build/org/ob-fortran hides /home/viz/lib/emacs/straight/build/org-mode/ob-fortran
/home/viz/lib/emacs/straight/build/org/org-feed hides /home/viz/lib/emacs/straight/build/org-mode/org-feed
/home/viz/lib/emacs/straight/build/org/ob-java hides /home/viz/lib/emacs/straight/build/org-mode/ob-java
/home/viz/lib/emacs/straight/build/org/ox hides /home/viz/lib/emacs/straight/build/org-mode/ox
/home/viz/lib/emacs/straight/build/org/oc-csl hides /home/viz/lib/emacs/straight/build/org-mode/oc-csl
/home/viz/lib/emacs/straight/build/org/ob-exp hides /home/viz/lib/emacs/straight/build/org-mode/ob-exp
/home/viz/lib/emacs/straight/build/org/ob-scheme hides /home/viz/lib/emacs/straight/build/org-mode/ob-scheme
/home/viz/lib/emacs/straight/build/org/ob-tangle hides /home/viz/lib/emacs/straight/build/org-mode/ob-tangle
/home/viz/lib/emacs/straight/build/org/ox-koma-letter hides /home/viz/lib/emacs/straight/build/org-mode/ox-koma-letter
/home/viz/lib/emacs/straight/build/org/ob-gnuplot hides /home/viz/lib/emacs/straight/build/org-mode/ob-gnuplot
/home/viz/lib/emacs/straight/build/org/org-crypt hides /home/viz/lib/emacs/straight/build/org-mode/org-crypt
/home/viz/lib/emacs/straight/build/org/org-datetree hides /home/viz/lib/emacs/straight/build/org-mode/org-datetree
/home/viz/lib/emacs/straight/build/org/org-attach hides /home/viz/lib/emacs/straight/build/org-mode/org-attach
/home/viz/lib/emacs/straight/build/org/ob-julia hides /home/viz/lib/emacs/straight/build/org-mode/ob-julia
/home/viz/lib/emacs/straight/build/org/ob-sqlite hides /home/viz/lib/emacs/straight/build/org-mode/ob-sqlite
/home/viz/lib/emacs/straight/build/org/org-cycle hides /home/viz/lib/emacs/straight/build/org-mode/org-cycle
/home/viz/lib/emacs/straight/build/org/org-faces hides /home/viz/lib/emacs/straight/build/org-mode/org-faces
/home/viz/lib/emacs/straight/build/org/org-mobile hides /home/viz/lib/emacs/straight/build/org-mode/org-mobile
/home/viz/lib/emacs/straight/build/org/org-ctags hides /home/viz/lib/emacs/straight/build/org-mode/org-ctags
/home/viz/lib/emacs/straight/build/org/ob-latex hides /home/viz/lib/emacs/straight/build/org-mode/ob-latex
/home/viz/lib/emacs/straight/build/org/ob-matlab hides /home/viz/lib/emacs/straight/build/org-mode/ob-matlab
/home/viz/lib/emacs/straight/build/org/ob-sed hides /home/viz/lib/emacs/straight/build/org-mode/ob-sed
/home/viz/lib/emacs/straight/build/org/org-attach-git hides /home/viz/lib/emacs/straight/build/org-mode/org-attach-git
/home/viz/lib/emacs/straight/build/org/ob-python hides /home/viz/lib/emacs/straight/build/org-mode/ob-python
/home/viz/lib/emacs/straight/build/org/ox-icalendar hides /home/viz/lib/emacs/straight/build/org-mode/ox-icalendar
/home/viz/lib/emacs/straight/build/org/org-tempo hides /home/viz/lib/emacs/straight/build/org-mode/org-tempo
/home/viz/lib/emacs/straight/build/org/ob-screen hides /home/viz/lib/emacs/straight/build/org-mode/ob-screen
/home/viz/lib/emacs/straight/build/org/org-num hides /home/viz/lib/emacs/straight/build/org-mode/org-num
/home/viz/lib/emacs/straight/build/org/ob-forth hides /home/viz/lib/emacs/straight/build/org-mode/ob-forth
/home/viz/lib/emacs/straight/build/org/ox-odt hides /home/viz/lib/emacs/straight/build/org-mode/ox-odt
/home/viz/lib/emacs/straight/build/org/ol-bbdb hides /home/viz/lib/emacs/straight/build/org-mode/ol-bbdb
/home/viz/lib/emacs/straight/build/org/org-table hides /home/viz/lib/emacs/straight/build/org-mode/org-table
/home/viz/lib/emacs/straight/build/org/ox-man hides /home/viz/lib/emacs/straight/build/org-mode/ox-man
/home/viz/lib/emacs/straight/build/org/ox-org hides /home/viz/lib/emacs/straight/build/org-mode/ox-org
/home/viz/lib/emacs/straight/build/org/ob-comint hides /home/viz/lib/emacs/straight/build/org-mode/ob-comint
/home/viz/lib/emacs/straight/build/org/ob-clojure hides /home/viz/lib/emacs/straight/build/org-mode/ob-clojure
/home/viz/lib/emacs/straight/build/org/org-id hides /home/viz/lib/emacs/straight/build/org-mode/org-id
/home/viz/lib/emacs/straight/build/org/oc-natbib hides /home/viz/lib/emacs/straight/build/org-mode/oc-natbib
/home/viz/lib/emacs/straight/build/org/ox-texinfo hides /home/viz/lib/emacs/straight/build/org-mode/ox-texinfo
/home/viz/lib/emacs/straight/build/org/org-agenda hides /home/viz/lib/emacs/straight/build/org-mode/org-agenda
/home/viz/lib/emacs/straight/build/org/org-src hides /home/viz/lib/emacs/straight/build/org-mode/org-src
/home/viz/lib/emacs/straight/build/org/ob-emacs-lisp hides /home/viz/lib/emacs/straight/build/org-mode/ob-emacs-lisp
/home/viz/lib/emacs/straight/build/org/ob-css hides /home/viz/lib/emacs/straight/build/org-mode/ob-css
/home/viz/lib/emacs/straight/build/org/ox-latex hides /home/viz/lib/emacs/straight/build/org-mode/ox-latex
/home/viz/lib/emacs/straight/build/org/oc hides /home/viz/lib/emacs/straight/build/org-mode/oc
/home/viz/lib/emacs/straight/build/org/ol hides /home/viz/lib/emacs/straight/build/org-mode/ol
/home/viz/lib/emacs/straight/build/org/org-element hides /home/viz/lib/emacs/straight/build/org-mode/org-element
/home/viz/lib/emacs/straight/build/org/org hides /home/viz/lib/emacs/straight/build/org-mode/org
/home/viz/lib/emacs/straight/build/org/org-goto hides /home/viz/lib/emacs/straight/build/org-mode/org-goto
/home/viz/lib/emacs/straight/build/org/ob-eval hides /home/viz/lib/emacs/straight/build/org-mode/ob-eval
/home/viz/lib/emacs/straight/build/org/org-habit hides /home/viz/lib/emacs/straight/build/org-mode/org-habit
/home/viz/lib/emacs/straight/build/org/org-pcomplete hides /home/viz/lib/emacs/straight/build/org-mode/org-pcomplete
/home/viz/lib/emacs/straight/build/org/ol-eww hides /home/viz/lib/emacs/straight/build/org-mode/ol-eww
/home/viz/lib/emacs/straight/build/org/ob-processing hides /home/viz/lib/emacs/straight/build/org-mode/ob-processing
/home/viz/lib/emacs/straight/build/org/org-timer hides /home/viz/lib/emacs/straight/build/org-mode/org-timer
/home/viz/lib/emacs/straight/build/org/org-inlinetask hides /home/viz/lib/emacs/straight/build/org-mode/org-inlinetask
/home/viz/lib/emacs/straight/build/org/ol-bibtex hides /home/viz/lib/emacs/straight/build/org-mode/ol-bibtex
/home/viz/lib/emacs/straight/build/org/org-fold-core hides /home/viz/lib/emacs/straight/build/org-mode/org-fold-core
/home/viz/lib/emacs/straight/build/org/oc-basic hides /home/viz/lib/emacs/straight/build/org-mode/oc-basic
/home/viz/lib/emacs/straight/build/org/ox-publish hides /home/viz/lib/emacs/straight/build/org-mode/ox-publish
/home/viz/lib/emacs/straight/build/org/oc-bibtex hides /home/viz/lib/emacs/straight/build/org-mode/oc-bibtex
/home/viz/lib/emacs/straight/build/org/org-macro hides /home/viz/lib/emacs/straight/build/org-mode/org-macro
/home/viz/lib/emacs/straight/build/org/ol-docview hides /home/viz/lib/emacs/straight/build/org-mode/ol-docview
/home/viz/lib/emacs/straight/build/org/org-fold hides /home/viz/lib/emacs/straight/build/org-mode/org-fold
/home/viz/lib/emacs/straight/build/org/org-lint hides /home/viz/lib/emacs/straight/build/org-mode/org-lint
/home/viz/lib/emacs/straight/build/org/org-version hides /home/viz/lib/emacs/straight/build/org-mode/org-version
/home/viz/lib/emacs/straight/build/org/ob-ocaml hides /home/viz/lib/emacs/straight/build/org-mode/ob-ocaml
/home/viz/lib/emacs/straight/build/org/ob-sass hides /home/viz/lib/emacs/straight/build/org-mode/ob-sass
/home/viz/lib/emacs/straight/build/org/ob-perl hides /home/viz/lib/emacs/straight/build/org-mode/ob-perl
/home/viz/lib/emacs/straight/build/org/ol-rmail hides /home/viz/lib/emacs/straight/build/org-mode/ol-rmail
/home/viz/lib/emacs/straight/build/org/org-protocol hides /home/viz/lib/emacs/straight/build/org-mode/org-protocol
/home/viz/lib/emacs/straight/build/org/ol-info hides /home/viz/lib/emacs/straight/build/org-mode/ol-info
/home/viz/lib/emacs/straight/build/org/ob-eshell hides /home/viz/lib/emacs/straight/build/org-mode/ob-eshell
/home/viz/lib/emacs/straight/build/org/org-refile hides /home/viz/lib/emacs/straight/build/org-mode/org-refile
/home/viz/lib/emacs/straight/build/org/ob-octave hides /home/viz/lib/emacs/straight/build/org-mode/ob-octave
/home/viz/lib/emacs/straight/build/org/ob-lua hides /home/viz/lib/emacs/straight/build/org-mode/ob-lua
/home/viz/lib/emacs/straight/build/org/ol-gnus hides /home/viz/lib/emacs/straight/build/org-mode/ol-gnus
/home/viz/lib/emacs/straight/build/org/ob-makefile hides /home/viz/lib/emacs/straight/build/org-mode/ob-makefile
/home/viz/lib/emacs/straight/build/org/org-archive hides /home/viz/lib/emacs/straight/build/org-mode/org-archive
/home/viz/lib/emacs/straight/build/org/ob-lob hides /home/viz/lib/emacs/straight/build/org-mode/ob-lob
/home/viz/lib/emacs/straight/build/org/ol-man hides /home/viz/lib/emacs/straight/build/org-mode/ol-man
/home/viz/lib/emacs/straight/build/org/org-compat hides /home/viz/lib/emacs/straight/build/org-mode/org-compat
/home/viz/lib/emacs/straight/build/org/org-colview hides /home/viz/lib/emacs/straight/build/org-mode/org-colview
/home/viz/lib/emacs/straight/build/org/org-indent hides /home/viz/lib/emacs/straight/build/org-mode/org-indent
/home/viz/lib/emacs/straight/build/org/ox-beamer hides /home/viz/lib/emacs/straight/build/org-mode/ox-beamer
/home/viz/lib/emacs/straight/build/org/org-loaddefs hides /home/viz/lib/emacs/straight/build/org-mode/org-loaddefs
/home/viz/lib/emacs/straight/build/org/ob-calc hides /home/viz/lib/emacs/straight/build/org-mode/ob-calc
/home/viz/lib/emacs/straight/build/transient/transient hides /home/viz/lib/ports/emacs/lisp/transient
/home/viz/lib/emacs/straight/build/org/ob-awk hides /home/viz/lib/ports/emacs/lisp/org/ob-awk
/home/viz/lib/emacs/straight/build/org/org-capture hides /home/viz/lib/ports/emacs/lisp/org/org-capture
/home/viz/lib/emacs/straight/build/org/ob-sql hides /home/viz/lib/ports/emacs/lisp/org/ob-sql
/home/viz/lib/emacs/straight/build/org/ol-doi hides /home/viz/lib/ports/emacs/lisp/org/ol-doi
/home/viz/lib/emacs/straight/build/org/org-plot hides /home/viz/lib/ports/emacs/lisp/org/org-plot
/home/viz/lib/emacs/straight/build/org/ob-dot hides /home/viz/lib/ports/emacs/lisp/org/ob-dot
/home/viz/lib/emacs/straight/build/org/ol-eshell hides /home/viz/lib/ports/emacs/lisp/org/ol-eshell
/home/viz/lib/emacs/straight/build/org/ob-C hides /home/viz/lib/ports/emacs/lisp/org/ob-C
/home/viz/lib/emacs/straight/build/org/ob-ref hides /home/viz/lib/ports/emacs/lisp/org/ob-ref
/home/viz/lib/emacs/straight/build/org/org-list hides /home/viz/lib/ports/emacs/lisp/org/org-list
/home/viz/lib/emacs/straight/build/org/org-mouse hides /home/viz/lib/ports/emacs/lisp/org/org-mouse
/home/viz/lib/emacs/straight/build/org/ob-haskell hides /home/viz/lib/ports/emacs/lisp/org/ob-haskell
/home/viz/lib/emacs/straight/build/org/ob-plantuml hides /home/viz/lib/ports/emacs/lisp/org/ob-plantuml
/home/viz/lib/emacs/straight/build/org/org-keys hides /home/viz/lib/ports/emacs/lisp/org/org-keys
/home/viz/lib/emacs/straight/build/org/org-clock hides /home/viz/lib/ports/emacs/lisp/org/org-clock
/home/viz/lib/emacs/straight/build/org/ox-html hides /home/viz/lib/ports/emacs/lisp/org/ox-html
/home/viz/lib/emacs/straight/build/org/oc-biblatex hides /home/viz/lib/ports/emacs/lisp/org/oc-biblatex
/home/viz/lib/emacs/straight/build/org/ob-table hides /home/viz/lib/ports/emacs/lisp/org/ob-table
/home/viz/lib/emacs/straight/build/org/ob hides /home/viz/lib/ports/emacs/lisp/org/ob
/home/viz/lib/emacs/straight/build/org/ol-w3m hides /home/viz/lib/ports/emacs/lisp/org/ol-w3m
/home/viz/lib/emacs/straight/build/org/ob-groovy hides /home/viz/lib/ports/emacs/lisp/org/ob-groovy
/home/viz/lib/emacs/straight/build/org/org-footnote hides /home/viz/lib/ports/emacs/lisp/org/org-footnote
/home/viz/lib/emacs/straight/build/org/org-entities hides /home/viz/lib/ports/emacs/lisp/org/org-entities
/home/viz/lib/emacs/straight/build/org/ob-org hides /home/viz/lib/ports/emacs/lisp/org/ob-org
/home/viz/lib/emacs/straight/build/org/org-macs hides /home/viz/lib/ports/emacs/lisp/org/org-macs
/home/viz/lib/emacs/straight/build/org/ob-shell hides /home/viz/lib/ports/emacs/lisp/org/ob-shell
/home/viz/lib/emacs/straight/build/org/ob-R hides /home/viz/lib/ports/emacs/lisp/org/ob-R
/home/viz/lib/emacs/straight/build/org/ob-lisp hides /home/viz/lib/ports/emacs/lisp/org/ob-lisp
/home/viz/lib/emacs/straight/build/org/ob-js hides /home/viz/lib/ports/emacs/lisp/org/ob-js
/home/viz/lib/emacs/straight/build/org/ob-maxima hides /home/viz/lib/ports/emacs/lisp/org/ob-maxima
/home/viz/lib/emacs/straight/build/org/ox-ascii hides /home/viz/lib/ports/emacs/lisp/org/ox-ascii
/home/viz/lib/emacs/straight/build/org/org-persist hides /home/viz/lib/ports/emacs/lisp/org/org-persist
/home/viz/lib/emacs/straight/build/org/ox-md hides /home/viz/lib/ports/emacs/lisp/org/ox-md
/home/viz/lib/emacs/straight/build/org/org-duration hides /home/viz/lib/ports/emacs/lisp/org/org-duration
/home/viz/lib/emacs/straight/build/org/ob-lilypond hides /home/viz/lib/ports/emacs/lisp/org/ob-lilypond
/home/viz/lib/emacs/straight/build/org/ob-ruby hides /home/viz/lib/ports/emacs/lisp/org/ob-ruby
/home/viz/lib/emacs/straight/build/org/ob-core hides /home/viz/lib/ports/emacs/lisp/org/ob-core
/home/viz/lib/emacs/straight/build/org/ol-mhe hides /home/viz/lib/ports/emacs/lisp/org/ol-mhe
/home/viz/lib/emacs/straight/build/org/ob-ditaa hides /home/viz/lib/ports/emacs/lisp/org/ob-ditaa
/home/viz/lib/emacs/straight/build/org/ol-irc hides /home/viz/lib/ports/emacs/lisp/org/ol-irc
/home/viz/lib/emacs/straight/build/org/ob-fortran hides /home/viz/lib/ports/emacs/lisp/org/ob-fortran
/home/viz/lib/emacs/straight/build/org/org-feed hides /home/viz/lib/ports/emacs/lisp/org/org-feed
/home/viz/lib/emacs/straight/build/org/ob-java hides /home/viz/lib/ports/emacs/lisp/org/ob-java
/home/viz/lib/emacs/straight/build/org/ox hides /home/viz/lib/ports/emacs/lisp/org/ox
/home/viz/lib/emacs/straight/build/org/oc-csl hides /home/viz/lib/ports/emacs/lisp/org/oc-csl
/home/viz/lib/emacs/straight/build/org/ob-exp hides /home/viz/lib/ports/emacs/lisp/org/ob-exp
/home/viz/lib/emacs/straight/build/org/org-loaddefs hides /home/viz/lib/ports/emacs/lisp/org/org-loaddefs
/home/viz/lib/emacs/straight/build/org/ob-scheme hides /home/viz/lib/ports/emacs/lisp/org/ob-scheme
/home/viz/lib/emacs/straight/build/org/ob-tangle hides /home/viz/lib/ports/emacs/lisp/org/ob-tangle
/home/viz/lib/emacs/straight/build/org/ox-koma-letter hides /home/viz/lib/ports/emacs/lisp/org/ox-koma-letter
/home/viz/lib/emacs/straight/build/org/ob-gnuplot hides /home/viz/lib/ports/emacs/lisp/org/ob-gnuplot
/home/viz/lib/emacs/straight/build/org/org-crypt hides /home/viz/lib/ports/emacs/lisp/org/org-crypt
/home/viz/lib/emacs/straight/build/org/org-datetree hides /home/viz/lib/ports/emacs/lisp/org/org-datetree
/home/viz/lib/emacs/straight/build/org/org-attach hides /home/viz/lib/ports/emacs/lisp/org/org-attach
/home/viz/lib/emacs/straight/build/org/ob-julia hides /home/viz/lib/ports/emacs/lisp/org/ob-julia
/home/viz/lib/emacs/straight/build/org/ob-sqlite hides /home/viz/lib/ports/emacs/lisp/org/ob-sqlite
/home/viz/lib/emacs/straight/build/org/org-cycle hides /home/viz/lib/ports/emacs/lisp/org/org-cycle
/home/viz/lib/emacs/straight/build/org/org-faces hides /home/viz/lib/ports/emacs/lisp/org/org-faces
/home/viz/lib/emacs/straight/build/org/org-mobile hides /home/viz/lib/ports/emacs/lisp/org/org-mobile
/home/viz/lib/emacs/straight/build/org/org-ctags hides /home/viz/lib/ports/emacs/lisp/org/org-ctags
/home/viz/lib/emacs/straight/build/org/ob-latex hides /home/viz/lib/ports/emacs/lisp/org/ob-latex
/home/viz/lib/emacs/straight/build/org/ob-matlab hides /home/viz/lib/ports/emacs/lisp/org/ob-matlab
/home/viz/lib/emacs/straight/build/org/ob-sed hides /home/viz/lib/ports/emacs/lisp/org/ob-sed
/home/viz/lib/emacs/straight/build/org/org-attach-git hides /home/viz/lib/ports/emacs/lisp/org/org-attach-git
/home/viz/lib/emacs/straight/build/org/ob-python hides /home/viz/lib/ports/emacs/lisp/org/ob-python
/home/viz/lib/emacs/straight/build/org/ox-icalendar hides /home/viz/lib/ports/emacs/lisp/org/ox-icalendar
/home/viz/lib/emacs/straight/build/org/org-tempo hides /home/viz/lib/ports/emacs/lisp/org/org-tempo
/home/viz/lib/emacs/straight/build/org/ob-screen hides /home/viz/lib/ports/emacs/lisp/org/ob-screen
/home/viz/lib/emacs/straight/build/org/org-num hides /home/viz/lib/ports/emacs/lisp/org/org-num
/home/viz/lib/emacs/straight/build/org/ob-forth hides /home/viz/lib/ports/emacs/lisp/org/ob-forth
/home/viz/lib/emacs/straight/build/org/ox-odt hides /home/viz/lib/ports/emacs/lisp/org/ox-odt
/home/viz/lib/emacs/straight/build/org/ol-bbdb hides /home/viz/lib/ports/emacs/lisp/org/ol-bbdb
/home/viz/lib/emacs/straight/build/org/org-table hides /home/viz/lib/ports/emacs/lisp/org/org-table
/home/viz/lib/emacs/straight/build/org/ox-man hides /home/viz/lib/ports/emacs/lisp/org/ox-man
/home/viz/lib/emacs/straight/build/org/ox-org hides /home/viz/lib/ports/emacs/lisp/org/ox-org
/home/viz/lib/emacs/straight/build/org/ob-comint hides /home/viz/lib/ports/emacs/lisp/org/ob-comint
/home/viz/lib/emacs/straight/build/org/ob-clojure hides /home/viz/lib/ports/emacs/lisp/org/ob-clojure
/home/viz/lib/emacs/straight/build/org/org-id hides /home/viz/lib/ports/emacs/lisp/org/org-id
/home/viz/lib/emacs/straight/build/org/oc-natbib hides /home/viz/lib/ports/emacs/lisp/org/oc-natbib
/home/viz/lib/emacs/straight/build/org/ox-texinfo hides /home/viz/lib/ports/emacs/lisp/org/ox-texinfo
/home/viz/lib/emacs/straight/build/org/org-agenda hides /home/viz/lib/ports/emacs/lisp/org/org-agenda
/home/viz/lib/emacs/straight/build/org/org-src hides /home/viz/lib/ports/emacs/lisp/org/org-src
/home/viz/lib/emacs/straight/build/org/ob-emacs-lisp hides /home/viz/lib/ports/emacs/lisp/org/ob-emacs-lisp
/home/viz/lib/emacs/straight/build/org/ob-css hides /home/viz/lib/ports/emacs/lisp/org/ob-css
/home/viz/lib/emacs/straight/build/org/ox-latex hides /home/viz/lib/ports/emacs/lisp/org/ox-latex
/home/viz/lib/emacs/straight/build/org/oc hides /home/viz/lib/ports/emacs/lisp/org/oc
/home/viz/lib/emacs/straight/build/org/ol hides /home/viz/lib/ports/emacs/lisp/org/ol
/home/viz/lib/emacs/straight/build/org/org-element hides /home/viz/lib/ports/emacs/lisp/org/org-element
/home/viz/lib/emacs/straight/build/org/org hides /home/viz/lib/ports/emacs/lisp/org/org
/home/viz/lib/emacs/straight/build/org/org-goto hides /home/viz/lib/ports/emacs/lisp/org/org-goto
/home/viz/lib/emacs/straight/build/org/ob-eval hides /home/viz/lib/ports/emacs/lisp/org/ob-eval
/home/viz/lib/emacs/straight/build/org/org-habit hides /home/viz/lib/ports/emacs/lisp/org/org-habit
/home/viz/lib/emacs/straight/build/org/org-pcomplete hides /home/viz/lib/ports/emacs/lisp/org/org-pcomplete
/home/viz/lib/emacs/straight/build/org/ol-eww hides /home/viz/lib/ports/emacs/lisp/org/ol-eww
/home/viz/lib/emacs/straight/build/org/ob-processing hides /home/viz/lib/ports/emacs/lisp/org/ob-processing
/home/viz/lib/emacs/straight/build/org/org-timer hides /home/viz/lib/ports/emacs/lisp/org/org-timer
/home/viz/lib/emacs/straight/build/org/org-inlinetask hides /home/viz/lib/ports/emacs/lisp/org/org-inlinetask
/home/viz/lib/emacs/straight/build/org/ol-bibtex hides /home/viz/lib/ports/emacs/lisp/org/ol-bibtex
/home/viz/lib/emacs/straight/build/org/org-fold-core hides /home/viz/lib/ports/emacs/lisp/org/org-fold-core
/home/viz/lib/emacs/straight/build/org/oc-basic hides /home/viz/lib/ports/emacs/lisp/org/oc-basic
/home/viz/lib/emacs/straight/build/org/ox-publish hides /home/viz/lib/ports/emacs/lisp/org/ox-publish
/home/viz/lib/emacs/straight/build/org/oc-bibtex hides /home/viz/lib/ports/emacs/lisp/org/oc-bibtex
/home/viz/lib/emacs/straight/build/org/org-macro hides /home/viz/lib/ports/emacs/lisp/org/org-macro
/home/viz/lib/emacs/straight/build/org/ol-docview hides /home/viz/lib/ports/emacs/lisp/org/ol-docview
/home/viz/lib/emacs/straight/build/org/org-fold hides /home/viz/lib/ports/emacs/lisp/org/org-fold
/home/viz/lib/emacs/straight/build/org/org-lint hides /home/viz/lib/ports/emacs/lisp/org/org-lint
/home/viz/lib/emacs/straight/build/org/org-version hides /home/viz/lib/ports/emacs/lisp/org/org-version
/home/viz/lib/emacs/straight/build/org/ob-ocaml hides /home/viz/lib/ports/emacs/lisp/org/ob-ocaml
/home/viz/lib/emacs/straight/build/org/ob-sass hides /home/viz/lib/ports/emacs/lisp/org/ob-sass
/home/viz/lib/emacs/straight/build/org/ob-perl hides /home/viz/lib/ports/emacs/lisp/org/ob-perl
/home/viz/lib/emacs/straight/build/org/ol-rmail hides /home/viz/lib/ports/emacs/lisp/org/ol-rmail
/home/viz/lib/emacs/straight/build/org/org-protocol hides /home/viz/lib/ports/emacs/lisp/org/org-protocol
/home/viz/lib/emacs/straight/build/org/ol-info hides /home/viz/lib/ports/emacs/lisp/org/ol-info
/home/viz/lib/emacs/straight/build/org/ob-eshell hides /home/viz/lib/ports/emacs/lisp/org/ob-eshell
/home/viz/lib/emacs/straight/build/org/org-refile hides /home/viz/lib/ports/emacs/lisp/org/org-refile
/home/viz/lib/emacs/straight/build/org/ob-octave hides /home/viz/lib/ports/emacs/lisp/org/ob-octave
/home/viz/lib/emacs/straight/build/org/ob-lua hides /home/viz/lib/ports/emacs/lisp/org/ob-lua
/home/viz/lib/emacs/straight/build/org/ol-gnus hides /home/viz/lib/ports/emacs/lisp/org/ol-gnus
/home/viz/lib/emacs/straight/build/org/ob-makefile hides /home/viz/lib/ports/emacs/lisp/org/ob-makefile
/home/viz/lib/emacs/straight/build/org/org-archive hides /home/viz/lib/ports/emacs/lisp/org/org-archive
/home/viz/lib/emacs/straight/build/org/ob-lob hides /home/viz/lib/ports/emacs/lisp/org/ob-lob
/home/viz/lib/emacs/straight/build/org/ol-man hides /home/viz/lib/ports/emacs/lisp/org/ol-man
/home/viz/lib/emacs/straight/build/org/org-compat hides /home/viz/lib/ports/emacs/lisp/org/org-compat
/home/viz/lib/emacs/straight/build/org/org-colview hides /home/viz/lib/ports/emacs/lisp/org/org-colview
/home/viz/lib/emacs/straight/build/org/org-indent hides /home/viz/lib/ports/emacs/lisp/org/org-indent
/home/viz/lib/emacs/straight/build/org/ox-beamer hides /home/viz/lib/ports/emacs/lisp/org/ox-beamer
/home/viz/lib/emacs/straight/build/org/ob-calc hides /home/viz/lib/ports/emacs/lisp/org/ob-calc

Features:
(shadow timezone pcmpl-git emacsbug help-at-pt whitespace gnus-cus
gnus-demon gnus-diary nndiary gnus-dup gnus-fun gnus-html gnus-kill
gnus-logic gnus-mh mh-comp mh-scan mh-gnus mh-e mh-buffers mh-loaddefs
gnus-registry registry rmailsum rmail gnus-salt gnus-topic gnus-vm
printing ps-print ps-print-loaddefs lpr find-dired gnus-uu yenc lacarte
gnus-draft conf-mode emacs-news-mode gnuplot-context gnuplot molar-mass
calc-mode calc-undo calc-stuff calc-aent calc-math calc-map calc-yank
calc-vec calc-arith calc-misc calc-alg calccomp calc-incom calc-menu
calc-ext calc calc-loaddefs calc-macs rect wdired shr-color ind-util
pdf-sync pdf-outline pdf-links pdf-history pdf-roll
latex-mode-expansions latex latex-flymake tex-ispell tex-style tex
icomplete rfc2104 tramp-cache time-stamp semantic/bovine/c
semantic/db-mode semantic/decorate/include hideif semantic/bovine/c-by
semantic/lex-spp semantic/complete semantic/bovine/debug semantic/debug
semantic/edit semantic/bovine/el semantic/db-el eieio-opt semantic/sb
speedbar dframe semantic/bovine/gcc semantic/grammar semantic/grammar-wy
semantic/html html-mode-expansions sgml-mode semantic/idle
semantic/imenu semantic/db-file data-debug cedet-files
semantic/wisent/java-tags semantic/wisent/javat-wy
semantic/wisent/javascript-jv semantic/wisent/js-wy semantic/java
semantic/doc semantic/bovine/make semantic/bovine/make-by make-mode
semantic/decorate/mode semantic/decorate semantic/mru-bookmark
semantic/wisent/python semantic/wisent/python-wy semantic/analyze/refs
semantic/bovine/scm semantic/dep semantic/bovine/scm-by semantic/bovine
srecode/srt-mode semantic/analyze semantic/sort semantic/scope
semantic/analyze/fcn srecode/template srecode/srt-wy srecode/ctxt
srecode/compile srecode/dictionary srecode/fields srecode/table srecode
semantic/texi texinfo texinfo-loaddefs semantic/ctxt semantic/format
ezimage semantic/tag-ls semantic/find semantic/db-find semantic/db-ref
semantic/db eieio-base completion prescient char-fold tramp-cmds
prescient-autoloads inspector edebug grep vc-dir disass msb url-http
url-gw url-cache url-auth dired-aux gnus-dired display-line-numbers
ecomplete pcmpl-gnu etags fileloop imenu-xref view tabify man
tramp-archive tramp-gvfs flow-fill sort gnus-cite mail-extr textsec
uni-scripts idna-mapping ucs-normalize uni-confusable textsec-check
gnus-async gnus-bcklg qp gnus-ml pcmpl-unix network-stream nsm nndraft
nnmh nndoc nnmaildir nnagent nnml nnnil gnus-agent gnus-srvr gnus-score
score-mode nnvirtual gnus-msg nntp gnus-cache mm-archive
ement-tabulated-room-list ement ement-notifications ement-notify
notifications ement-room dns ement-room-list ement-lib ement-api
ement-structs plz ement-macros taxy-magit-section magit-section
benchmark taxy svg-lib persist ediff-ptch ediff ediff-merg ediff-mult
ediff-wind ediff-diff ediff-help ediff-init ediff-util autoload
loaddefs-gen expand-region text-mode-expansions cc-mode-expansions
the-org-mode-expansions python-el-fgallina-expansions
er-basic-expansions expand-region-core expand-region-custom misc
cus-start shell-command+ bug-reference info-look typo
modus-operandi-theme modus-vivendi-theme modus-themes cal-islam holidays
holiday-loaddefs cal-move reveal log-edit add-log smerge-mode mule-util
org-capture doct ob-ditaa ob-plantuml org-clock org-colview org-crypt
org-ctags org-mouse org-plot org-protocol ox-md ox-texinfo comp
comp-cstr descr-text cl-print avy pulse color help-fns radix-tree xref
misearch multi-isearch dabbrev latexenc image-file image-converter
org-ql-find org-ql-completing-read org-ql-search org-ql-view transient
ov crm org-super-agenda ht f f-shortdoc shortdoc s org-ql peg ts dash
org-habit org-duration face-remap flyspell ispell org-pdftools pdf-annot
facemenu org-noter org-num oc-basic ob-gnuplot ox-odt rng-loc rng-uri
rng-parse rng-match rng-dt rng-util rng-pttrn nxml-parse nxml-ns
nxml-enc xmltok nxml-util ox-icalendar org-agenda ox-html ox-mathml
org-latex-preview ox-latex table ox-ascii ox-publish ox org-element
org-persist avl-tree generator ob-fortran ob-python python compat
compat-macs ob-C cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles
cc-align cc-engine cc-vars cc-defs ob-shell ob-racket async ob-async
cdlatex texmathp org-attach org-id org-refile org-element-ast inline
ol-eww eww url-queue mm-url ol-rmail ol-mhe ol-irc ol-info ol-gnus
nnselect gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig
gnus-sum shr pixel-fill kinsoku url-file svg gnus-group gnus-undo
gnus-start gnus-dbus gnus-cloud nnimap nnmail mail-source utf7 nnoo
gnus-spec gnus-int gnus-range message sendmail yank-media puny rfc822
mml mml-sec epa epg rfc6068 epg-config mm-decode mm-bodies mm-encode
mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev gmm-utils
mailheader gnus-win gnus nnheader gnus-util mail-utils range mm-util
mail-prsvr ol-docview doc-view ol-bibtex ol-bbdb ol-w3m ol-doi
org-link-doi org-tempo ol-man org ob ob-tangle ob-ref ob-lob ob-table
ob-exp org-macro org-src sh-script smie treesit executable ob-comint
org-pcomplete org-list org-footnote org-faces org-entities noutline
outline ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold
org-fold-core org-keys oc org-loaddefs org-version org-compat org-macs
cursor-sensor recentf tree-widget vc-backup log-view pcvs-util vc diff
vc-git diff-mode vc-dispatcher server paredit edmacro kmacro eros
checkdoc lisp-mnt flymake-proc flymake project warnings thingatpt
wordel-autoloads mines-autoloads sokoban-autoloads ement-autoloads
svg-lib-autoloads taxy-magit-section-autoloads magit-section-autoloads
taxy-autoloads persist-autoloads plz-autoloads nov-autoloads
esxml-autoloads kv-autoloads transmission-autoloads csv-mode-autoloads
lua-mode-autoloads nix-mode-autoloads gnuplot-autoloads
go-mode-autoloads racket-mode-autoloads eros-autoloads
writegood-mode-autoloads siege-mode-autoloads paredit-autoloads
puni-autoloads expand-region-autoloads filladapt-autoloads compose
org-ql-autoloads transient-autoloads peg-autoloads ov-autoloads
org-super-agenda-autoloads ts-autoloads ht-autoloads f-autoloads
s-autoloads dash-autoloads scroll-other-window org-pdftools-autoloads
org-noter-autoloads change-env-autoloads math-delimiters-autoloads
doct-autoloads ob-async-autoloads async-autoloads
emacs-ob-racket-autoloads valign-autoloads cdlatex-autoloads
auctex-autoloads tex-site tempo bibtex pdf-occur ibuf-ext ibuffer
ibuffer-loaddefs tablist advice tablist-filter semantic/wisent/comp
semantic/wisent semantic/wisent/wisent semantic/util-modes semantic/util
semantic semantic/tag semantic/lex semantic/fw mode-local cedet
pdf-isearch let-alist pdf-misc imenu pdf-tools package browse-url url
url-proxy url-privacy url-expand url-methods url-history url-cookie
generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse
url-vars compile cus-edit wid-edit pdf-view jka-compr pdf-cache pdf-info
tq pdf-util pdf-macs image-mode dired-x dired dired-loaddefs exif
pdf-tools-autoloads tablist-autoloads typo-autoloads mb-depth repeat
visual-fill-autoloads olivetti-autoloads time battery filenotify dom
tamil99 quail disp-table lacarte-autoloads shell-command-plus-autoloads
icons delsel easy-mmode xt-mouse cus-load avy-autoloads icalendar
diary-lib diary-loaddefs cal-menu calendar cal-loaddefs
dired-du-autoloads finder-inf filecache imenu-xref-autoloads ert ewoc
debug backtrace find-func derived chemtable-autoloads
molar-mass-autoloads vc-backup-autoloads compat-autoloads skeleton
saveplace-pdf-view saveplace tramp-sh tramp trampver tramp-integration
files-x tramp-message tramp-compat xdg shell pcomplete comint ansi-osc
ring parse-time iso8601 time-date format-spec auth-source eieio
eieio-core password-cache json map byte-opt ansi-color tramp-loaddefs
bookmark text-property-search pp saveplace-pdf-view-autoloads dbus xml
rx inspector-autoloads xr-autoloads org-mode-autoloads pcase
straight-autoloads cl-seq info cl-extra help-mode straight subr-x
cl-macs gv cl-loaddefs cl-lib bytecomp byte-compile vz-nh-theme
vz-options-theme rmc iso-transl tooltip cconv eldoc paren electric
uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
term/x-win x-win term/common-win x-dnd touch-screen tool-bar dnd fontset
image regexp-opt fringe tabulated-list replace newcomment text-mode
lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch
easymenu timer select scroll-bar mouse jit-lock font-lock syntax
font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads dbusbind inotify
dynamic-setting system-font-setting font-render-setting x-toolkit
xinput2 x multi-tty move-toolbar make-network-process emacs)

Memory information:
((conses 16 3801574 1338651) (symbols 48 99389 163)
 (strings 32 567165 74349) (string-bytes 1 134738441)
 (vectors 16 272537) (vector-slots 8 5093955 629437)
 (floats 8 81139 13819) (intervals 56 314712 11696) (buffers 984 250))

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* bug#65892: 30.0.50; yank-media fails for clipboard selection that are wiped after being accessed
  2023-09-12 16:54 bug#65892: 30.0.50; yank-media fails for clipboard selection that are wiped after being accessed Visuwesh
@ 2024-06-24  3:53 ` Visuwesh
  2024-06-24 12:13   ` Eli Zaretskii
  0 siblings, 1 reply; 10+ messages in thread
From: Visuwesh @ 2024-06-24  3:53 UTC (permalink / raw)
  To: 65892

I apologise for neglecting to speak out loud before the emacs-30 branch
cut.  Is there a chance to get this patch in emacs-30?  I am using this
patch ever since I sent it to debbugs and I do not face any issue wrt
the pcmanfm issue shown here and other applications which do not wipe
the clipboard.  It would be nice to have it in emacs-30 especially with
org-mode gaining yank-media support for files copied/cut from a file
manager.

[செவ்வாய் செப்டம்பர் 12, 2023] Visuwesh wrote:

> To reproduce the bug,
>
>     1. Install pcmanfm
>     2. emacs -Q
>     3. Eval the following lines 
>
>     (defun vz/message-yank-media-copied-files-handler (_ data)
>       "Attach files copied/cut from the file manager.
>     DATA is a string where the first line is the operation to
>     perform: copy or cut.  Rest are file: links.  The operation is
>     always ignored, and the files are only attached."
>       (let* ((files (cdr (split-string data "[\0\n\r]" t "^file://"))))
>         (dolist (f files)
>           (mml-attach-file f (or (mm-default-file-type f) "application/octet-stream")))))
>
>      (add-hook 'message-mode-hook
>                (defun vz/message-register-yank-media-handler ()
>                  (yank-media-handler "x-special/gnome-copied-files"
>                                      #'vz/message-yank-media-copied-files-handler)))
>     4. C-x m
>     5. Cut a file from pcmanfm using C-x
>     6. In Emacs, choose the message-mode buffer and say M-x yank-media
>     7. Witness the wrong-type-argument error
>
> This happens because pcmanfm "wipes" the clipboard data it is accessed
> once.  This is a problem because yank-media uses
> yank-media--get-selection to access the clipboard data twice
>
>     · Once in yank-media--find-matching-media to find out if the
>       buffer's registered handlers can work with the data (see
>       pcase-dolist form in yank-media function).  At this point,
>       vz/message-register-yank-media-handler is chosen since it can
>       handle x-special/gnome-copied-files (which is the type used for
>       the cut file).
>
>     · Second when yank-media calls the handler to do its thing, which
>       can be seen in the funcall forms in yank-media function again.
>
> The problem here is that once yank-media--find-matching-media calls
> yank-media--get-selection to get the clipboard selection, pcmanfm wipes
> the clipboard so when yank-media calls that function again and passes
> the return value to the handler, the handler receives nil.
>
> The attached patch fixes this issue by making
> yank-media--find-matching-media return the selection value, and passing
> the returned value to the handler avoiding calling
> yank-media--get-selection again.
>
> P.S. I don't know if it is a problem with other file managers.
> P.P.S. I plan on submitting a patch to add the yank-media-handler here
>        once this bug is fixed.
>
>
>
>
> In GNU Emacs 30.0.50 (build 7, x86_64-pc-linux-gnu, X toolkit, Xaw
>  scroll bars) of 2023-09-10 built on astatine
> Repository revision: af1e860570191014d94484d6944348b1766ba59f
> Repository branch: master
> Windowing system distributor 'The X.Org Foundation', version 11.0.12101008
> System Description: Debian GNU/Linux trixie/sid
>
> Configured using:
>  'configure --with-sound=alsa --with-x-toolkit=lucid --with-json
>  --without-xaw3d --without-gconf --without-libsystemd --without-cairo'
> Configured features:
> ACL DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG JSON
> LIBOTF LIBSELINUX LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG RSVG
> SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS WEBP X11 XDBE XFT
> XIM XINPUT2 XPM LUCID ZLIB
> Important settings:
>   value of $LC_MONETARY: ta_IN.UTF-8
>   value of $LC_NUMERIC: ta_IN.UTF-8
>   value of $LANG: en_GB.UTF-8
>   locale-coding-system: utf-8-unix
>
> Major mode: Diff
>
> Minor modes in effect:
>   whitespace-mode: t
>   TeX-PDF-mode: t
>   recentf-mode: t
>   server-mode: t
>   eros-mode: t
>   pdf-occur-global-minor-mode: t
>   minibuffer-depth-indicate-mode: t
>   repeat-mode: t
>   display-time-mode: t
>   display-battery-mode: t
>   delete-selection-mode: t
>   xterm-mouse-mode: t
>   straight-use-package-mode: t
>   straight-package-neutering-mode: t
>   tooltip-mode: t
>   global-eldoc-mode: t
>   show-paren-mode: t
>   electric-indent-mode: t
>   mouse-wheel-mode: t
>   use-hard-newlines: t
>   tab-bar-history-mode: t
>   tab-bar-mode: t
>   file-name-shadow-mode: t
>   global-font-lock-mode: t
>   font-lock-mode: t
>   undelete-frame-mode: t
>   minibuffer-regexp-mode: t
>   buffer-read-only: t
>   indent-tabs-mode: t
>   transient-mark-mode: t
>   auto-composition-mode: t
>   auto-encryption-mode: t
>   auto-compression-mode: t
>
> Load-path shadows:
> /home/viz/lib/emacs/straight/build/org/ob-awk hides /home/viz/lib/emacs/straight/build/org-mode/ob-awk
> /home/viz/lib/emacs/straight/build/org/org-capture hides /home/viz/lib/emacs/straight/build/org-mode/org-capture
> /home/viz/lib/emacs/straight/build/org/ob-sql hides /home/viz/lib/emacs/straight/build/org-mode/ob-sql
> /home/viz/lib/emacs/straight/build/org/ol-doi hides /home/viz/lib/emacs/straight/build/org-mode/ol-doi
> /home/viz/lib/emacs/straight/build/org/org-latex-preview hides /home/viz/lib/emacs/straight/build/org-mode/org-latex-preview
> /home/viz/lib/emacs/straight/build/org/org-plot hides /home/viz/lib/emacs/straight/build/org-mode/org-plot
> /home/viz/lib/emacs/straight/build/org/ob-dot hides /home/viz/lib/emacs/straight/build/org-mode/ob-dot
> /home/viz/lib/emacs/straight/build/org/ol-eshell hides /home/viz/lib/emacs/straight/build/org-mode/ol-eshell
> /home/viz/lib/emacs/straight/build/org/ob-C hides /home/viz/lib/emacs/straight/build/org-mode/ob-C
> /home/viz/lib/emacs/straight/build/org/ob-ref hides /home/viz/lib/emacs/straight/build/org-mode/ob-ref
> /home/viz/lib/emacs/straight/build/org/ox-mathml hides /home/viz/lib/emacs/straight/build/org-mode/ox-mathml
> /home/viz/lib/emacs/straight/build/org/org-list hides /home/viz/lib/emacs/straight/build/org-mode/org-list
> /home/viz/lib/emacs/straight/build/org/org-mouse hides /home/viz/lib/emacs/straight/build/org-mode/org-mouse
> /home/viz/lib/emacs/straight/build/org/ob-haskell hides /home/viz/lib/emacs/straight/build/org-mode/ob-haskell
> /home/viz/lib/emacs/straight/build/org/ob-plantuml hides /home/viz/lib/emacs/straight/build/org-mode/ob-plantuml
> /home/viz/lib/emacs/straight/build/org/org-keys hides /home/viz/lib/emacs/straight/build/org-mode/org-keys
> /home/viz/lib/emacs/straight/build/org/org-clock hides /home/viz/lib/emacs/straight/build/org-mode/org-clock
> /home/viz/lib/emacs/straight/build/org/ox-html hides /home/viz/lib/emacs/straight/build/org-mode/ox-html
> /home/viz/lib/emacs/straight/build/org/oc-biblatex hides /home/viz/lib/emacs/straight/build/org-mode/oc-biblatex
> /home/viz/lib/emacs/straight/build/org/ob-table hides /home/viz/lib/emacs/straight/build/org-mode/ob-table
> /home/viz/lib/emacs/straight/build/org/ob hides /home/viz/lib/emacs/straight/build/org-mode/ob
> /home/viz/lib/emacs/straight/build/org/ol-w3m hides /home/viz/lib/emacs/straight/build/org-mode/ol-w3m
> /home/viz/lib/emacs/straight/build/org/ob-groovy hides /home/viz/lib/emacs/straight/build/org-mode/ob-groovy
> /home/viz/lib/emacs/straight/build/org/org-footnote hides /home/viz/lib/emacs/straight/build/org-mode/org-footnote
> /home/viz/lib/emacs/straight/build/org/org-entities hides /home/viz/lib/emacs/straight/build/org-mode/org-entities
> /home/viz/lib/emacs/straight/build/org/ob-org hides /home/viz/lib/emacs/straight/build/org-mode/ob-org
> /home/viz/lib/emacs/straight/build/org/org-macs hides /home/viz/lib/emacs/straight/build/org-mode/org-macs
> /home/viz/lib/emacs/straight/build/org/ob-shell hides /home/viz/lib/emacs/straight/build/org-mode/ob-shell
> /home/viz/lib/emacs/straight/build/org/ob-R hides /home/viz/lib/emacs/straight/build/org-mode/ob-R
> /home/viz/lib/emacs/straight/build/org/ob-lisp hides /home/viz/lib/emacs/straight/build/org-mode/ob-lisp
> /home/viz/lib/emacs/straight/build/org/ob-js hides /home/viz/lib/emacs/straight/build/org-mode/ob-js
> /home/viz/lib/emacs/straight/build/org/ob-maxima hides /home/viz/lib/emacs/straight/build/org-mode/ob-maxima
> /home/viz/lib/emacs/straight/build/org/org-element-ast hides /home/viz/lib/emacs/straight/build/org-mode/org-element-ast
> /home/viz/lib/emacs/straight/build/org/ox-ascii hides /home/viz/lib/emacs/straight/build/org-mode/ox-ascii
> /home/viz/lib/emacs/straight/build/org/org-persist hides /home/viz/lib/emacs/straight/build/org-mode/org-persist
> /home/viz/lib/emacs/straight/build/org/ox-md hides /home/viz/lib/emacs/straight/build/org-mode/ox-md
> /home/viz/lib/emacs/straight/build/org/org-duration hides /home/viz/lib/emacs/straight/build/org-mode/org-duration
> /home/viz/lib/emacs/straight/build/org/ob-lilypond hides /home/viz/lib/emacs/straight/build/org-mode/ob-lilypond
> /home/viz/lib/emacs/straight/build/org/ob-ruby hides /home/viz/lib/emacs/straight/build/org-mode/ob-ruby
> /home/viz/lib/emacs/straight/build/org/ob-core hides /home/viz/lib/emacs/straight/build/org-mode/ob-core
> /home/viz/lib/emacs/straight/build/org/ol-mhe hides /home/viz/lib/emacs/straight/build/org-mode/ol-mhe
> /home/viz/lib/emacs/straight/build/org/ob-ditaa hides /home/viz/lib/emacs/straight/build/org-mode/ob-ditaa
> /home/viz/lib/emacs/straight/build/org/ol-irc hides /home/viz/lib/emacs/straight/build/org-mode/ol-irc
> /home/viz/lib/emacs/straight/build/org/ob-fortran hides /home/viz/lib/emacs/straight/build/org-mode/ob-fortran
> /home/viz/lib/emacs/straight/build/org/org-feed hides /home/viz/lib/emacs/straight/build/org-mode/org-feed
> /home/viz/lib/emacs/straight/build/org/ob-java hides /home/viz/lib/emacs/straight/build/org-mode/ob-java
> /home/viz/lib/emacs/straight/build/org/ox hides /home/viz/lib/emacs/straight/build/org-mode/ox
> /home/viz/lib/emacs/straight/build/org/oc-csl hides /home/viz/lib/emacs/straight/build/org-mode/oc-csl
> /home/viz/lib/emacs/straight/build/org/ob-exp hides /home/viz/lib/emacs/straight/build/org-mode/ob-exp
> /home/viz/lib/emacs/straight/build/org/ob-scheme hides /home/viz/lib/emacs/straight/build/org-mode/ob-scheme
> /home/viz/lib/emacs/straight/build/org/ob-tangle hides /home/viz/lib/emacs/straight/build/org-mode/ob-tangle
> /home/viz/lib/emacs/straight/build/org/ox-koma-letter hides /home/viz/lib/emacs/straight/build/org-mode/ox-koma-letter
> /home/viz/lib/emacs/straight/build/org/ob-gnuplot hides /home/viz/lib/emacs/straight/build/org-mode/ob-gnuplot
> /home/viz/lib/emacs/straight/build/org/org-crypt hides /home/viz/lib/emacs/straight/build/org-mode/org-crypt
> /home/viz/lib/emacs/straight/build/org/org-datetree hides /home/viz/lib/emacs/straight/build/org-mode/org-datetree
> /home/viz/lib/emacs/straight/build/org/org-attach hides /home/viz/lib/emacs/straight/build/org-mode/org-attach
> /home/viz/lib/emacs/straight/build/org/ob-julia hides /home/viz/lib/emacs/straight/build/org-mode/ob-julia
> /home/viz/lib/emacs/straight/build/org/ob-sqlite hides /home/viz/lib/emacs/straight/build/org-mode/ob-sqlite
> /home/viz/lib/emacs/straight/build/org/org-cycle hides /home/viz/lib/emacs/straight/build/org-mode/org-cycle
> /home/viz/lib/emacs/straight/build/org/org-faces hides /home/viz/lib/emacs/straight/build/org-mode/org-faces
> /home/viz/lib/emacs/straight/build/org/org-mobile hides /home/viz/lib/emacs/straight/build/org-mode/org-mobile
> /home/viz/lib/emacs/straight/build/org/org-ctags hides /home/viz/lib/emacs/straight/build/org-mode/org-ctags
> /home/viz/lib/emacs/straight/build/org/ob-latex hides /home/viz/lib/emacs/straight/build/org-mode/ob-latex
> /home/viz/lib/emacs/straight/build/org/ob-matlab hides /home/viz/lib/emacs/straight/build/org-mode/ob-matlab
> /home/viz/lib/emacs/straight/build/org/ob-sed hides /home/viz/lib/emacs/straight/build/org-mode/ob-sed
> /home/viz/lib/emacs/straight/build/org/org-attach-git hides /home/viz/lib/emacs/straight/build/org-mode/org-attach-git
> /home/viz/lib/emacs/straight/build/org/ob-python hides /home/viz/lib/emacs/straight/build/org-mode/ob-python
> /home/viz/lib/emacs/straight/build/org/ox-icalendar hides /home/viz/lib/emacs/straight/build/org-mode/ox-icalendar
> /home/viz/lib/emacs/straight/build/org/org-tempo hides /home/viz/lib/emacs/straight/build/org-mode/org-tempo
> /home/viz/lib/emacs/straight/build/org/ob-screen hides /home/viz/lib/emacs/straight/build/org-mode/ob-screen
> /home/viz/lib/emacs/straight/build/org/org-num hides /home/viz/lib/emacs/straight/build/org-mode/org-num
> /home/viz/lib/emacs/straight/build/org/ob-forth hides /home/viz/lib/emacs/straight/build/org-mode/ob-forth
> /home/viz/lib/emacs/straight/build/org/ox-odt hides /home/viz/lib/emacs/straight/build/org-mode/ox-odt
> /home/viz/lib/emacs/straight/build/org/ol-bbdb hides /home/viz/lib/emacs/straight/build/org-mode/ol-bbdb
> /home/viz/lib/emacs/straight/build/org/org-table hides /home/viz/lib/emacs/straight/build/org-mode/org-table
> /home/viz/lib/emacs/straight/build/org/ox-man hides /home/viz/lib/emacs/straight/build/org-mode/ox-man
> /home/viz/lib/emacs/straight/build/org/ox-org hides /home/viz/lib/emacs/straight/build/org-mode/ox-org
> /home/viz/lib/emacs/straight/build/org/ob-comint hides /home/viz/lib/emacs/straight/build/org-mode/ob-comint
> /home/viz/lib/emacs/straight/build/org/ob-clojure hides /home/viz/lib/emacs/straight/build/org-mode/ob-clojure
> /home/viz/lib/emacs/straight/build/org/org-id hides /home/viz/lib/emacs/straight/build/org-mode/org-id
> /home/viz/lib/emacs/straight/build/org/oc-natbib hides /home/viz/lib/emacs/straight/build/org-mode/oc-natbib
> /home/viz/lib/emacs/straight/build/org/ox-texinfo hides /home/viz/lib/emacs/straight/build/org-mode/ox-texinfo
> /home/viz/lib/emacs/straight/build/org/org-agenda hides /home/viz/lib/emacs/straight/build/org-mode/org-agenda
> /home/viz/lib/emacs/straight/build/org/org-src hides /home/viz/lib/emacs/straight/build/org-mode/org-src
> /home/viz/lib/emacs/straight/build/org/ob-emacs-lisp hides /home/viz/lib/emacs/straight/build/org-mode/ob-emacs-lisp
> /home/viz/lib/emacs/straight/build/org/ob-css hides /home/viz/lib/emacs/straight/build/org-mode/ob-css
> /home/viz/lib/emacs/straight/build/org/ox-latex hides /home/viz/lib/emacs/straight/build/org-mode/ox-latex
> /home/viz/lib/emacs/straight/build/org/oc hides /home/viz/lib/emacs/straight/build/org-mode/oc
> /home/viz/lib/emacs/straight/build/org/ol hides /home/viz/lib/emacs/straight/build/org-mode/ol
> /home/viz/lib/emacs/straight/build/org/org-element hides /home/viz/lib/emacs/straight/build/org-mode/org-element
> /home/viz/lib/emacs/straight/build/org/org hides /home/viz/lib/emacs/straight/build/org-mode/org
> /home/viz/lib/emacs/straight/build/org/org-goto hides /home/viz/lib/emacs/straight/build/org-mode/org-goto
> /home/viz/lib/emacs/straight/build/org/ob-eval hides /home/viz/lib/emacs/straight/build/org-mode/ob-eval
> /home/viz/lib/emacs/straight/build/org/org-habit hides /home/viz/lib/emacs/straight/build/org-mode/org-habit
> /home/viz/lib/emacs/straight/build/org/org-pcomplete hides /home/viz/lib/emacs/straight/build/org-mode/org-pcomplete
> /home/viz/lib/emacs/straight/build/org/ol-eww hides /home/viz/lib/emacs/straight/build/org-mode/ol-eww
> /home/viz/lib/emacs/straight/build/org/ob-processing hides /home/viz/lib/emacs/straight/build/org-mode/ob-processing
> /home/viz/lib/emacs/straight/build/org/org-timer hides /home/viz/lib/emacs/straight/build/org-mode/org-timer
> /home/viz/lib/emacs/straight/build/org/org-inlinetask hides /home/viz/lib/emacs/straight/build/org-mode/org-inlinetask
> /home/viz/lib/emacs/straight/build/org/ol-bibtex hides /home/viz/lib/emacs/straight/build/org-mode/ol-bibtex
> /home/viz/lib/emacs/straight/build/org/org-fold-core hides /home/viz/lib/emacs/straight/build/org-mode/org-fold-core
> /home/viz/lib/emacs/straight/build/org/oc-basic hides /home/viz/lib/emacs/straight/build/org-mode/oc-basic
> /home/viz/lib/emacs/straight/build/org/ox-publish hides /home/viz/lib/emacs/straight/build/org-mode/ox-publish
> /home/viz/lib/emacs/straight/build/org/oc-bibtex hides /home/viz/lib/emacs/straight/build/org-mode/oc-bibtex
> /home/viz/lib/emacs/straight/build/org/org-macro hides /home/viz/lib/emacs/straight/build/org-mode/org-macro
> /home/viz/lib/emacs/straight/build/org/ol-docview hides /home/viz/lib/emacs/straight/build/org-mode/ol-docview
> /home/viz/lib/emacs/straight/build/org/org-fold hides /home/viz/lib/emacs/straight/build/org-mode/org-fold
> /home/viz/lib/emacs/straight/build/org/org-lint hides /home/viz/lib/emacs/straight/build/org-mode/org-lint
> /home/viz/lib/emacs/straight/build/org/org-version hides /home/viz/lib/emacs/straight/build/org-mode/org-version
> /home/viz/lib/emacs/straight/build/org/ob-ocaml hides /home/viz/lib/emacs/straight/build/org-mode/ob-ocaml
> /home/viz/lib/emacs/straight/build/org/ob-sass hides /home/viz/lib/emacs/straight/build/org-mode/ob-sass
> /home/viz/lib/emacs/straight/build/org/ob-perl hides /home/viz/lib/emacs/straight/build/org-mode/ob-perl
> /home/viz/lib/emacs/straight/build/org/ol-rmail hides /home/viz/lib/emacs/straight/build/org-mode/ol-rmail
> /home/viz/lib/emacs/straight/build/org/org-protocol hides /home/viz/lib/emacs/straight/build/org-mode/org-protocol
> /home/viz/lib/emacs/straight/build/org/ol-info hides /home/viz/lib/emacs/straight/build/org-mode/ol-info
> /home/viz/lib/emacs/straight/build/org/ob-eshell hides /home/viz/lib/emacs/straight/build/org-mode/ob-eshell
> /home/viz/lib/emacs/straight/build/org/org-refile hides /home/viz/lib/emacs/straight/build/org-mode/org-refile
> /home/viz/lib/emacs/straight/build/org/ob-octave hides /home/viz/lib/emacs/straight/build/org-mode/ob-octave
> /home/viz/lib/emacs/straight/build/org/ob-lua hides /home/viz/lib/emacs/straight/build/org-mode/ob-lua
> /home/viz/lib/emacs/straight/build/org/ol-gnus hides /home/viz/lib/emacs/straight/build/org-mode/ol-gnus
> /home/viz/lib/emacs/straight/build/org/ob-makefile hides /home/viz/lib/emacs/straight/build/org-mode/ob-makefile
> /home/viz/lib/emacs/straight/build/org/org-archive hides /home/viz/lib/emacs/straight/build/org-mode/org-archive
> /home/viz/lib/emacs/straight/build/org/ob-lob hides /home/viz/lib/emacs/straight/build/org-mode/ob-lob
> /home/viz/lib/emacs/straight/build/org/ol-man hides /home/viz/lib/emacs/straight/build/org-mode/ol-man
> /home/viz/lib/emacs/straight/build/org/org-compat hides /home/viz/lib/emacs/straight/build/org-mode/org-compat
> /home/viz/lib/emacs/straight/build/org/org-colview hides /home/viz/lib/emacs/straight/build/org-mode/org-colview
> /home/viz/lib/emacs/straight/build/org/org-indent hides /home/viz/lib/emacs/straight/build/org-mode/org-indent
> /home/viz/lib/emacs/straight/build/org/ox-beamer hides /home/viz/lib/emacs/straight/build/org-mode/ox-beamer
> /home/viz/lib/emacs/straight/build/org/org-loaddefs hides /home/viz/lib/emacs/straight/build/org-mode/org-loaddefs
> /home/viz/lib/emacs/straight/build/org/ob-calc hides /home/viz/lib/emacs/straight/build/org-mode/ob-calc
> /home/viz/lib/emacs/straight/build/transient/transient hides /home/viz/lib/ports/emacs/lisp/transient
> /home/viz/lib/emacs/straight/build/org/ob-awk hides /home/viz/lib/ports/emacs/lisp/org/ob-awk
> /home/viz/lib/emacs/straight/build/org/org-capture hides /home/viz/lib/ports/emacs/lisp/org/org-capture
> /home/viz/lib/emacs/straight/build/org/ob-sql hides /home/viz/lib/ports/emacs/lisp/org/ob-sql
> /home/viz/lib/emacs/straight/build/org/ol-doi hides /home/viz/lib/ports/emacs/lisp/org/ol-doi
> /home/viz/lib/emacs/straight/build/org/org-plot hides /home/viz/lib/ports/emacs/lisp/org/org-plot
> /home/viz/lib/emacs/straight/build/org/ob-dot hides /home/viz/lib/ports/emacs/lisp/org/ob-dot
> /home/viz/lib/emacs/straight/build/org/ol-eshell hides /home/viz/lib/ports/emacs/lisp/org/ol-eshell
> /home/viz/lib/emacs/straight/build/org/ob-C hides /home/viz/lib/ports/emacs/lisp/org/ob-C
> /home/viz/lib/emacs/straight/build/org/ob-ref hides /home/viz/lib/ports/emacs/lisp/org/ob-ref
> /home/viz/lib/emacs/straight/build/org/org-list hides /home/viz/lib/ports/emacs/lisp/org/org-list
> /home/viz/lib/emacs/straight/build/org/org-mouse hides /home/viz/lib/ports/emacs/lisp/org/org-mouse
> /home/viz/lib/emacs/straight/build/org/ob-haskell hides /home/viz/lib/ports/emacs/lisp/org/ob-haskell
> /home/viz/lib/emacs/straight/build/org/ob-plantuml hides /home/viz/lib/ports/emacs/lisp/org/ob-plantuml
> /home/viz/lib/emacs/straight/build/org/org-keys hides /home/viz/lib/ports/emacs/lisp/org/org-keys
> /home/viz/lib/emacs/straight/build/org/org-clock hides /home/viz/lib/ports/emacs/lisp/org/org-clock
> /home/viz/lib/emacs/straight/build/org/ox-html hides /home/viz/lib/ports/emacs/lisp/org/ox-html
> /home/viz/lib/emacs/straight/build/org/oc-biblatex hides /home/viz/lib/ports/emacs/lisp/org/oc-biblatex
> /home/viz/lib/emacs/straight/build/org/ob-table hides /home/viz/lib/ports/emacs/lisp/org/ob-table
> /home/viz/lib/emacs/straight/build/org/ob hides /home/viz/lib/ports/emacs/lisp/org/ob
> /home/viz/lib/emacs/straight/build/org/ol-w3m hides /home/viz/lib/ports/emacs/lisp/org/ol-w3m
> /home/viz/lib/emacs/straight/build/org/ob-groovy hides /home/viz/lib/ports/emacs/lisp/org/ob-groovy
> /home/viz/lib/emacs/straight/build/org/org-footnote hides /home/viz/lib/ports/emacs/lisp/org/org-footnote
> /home/viz/lib/emacs/straight/build/org/org-entities hides /home/viz/lib/ports/emacs/lisp/org/org-entities
> /home/viz/lib/emacs/straight/build/org/ob-org hides /home/viz/lib/ports/emacs/lisp/org/ob-org
> /home/viz/lib/emacs/straight/build/org/org-macs hides /home/viz/lib/ports/emacs/lisp/org/org-macs
> /home/viz/lib/emacs/straight/build/org/ob-shell hides /home/viz/lib/ports/emacs/lisp/org/ob-shell
> /home/viz/lib/emacs/straight/build/org/ob-R hides /home/viz/lib/ports/emacs/lisp/org/ob-R
> /home/viz/lib/emacs/straight/build/org/ob-lisp hides /home/viz/lib/ports/emacs/lisp/org/ob-lisp
> /home/viz/lib/emacs/straight/build/org/ob-js hides /home/viz/lib/ports/emacs/lisp/org/ob-js
> /home/viz/lib/emacs/straight/build/org/ob-maxima hides /home/viz/lib/ports/emacs/lisp/org/ob-maxima
> /home/viz/lib/emacs/straight/build/org/ox-ascii hides /home/viz/lib/ports/emacs/lisp/org/ox-ascii
> /home/viz/lib/emacs/straight/build/org/org-persist hides /home/viz/lib/ports/emacs/lisp/org/org-persist
> /home/viz/lib/emacs/straight/build/org/ox-md hides /home/viz/lib/ports/emacs/lisp/org/ox-md
> /home/viz/lib/emacs/straight/build/org/org-duration hides /home/viz/lib/ports/emacs/lisp/org/org-duration
> /home/viz/lib/emacs/straight/build/org/ob-lilypond hides /home/viz/lib/ports/emacs/lisp/org/ob-lilypond
> /home/viz/lib/emacs/straight/build/org/ob-ruby hides /home/viz/lib/ports/emacs/lisp/org/ob-ruby
> /home/viz/lib/emacs/straight/build/org/ob-core hides /home/viz/lib/ports/emacs/lisp/org/ob-core
> /home/viz/lib/emacs/straight/build/org/ol-mhe hides /home/viz/lib/ports/emacs/lisp/org/ol-mhe
> /home/viz/lib/emacs/straight/build/org/ob-ditaa hides /home/viz/lib/ports/emacs/lisp/org/ob-ditaa
> /home/viz/lib/emacs/straight/build/org/ol-irc hides /home/viz/lib/ports/emacs/lisp/org/ol-irc
> /home/viz/lib/emacs/straight/build/org/ob-fortran hides /home/viz/lib/ports/emacs/lisp/org/ob-fortran
> /home/viz/lib/emacs/straight/build/org/org-feed hides /home/viz/lib/ports/emacs/lisp/org/org-feed
> /home/viz/lib/emacs/straight/build/org/ob-java hides /home/viz/lib/ports/emacs/lisp/org/ob-java
> /home/viz/lib/emacs/straight/build/org/ox hides /home/viz/lib/ports/emacs/lisp/org/ox
> /home/viz/lib/emacs/straight/build/org/oc-csl hides /home/viz/lib/ports/emacs/lisp/org/oc-csl
> /home/viz/lib/emacs/straight/build/org/ob-exp hides /home/viz/lib/ports/emacs/lisp/org/ob-exp
> /home/viz/lib/emacs/straight/build/org/org-loaddefs hides /home/viz/lib/ports/emacs/lisp/org/org-loaddefs
> /home/viz/lib/emacs/straight/build/org/ob-scheme hides /home/viz/lib/ports/emacs/lisp/org/ob-scheme
> /home/viz/lib/emacs/straight/build/org/ob-tangle hides /home/viz/lib/ports/emacs/lisp/org/ob-tangle
> /home/viz/lib/emacs/straight/build/org/ox-koma-letter hides /home/viz/lib/ports/emacs/lisp/org/ox-koma-letter
> /home/viz/lib/emacs/straight/build/org/ob-gnuplot hides /home/viz/lib/ports/emacs/lisp/org/ob-gnuplot
> /home/viz/lib/emacs/straight/build/org/org-crypt hides /home/viz/lib/ports/emacs/lisp/org/org-crypt
> /home/viz/lib/emacs/straight/build/org/org-datetree hides /home/viz/lib/ports/emacs/lisp/org/org-datetree
> /home/viz/lib/emacs/straight/build/org/org-attach hides /home/viz/lib/ports/emacs/lisp/org/org-attach
> /home/viz/lib/emacs/straight/build/org/ob-julia hides /home/viz/lib/ports/emacs/lisp/org/ob-julia
> /home/viz/lib/emacs/straight/build/org/ob-sqlite hides /home/viz/lib/ports/emacs/lisp/org/ob-sqlite
> /home/viz/lib/emacs/straight/build/org/org-cycle hides /home/viz/lib/ports/emacs/lisp/org/org-cycle
> /home/viz/lib/emacs/straight/build/org/org-faces hides /home/viz/lib/ports/emacs/lisp/org/org-faces
> /home/viz/lib/emacs/straight/build/org/org-mobile hides /home/viz/lib/ports/emacs/lisp/org/org-mobile
> /home/viz/lib/emacs/straight/build/org/org-ctags hides /home/viz/lib/ports/emacs/lisp/org/org-ctags
> /home/viz/lib/emacs/straight/build/org/ob-latex hides /home/viz/lib/ports/emacs/lisp/org/ob-latex
> /home/viz/lib/emacs/straight/build/org/ob-matlab hides /home/viz/lib/ports/emacs/lisp/org/ob-matlab
> /home/viz/lib/emacs/straight/build/org/ob-sed hides /home/viz/lib/ports/emacs/lisp/org/ob-sed
> /home/viz/lib/emacs/straight/build/org/org-attach-git hides /home/viz/lib/ports/emacs/lisp/org/org-attach-git
> /home/viz/lib/emacs/straight/build/org/ob-python hides /home/viz/lib/ports/emacs/lisp/org/ob-python
> /home/viz/lib/emacs/straight/build/org/ox-icalendar hides /home/viz/lib/ports/emacs/lisp/org/ox-icalendar
> /home/viz/lib/emacs/straight/build/org/org-tempo hides /home/viz/lib/ports/emacs/lisp/org/org-tempo
> /home/viz/lib/emacs/straight/build/org/ob-screen hides /home/viz/lib/ports/emacs/lisp/org/ob-screen
> /home/viz/lib/emacs/straight/build/org/org-num hides /home/viz/lib/ports/emacs/lisp/org/org-num
> /home/viz/lib/emacs/straight/build/org/ob-forth hides /home/viz/lib/ports/emacs/lisp/org/ob-forth
> /home/viz/lib/emacs/straight/build/org/ox-odt hides /home/viz/lib/ports/emacs/lisp/org/ox-odt
> /home/viz/lib/emacs/straight/build/org/ol-bbdb hides /home/viz/lib/ports/emacs/lisp/org/ol-bbdb
> /home/viz/lib/emacs/straight/build/org/org-table hides /home/viz/lib/ports/emacs/lisp/org/org-table
> /home/viz/lib/emacs/straight/build/org/ox-man hides /home/viz/lib/ports/emacs/lisp/org/ox-man
> /home/viz/lib/emacs/straight/build/org/ox-org hides /home/viz/lib/ports/emacs/lisp/org/ox-org
> /home/viz/lib/emacs/straight/build/org/ob-comint hides /home/viz/lib/ports/emacs/lisp/org/ob-comint
> /home/viz/lib/emacs/straight/build/org/ob-clojure hides /home/viz/lib/ports/emacs/lisp/org/ob-clojure
> /home/viz/lib/emacs/straight/build/org/org-id hides /home/viz/lib/ports/emacs/lisp/org/org-id
> /home/viz/lib/emacs/straight/build/org/oc-natbib hides /home/viz/lib/ports/emacs/lisp/org/oc-natbib
> /home/viz/lib/emacs/straight/build/org/ox-texinfo hides /home/viz/lib/ports/emacs/lisp/org/ox-texinfo
> /home/viz/lib/emacs/straight/build/org/org-agenda hides /home/viz/lib/ports/emacs/lisp/org/org-agenda
> /home/viz/lib/emacs/straight/build/org/org-src hides /home/viz/lib/ports/emacs/lisp/org/org-src
> /home/viz/lib/emacs/straight/build/org/ob-emacs-lisp hides /home/viz/lib/ports/emacs/lisp/org/ob-emacs-lisp
> /home/viz/lib/emacs/straight/build/org/ob-css hides /home/viz/lib/ports/emacs/lisp/org/ob-css
> /home/viz/lib/emacs/straight/build/org/ox-latex hides /home/viz/lib/ports/emacs/lisp/org/ox-latex
> /home/viz/lib/emacs/straight/build/org/oc hides /home/viz/lib/ports/emacs/lisp/org/oc
> /home/viz/lib/emacs/straight/build/org/ol hides /home/viz/lib/ports/emacs/lisp/org/ol
> /home/viz/lib/emacs/straight/build/org/org-element hides /home/viz/lib/ports/emacs/lisp/org/org-element
> /home/viz/lib/emacs/straight/build/org/org hides /home/viz/lib/ports/emacs/lisp/org/org
> /home/viz/lib/emacs/straight/build/org/org-goto hides /home/viz/lib/ports/emacs/lisp/org/org-goto
> /home/viz/lib/emacs/straight/build/org/ob-eval hides /home/viz/lib/ports/emacs/lisp/org/ob-eval
> /home/viz/lib/emacs/straight/build/org/org-habit hides /home/viz/lib/ports/emacs/lisp/org/org-habit
> /home/viz/lib/emacs/straight/build/org/org-pcomplete hides /home/viz/lib/ports/emacs/lisp/org/org-pcomplete
> /home/viz/lib/emacs/straight/build/org/ol-eww hides /home/viz/lib/ports/emacs/lisp/org/ol-eww
> /home/viz/lib/emacs/straight/build/org/ob-processing hides /home/viz/lib/ports/emacs/lisp/org/ob-processing
> /home/viz/lib/emacs/straight/build/org/org-timer hides /home/viz/lib/ports/emacs/lisp/org/org-timer
> /home/viz/lib/emacs/straight/build/org/org-inlinetask hides /home/viz/lib/ports/emacs/lisp/org/org-inlinetask
> /home/viz/lib/emacs/straight/build/org/ol-bibtex hides /home/viz/lib/ports/emacs/lisp/org/ol-bibtex
> /home/viz/lib/emacs/straight/build/org/org-fold-core hides /home/viz/lib/ports/emacs/lisp/org/org-fold-core
> /home/viz/lib/emacs/straight/build/org/oc-basic hides /home/viz/lib/ports/emacs/lisp/org/oc-basic
> /home/viz/lib/emacs/straight/build/org/ox-publish hides /home/viz/lib/ports/emacs/lisp/org/ox-publish
> /home/viz/lib/emacs/straight/build/org/oc-bibtex hides /home/viz/lib/ports/emacs/lisp/org/oc-bibtex
> /home/viz/lib/emacs/straight/build/org/org-macro hides /home/viz/lib/ports/emacs/lisp/org/org-macro
> /home/viz/lib/emacs/straight/build/org/ol-docview hides /home/viz/lib/ports/emacs/lisp/org/ol-docview
> /home/viz/lib/emacs/straight/build/org/org-fold hides /home/viz/lib/ports/emacs/lisp/org/org-fold
> /home/viz/lib/emacs/straight/build/org/org-lint hides /home/viz/lib/ports/emacs/lisp/org/org-lint
> /home/viz/lib/emacs/straight/build/org/org-version hides /home/viz/lib/ports/emacs/lisp/org/org-version
> /home/viz/lib/emacs/straight/build/org/ob-ocaml hides /home/viz/lib/ports/emacs/lisp/org/ob-ocaml
> /home/viz/lib/emacs/straight/build/org/ob-sass hides /home/viz/lib/ports/emacs/lisp/org/ob-sass
> /home/viz/lib/emacs/straight/build/org/ob-perl hides /home/viz/lib/ports/emacs/lisp/org/ob-perl
> /home/viz/lib/emacs/straight/build/org/ol-rmail hides /home/viz/lib/ports/emacs/lisp/org/ol-rmail
> /home/viz/lib/emacs/straight/build/org/org-protocol hides /home/viz/lib/ports/emacs/lisp/org/org-protocol
> /home/viz/lib/emacs/straight/build/org/ol-info hides /home/viz/lib/ports/emacs/lisp/org/ol-info
> /home/viz/lib/emacs/straight/build/org/ob-eshell hides /home/viz/lib/ports/emacs/lisp/org/ob-eshell
> /home/viz/lib/emacs/straight/build/org/org-refile hides /home/viz/lib/ports/emacs/lisp/org/org-refile
> /home/viz/lib/emacs/straight/build/org/ob-octave hides /home/viz/lib/ports/emacs/lisp/org/ob-octave
> /home/viz/lib/emacs/straight/build/org/ob-lua hides /home/viz/lib/ports/emacs/lisp/org/ob-lua
> /home/viz/lib/emacs/straight/build/org/ol-gnus hides /home/viz/lib/ports/emacs/lisp/org/ol-gnus
> /home/viz/lib/emacs/straight/build/org/ob-makefile hides /home/viz/lib/ports/emacs/lisp/org/ob-makefile
> /home/viz/lib/emacs/straight/build/org/org-archive hides /home/viz/lib/ports/emacs/lisp/org/org-archive
> /home/viz/lib/emacs/straight/build/org/ob-lob hides /home/viz/lib/ports/emacs/lisp/org/ob-lob
> /home/viz/lib/emacs/straight/build/org/ol-man hides /home/viz/lib/ports/emacs/lisp/org/ol-man
> /home/viz/lib/emacs/straight/build/org/org-compat hides /home/viz/lib/ports/emacs/lisp/org/org-compat
> /home/viz/lib/emacs/straight/build/org/org-colview hides /home/viz/lib/ports/emacs/lisp/org/org-colview
> /home/viz/lib/emacs/straight/build/org/org-indent hides /home/viz/lib/ports/emacs/lisp/org/org-indent
> /home/viz/lib/emacs/straight/build/org/ox-beamer hides /home/viz/lib/ports/emacs/lisp/org/ox-beamer
> /home/viz/lib/emacs/straight/build/org/ob-calc hides /home/viz/lib/ports/emacs/lisp/org/ob-calc
>
> Features:
> (shadow timezone pcmpl-git emacsbug help-at-pt whitespace gnus-cus
> gnus-demon gnus-diary nndiary gnus-dup gnus-fun gnus-html gnus-kill
> gnus-logic gnus-mh mh-comp mh-scan mh-gnus mh-e mh-buffers mh-loaddefs
> gnus-registry registry rmailsum rmail gnus-salt gnus-topic gnus-vm
> printing ps-print ps-print-loaddefs lpr find-dired gnus-uu yenc lacarte
> gnus-draft conf-mode emacs-news-mode gnuplot-context gnuplot molar-mass
> calc-mode calc-undo calc-stuff calc-aent calc-math calc-map calc-yank
> calc-vec calc-arith calc-misc calc-alg calccomp calc-incom calc-menu
> calc-ext calc calc-loaddefs calc-macs rect wdired shr-color ind-util
> pdf-sync pdf-outline pdf-links pdf-history pdf-roll
> latex-mode-expansions latex latex-flymake tex-ispell tex-style tex
> icomplete rfc2104 tramp-cache time-stamp semantic/bovine/c
> semantic/db-mode semantic/decorate/include hideif semantic/bovine/c-by
> semantic/lex-spp semantic/complete semantic/bovine/debug semantic/debug
> semantic/edit semantic/bovine/el semantic/db-el eieio-opt semantic/sb
> speedbar dframe semantic/bovine/gcc semantic/grammar semantic/grammar-wy
> semantic/html html-mode-expansions sgml-mode semantic/idle
> semantic/imenu semantic/db-file data-debug cedet-files
> semantic/wisent/java-tags semantic/wisent/javat-wy
> semantic/wisent/javascript-jv semantic/wisent/js-wy semantic/java
> semantic/doc semantic/bovine/make semantic/bovine/make-by make-mode
> semantic/decorate/mode semantic/decorate semantic/mru-bookmark
> semantic/wisent/python semantic/wisent/python-wy semantic/analyze/refs
> semantic/bovine/scm semantic/dep semantic/bovine/scm-by semantic/bovine
> srecode/srt-mode semantic/analyze semantic/sort semantic/scope
> semantic/analyze/fcn srecode/template srecode/srt-wy srecode/ctxt
> srecode/compile srecode/dictionary srecode/fields srecode/table srecode
> semantic/texi texinfo texinfo-loaddefs semantic/ctxt semantic/format
> ezimage semantic/tag-ls semantic/find semantic/db-find semantic/db-ref
> semantic/db eieio-base completion prescient char-fold tramp-cmds
> prescient-autoloads inspector edebug grep vc-dir disass msb url-http
> url-gw url-cache url-auth dired-aux gnus-dired display-line-numbers
> ecomplete pcmpl-gnu etags fileloop imenu-xref view tabify man
> tramp-archive tramp-gvfs flow-fill sort gnus-cite mail-extr textsec
> uni-scripts idna-mapping ucs-normalize uni-confusable textsec-check
> gnus-async gnus-bcklg qp gnus-ml pcmpl-unix network-stream nsm nndraft
> nnmh nndoc nnmaildir nnagent nnml nnnil gnus-agent gnus-srvr gnus-score
> score-mode nnvirtual gnus-msg nntp gnus-cache mm-archive
> ement-tabulated-room-list ement ement-notifications ement-notify
> notifications ement-room dns ement-room-list ement-lib ement-api
> ement-structs plz ement-macros taxy-magit-section magit-section
> benchmark taxy svg-lib persist ediff-ptch ediff ediff-merg ediff-mult
> ediff-wind ediff-diff ediff-help ediff-init ediff-util autoload
> loaddefs-gen expand-region text-mode-expansions cc-mode-expansions
> the-org-mode-expansions python-el-fgallina-expansions
> er-basic-expansions expand-region-core expand-region-custom misc
> cus-start shell-command+ bug-reference info-look typo
> modus-operandi-theme modus-vivendi-theme modus-themes cal-islam holidays
> holiday-loaddefs cal-move reveal log-edit add-log smerge-mode mule-util
> org-capture doct ob-ditaa ob-plantuml org-clock org-colview org-crypt
> org-ctags org-mouse org-plot org-protocol ox-md ox-texinfo comp
> comp-cstr descr-text cl-print avy pulse color help-fns radix-tree xref
> misearch multi-isearch dabbrev latexenc image-file image-converter
> org-ql-find org-ql-completing-read org-ql-search org-ql-view transient
> ov crm org-super-agenda ht f f-shortdoc shortdoc s org-ql peg ts dash
> org-habit org-duration face-remap flyspell ispell org-pdftools pdf-annot
> facemenu org-noter org-num oc-basic ob-gnuplot ox-odt rng-loc rng-uri
> rng-parse rng-match rng-dt rng-util rng-pttrn nxml-parse nxml-ns
> nxml-enc xmltok nxml-util ox-icalendar org-agenda ox-html ox-mathml
> org-latex-preview ox-latex table ox-ascii ox-publish ox org-element
> org-persist avl-tree generator ob-fortran ob-python python compat
> compat-macs ob-C cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles
> cc-align cc-engine cc-vars cc-defs ob-shell ob-racket async ob-async
> cdlatex texmathp org-attach org-id org-refile org-element-ast inline
> ol-eww eww url-queue mm-url ol-rmail ol-mhe ol-irc ol-info ol-gnus
> nnselect gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig
> gnus-sum shr pixel-fill kinsoku url-file svg gnus-group gnus-undo
> gnus-start gnus-dbus gnus-cloud nnimap nnmail mail-source utf7 nnoo
> gnus-spec gnus-int gnus-range message sendmail yank-media puny rfc822
> mml mml-sec epa epg rfc6068 epg-config mm-decode mm-bodies mm-encode
> mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev gmm-utils
> mailheader gnus-win gnus nnheader gnus-util mail-utils range mm-util
> mail-prsvr ol-docview doc-view ol-bibtex ol-bbdb ol-w3m ol-doi
> org-link-doi org-tempo ol-man org ob ob-tangle ob-ref ob-lob ob-table
> ob-exp org-macro org-src sh-script smie treesit executable ob-comint
> org-pcomplete org-list org-footnote org-faces org-entities noutline
> outline ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold
> org-fold-core org-keys oc org-loaddefs org-version org-compat org-macs
> cursor-sensor recentf tree-widget vc-backup log-view pcvs-util vc diff
> vc-git diff-mode vc-dispatcher server paredit edmacro kmacro eros
> checkdoc lisp-mnt flymake-proc flymake project warnings thingatpt
> wordel-autoloads mines-autoloads sokoban-autoloads ement-autoloads
> svg-lib-autoloads taxy-magit-section-autoloads magit-section-autoloads
> taxy-autoloads persist-autoloads plz-autoloads nov-autoloads
> esxml-autoloads kv-autoloads transmission-autoloads csv-mode-autoloads
> lua-mode-autoloads nix-mode-autoloads gnuplot-autoloads
> go-mode-autoloads racket-mode-autoloads eros-autoloads
> writegood-mode-autoloads siege-mode-autoloads paredit-autoloads
> puni-autoloads expand-region-autoloads filladapt-autoloads compose
> org-ql-autoloads transient-autoloads peg-autoloads ov-autoloads
> org-super-agenda-autoloads ts-autoloads ht-autoloads f-autoloads
> s-autoloads dash-autoloads scroll-other-window org-pdftools-autoloads
> org-noter-autoloads change-env-autoloads math-delimiters-autoloads
> doct-autoloads ob-async-autoloads async-autoloads
> emacs-ob-racket-autoloads valign-autoloads cdlatex-autoloads
> auctex-autoloads tex-site tempo bibtex pdf-occur ibuf-ext ibuffer
> ibuffer-loaddefs tablist advice tablist-filter semantic/wisent/comp
> semantic/wisent semantic/wisent/wisent semantic/util-modes semantic/util
> semantic semantic/tag semantic/lex semantic/fw mode-local cedet
> pdf-isearch let-alist pdf-misc imenu pdf-tools package browse-url url
> url-proxy url-privacy url-expand url-methods url-history url-cookie
> generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse
> url-vars compile cus-edit wid-edit pdf-view jka-compr pdf-cache pdf-info
> tq pdf-util pdf-macs image-mode dired-x dired dired-loaddefs exif
> pdf-tools-autoloads tablist-autoloads typo-autoloads mb-depth repeat
> visual-fill-autoloads olivetti-autoloads time battery filenotify dom
> tamil99 quail disp-table lacarte-autoloads shell-command-plus-autoloads
> icons delsel easy-mmode xt-mouse cus-load avy-autoloads icalendar
> diary-lib diary-loaddefs cal-menu calendar cal-loaddefs
> dired-du-autoloads finder-inf filecache imenu-xref-autoloads ert ewoc
> debug backtrace find-func derived chemtable-autoloads
> molar-mass-autoloads vc-backup-autoloads compat-autoloads skeleton
> saveplace-pdf-view saveplace tramp-sh tramp trampver tramp-integration
> files-x tramp-message tramp-compat xdg shell pcomplete comint ansi-osc
> ring parse-time iso8601 time-date format-spec auth-source eieio
> eieio-core password-cache json map byte-opt ansi-color tramp-loaddefs
> bookmark text-property-search pp saveplace-pdf-view-autoloads dbus xml
> rx inspector-autoloads xr-autoloads org-mode-autoloads pcase
> straight-autoloads cl-seq info cl-extra help-mode straight subr-x
> cl-macs gv cl-loaddefs cl-lib bytecomp byte-compile vz-nh-theme
> vz-options-theme rmc iso-transl tooltip cconv eldoc paren electric
> uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
> term/x-win x-win term/common-win x-dnd touch-screen tool-bar dnd fontset
> image regexp-opt fringe tabulated-list replace newcomment text-mode
> lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch
> easymenu timer select scroll-bar mouse jit-lock font-lock syntax
> font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic
> indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
> tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
> romanian slovak czech european ethiopic indian cyrillic chinese
> composite emoji-zwj charscript charprop case-table epa-hook
> jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
> theme-loaddefs faces cus-face macroexp files window text-properties
> overlay sha1 md5 base64 format env code-pages mule custom widget keymap
> hashtable-print-readable backquote threads dbusbind inotify
> dynamic-setting system-font-setting font-render-setting x-toolkit
> xinput2 x multi-tty move-toolbar make-network-process emacs)
>
> Memory information:
> ((conses 16 3801574 1338651) (symbols 48 99389 163)
>  (strings 32 567165 74349) (string-bytes 1 134738441)
>  (vectors 16 272537) (vector-slots 8 5093955 629437)
>  (floats 8 81139 13819) (intervals 56 314712 11696) (buffers 984 250))





^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#65892: 30.0.50; yank-media fails for clipboard selection that are wiped after being accessed
  2024-06-24  3:53 ` Visuwesh
@ 2024-06-24 12:13   ` Eli Zaretskii
  2024-06-24 13:46     ` Visuwesh
  0 siblings, 1 reply; 10+ messages in thread
From: Eli Zaretskii @ 2024-06-24 12:13 UTC (permalink / raw)
  To: Visuwesh; +Cc: 65892

> From: Visuwesh <visuweshm@gmail.com>
> Date: Mon, 24 Jun 2024 09:23:20 +0530
> 
> I apologise for neglecting to speak out loud before the emacs-30 branch
> cut.  Is there a chance to get this patch in emacs-30?  I am using this
> patch ever since I sent it to debbugs and I do not face any issue wrt
> the pcmanfm issue shown here and other applications which do not wipe
> the clipboard.  It would be nice to have it in emacs-30 especially with
> org-mode gaining yank-media support for files copied/cut from a file
> manager.

I can be convinced to make such changes on the release branch only if
all they do is make a function whose return value was not interesting
to return a useful value.  But the patch does more than that: it
introduces pcase-dolist and replaces some FOO with (car FOO) in at
least 3 occasions.  Such changes make me uncomfortable, especially
given that this is a case where Emacs needs to jump through hoops to
work around misfeatures of some 3rd-party utility.

Can you rewrite the patch so that it will be clear at a glance that it
cannot possibly cause any harm because it just causes the same code
return a value?  If you can, we have a chance of installing this on
the emacs-30 branch.

And, btw, I wonder whether enough people use pcmanfm for us to bother
about this issue.

Thanks.





^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#65892: 30.0.50; yank-media fails for clipboard selection that are wiped after being accessed
  2024-06-24 12:13   ` Eli Zaretskii
@ 2024-06-24 13:46     ` Visuwesh
  2024-06-25  3:45       ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 10+ messages in thread
From: Visuwesh @ 2024-06-24 13:46 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 65892

[-- Attachment #1: Type: text/plain, Size: 1902 bytes --]

[திங்கள் ஜூன் 24, 2024] Eli Zaretskii wrote:

>> From: Visuwesh <visuweshm@gmail.com>
>> Date: Mon, 24 Jun 2024 09:23:20 +0530
>> 
>> I apologise for neglecting to speak out loud before the emacs-30 branch
>> cut.  Is there a chance to get this patch in emacs-30?  I am using this
>> patch ever since I sent it to debbugs and I do not face any issue wrt
>> the pcmanfm issue shown here and other applications which do not wipe
>> the clipboard.  It would be nice to have it in emacs-30 especially with
>> org-mode gaining yank-media support for files copied/cut from a file
>> manager.
>
> I can be convinced to make such changes on the release branch only if
> all they do is make a function whose return value was not interesting
> to return a useful value.  But the patch does more than that: it
> introduces pcase-dolist and replaces some FOO with (car FOO) in at
> least 3 occasions.  

Thanks for the review and consideration, Eli.  The patch only touched
the return value of a helper function.

> Such changes make me uncomfortable, especially given that this is a
> case where Emacs needs to jump through hoops to work around
> misfeatures of some 3rd-party utility.

I suspect similar behaviour will be shown by other file managers.

> Can you rewrite the patch so that it will be clear at a glance that it
> cannot possibly cause any harm because it just causes the same code
> return a value?  If you can, we have a chance of installing this on
> the emacs-30 branch.

I hope the attached patch makes the intent clear.  I added a doc-string
to the internal function too, and removed pcase-dolist and extra car to
make the code simpler.

> And, btw, I wonder whether enough people use pcmanfm for us to bother
> about this issue.

AFAIK, pcmanfm is fairly popular among the window manager users crowd
due to its light-weight.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Fix-yank-media-when-clipboard-selection-is-wiped-aft.patch --]
[-- Type: text/x-diff, Size: 3924 bytes --]

From 0aa3efd2e05dcc228e042b43fce6f997fd8afc1c Mon Sep 17 00:00:00 2001
From: Visuwesh <visuweshm@gmail.com>
Date: Tue, 12 Sep 2023 22:21:58 +0530
Subject: [PATCH] Fix yank-media when clipboard selection is wiped after access

Certain applications wipes the clipboard selection after is accessed
once e.g., pcmanfm with cut files which makes yank-media pass nil to
the chosen yank-media handler eventually breaking it.  (bug#65892)

* lisp/yank-media.el (yank-media--find-matching-media): Make it return
the selection.  Also document the return type.
(yank-media): Pass the returned selection from above to the handler
instead of refetching the selection from the clipboard.
---
 lisp/yank-media.el | 39 +++++++++++++++++++++++----------------
 1 file changed, 23 insertions(+), 16 deletions(-)

diff --git a/lisp/yank-media.el b/lisp/yank-media.el
index abc137d9c38..830ff40c667 100644
--- a/lisp/yank-media.el
+++ b/lisp/yank-media.el
@@ -44,26 +44,31 @@ yank-media
   (let ((all-types nil))
     (pcase-dolist (`(,handled-type . ,handler)
                    yank-media--registered-handlers)
-      (dolist (type (yank-media--find-matching-media handled-type))
-        (push (cons type handler) all-types)))
+      (dolist (sel (yank-media--find-matching-media handled-type))
+        (push (list (car sel) handler (cdr sel)) all-types)))
     (unless all-types
       (user-error
        "No handler in the current buffer for anything on the clipboard"))
     ;; We have a handler in the current buffer; if there's just
     ;; matching type, just call the handler.
     (if (length= all-types 1)
-        (funcall (cdar all-types) (caar all-types)
-                 (yank-media--get-selection (caar all-types)))
+        (funcall (nth 1 (car all-types)) (nth 0 (car all-types))
+                 (nth 2 (car all-types)))
       ;; More than one type the user for what type to insert.
-      (let ((type
-             (intern
-              (completing-read "Several types available, choose one: "
-                               (mapcar #'car all-types) nil t))))
-        (funcall (alist-get type all-types)
-                 type (yank-media--get-selection type))))))
+      (let* ((type
+              (intern
+               (completing-read "Several types available, choose one: "
+                                (mapcar #'car all-types) nil t)))
+             (chosen-sel (assq type all-types)))
+        (funcall (nth 1 chosen-sel) (nth 0 chosen-sel)
+                 (nth 2 chosen-sel))))))
 
 (defun yank-media--find-matching-media (handled-type)
-  (seq-filter
+  "Return list of clipboard data with mime-type matched by HANDLED-TYPE.
+Each element in the list is a cons pair (TYPE . SELECTION) where TYPE is
+the mime-type of the clipboard selection, and SELECTION is the clipboard
+selection data as a string."
+  (seq-keep
    (lambda (type)
      (pcase-let ((`(,major ,minor) (split-string (symbol-name type) "/")))
        (if (and (equal major "image")
@@ -73,11 +78,13 @@ yank-media--find-matching-media
            ;; `image/x-win-bitmap'.
            nil
          ;; Check that the handler wants this type.
-         (and (if (symbolp handled-type)
-                  (eq handled-type type)
-                (string-match-p handled-type (symbol-name type)))
-              ;; An element may be in TARGETS but be empty.
-              (yank-media--get-selection type)))))
+         (let ((selection (and (if (symbolp handled-type)
+                                   (eq handled-type type)
+                                 (string-match-p handled-type (symbol-name type)))
+                               ;; An element may be in TARGETS but be empty.
+                               (yank-media--get-selection type))))
+           (and selection
+                (cons type selection))))))
    (gui-get-selection 'CLIPBOARD 'TARGETS)))
 
 (defun yank-media--get-selection (data-type)
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* bug#65892: 30.0.50; yank-media fails for clipboard selection that are wiped after being accessed
  2024-06-24 13:46     ` Visuwesh
@ 2024-06-25  3:45       ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-06-25  4:36         ` Visuwesh
  0 siblings, 1 reply; 10+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-06-25  3:45 UTC (permalink / raw)
  To: Visuwesh; +Cc: Eli Zaretskii, 65892

Visuwesh <visuweshm@gmail.com> writes:

> [திங்கள் ஜூன் 24, 2024] Eli Zaretskii wrote:
>
>>> From: Visuwesh <visuweshm@gmail.com>
>>> Date: Mon, 24 Jun 2024 09:23:20 +0530
>>> 
>>> I apologise for neglecting to speak out loud before the emacs-30 branch
>>> cut.  Is there a chance to get this patch in emacs-30?  I am using this
>>> patch ever since I sent it to debbugs and I do not face any issue wrt
>>> the pcmanfm issue shown here and other applications which do not wipe
>>> the clipboard.  It would be nice to have it in emacs-30 especially with
>>> org-mode gaining yank-media support for files copied/cut from a file
>>> manager.
>>
>> I can be convinced to make such changes on the release branch only if
>> all they do is make a function whose return value was not interesting
>> to return a useful value.  But the patch does more than that: it
>> introduces pcase-dolist and replaces some FOO with (car FOO) in at
>> least 3 occasions.  
>
> Thanks for the review and consideration, Eli.  The patch only touched
> the return value of a helper function.
>
>> Such changes make me uncomfortable, especially given that this is a
>> case where Emacs needs to jump through hoops to work around
>> misfeatures of some 3rd-party utility.
>
> I suspect similar behaviour will be shown by other file managers.
>
>> Can you rewrite the patch so that it will be clear at a glance that it
>> cannot possibly cause any harm because it just causes the same code
>> return a value?  If you can, we have a chance of installing this on
>> the emacs-30 branch.
>
> I hope the attached patch makes the intent clear.  I added a doc-string
> to the internal function too, and removed pcase-dolist and extra car to
> make the code simpler.
>
>> And, btw, I wonder whether enough people use pcmanfm for us to bother
>> about this issue.
>
> AFAIK, pcmanfm is fairly popular among the window manager users crowd
> due to its light-weight.

I suspect another implication of this is that pcmanfm is actively
developed, so is there any chance of your filing a request with their
developers that they not disclaim ownership of selections after
responding to a request?  It is a very peculiar action for any X client,
and surely it's not only Emacs that is or will be affected.





^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#65892: 30.0.50; yank-media fails for clipboard selection that are wiped after being accessed
  2024-06-25  3:45       ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-06-25  4:36         ` Visuwesh
  2024-06-25 12:59           ` Eli Zaretskii
  0 siblings, 1 reply; 10+ messages in thread
From: Visuwesh @ 2024-06-25  4:36 UTC (permalink / raw)
  To: Po Lu; +Cc: Eli Zaretskii, 65892

[செவ்வாய் ஜூன் 25, 2024] Po Lu wrote:

>> [...]
>>> And, btw, I wonder whether enough people use pcmanfm for us to bother
>>> about this issue.
>>
>> AFAIK, pcmanfm is fairly popular among the window manager users crowd
>> due to its light-weight.
>
> I suspect another implication of this is that pcmanfm is actively
> developed, so is there any chance of your filing a request with their
> developers that they not disclaim ownership of selections after
> responding to a request?  It is a very peculiar action for any X client,
> and surely it's not only Emacs that is or will be affected.

I do not actually use pcmanfm.  It was simply the first file-manager
that came to my mind as I developed the feature for org-mode.  But if no
takes the cake, I will report a bug report once I have the time.

BTW, I would be happy if I can do the above copying/cutting files from
_dired_ without resorting to xclip(1) to set non-STRING targets.  I
tried to do it with the facilities offered by Emacs but failed to set
_only_ the required target without other things like STRING.  The same
happened when I tried to copy an image to the clipboard.  I would be
happy to open a bug report or some such if you're interested.





^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#65892: 30.0.50; yank-media fails for clipboard selection that are wiped after being accessed
  2024-06-25  4:36         ` Visuwesh
@ 2024-06-25 12:59           ` Eli Zaretskii
  2024-06-28  4:20             ` Visuwesh
  0 siblings, 1 reply; 10+ messages in thread
From: Eli Zaretskii @ 2024-06-25 12:59 UTC (permalink / raw)
  To: Visuwesh; +Cc: luangruo, 65892

> From: Visuwesh <visuweshm@gmail.com>
> Cc: Eli Zaretskii <eliz@gnu.org>,  65892@debbugs.gnu.org
> Date: Tue, 25 Jun 2024 10:06:35 +0530
> 
> BTW, I would be happy if I can do the above copying/cutting files from
> _dired_ without resorting to xclip(1) to set non-STRING targets.  I
> tried to do it with the facilities offered by Emacs but failed to set
> _only_ the required target without other things like STRING.  The same
> happened when I tried to copy an image to the clipboard.  I would be
> happy to open a bug report or some such if you're interested.

Isn't this the expected behavior?  The application that sets the
clipboard data has no idea what the consumer might need or would want
to do with the data.  It could past the image, or it could take the
image's meta-data (STRING) and do something with it.  Or it could take
the image's file name and copy the file somewhere.  Or something else.
This is why it is customary to put all the relevant data types in the
clipboard, so that the consumers could take whatever they need.





^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#65892: 30.0.50; yank-media fails for clipboard selection that are wiped after being accessed
  2024-06-25 12:59           ` Eli Zaretskii
@ 2024-06-28  4:20             ` Visuwesh
  2024-06-28  8:59               ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 10+ messages in thread
From: Visuwesh @ 2024-06-28  4:20 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: luangruo, 65892

[செவ்வாய் ஜூன் 25, 2024] Eli Zaretskii wrote:

>> From: Visuwesh <visuweshm@gmail.com>
>> Cc: Eli Zaretskii <eliz@gnu.org>,  65892@debbugs.gnu.org
>> Date: Tue, 25 Jun 2024 10:06:35 +0530
>> 
>> BTW, I would be happy if I can do the above copying/cutting files from
>> _dired_ without resorting to xclip(1) to set non-STRING targets.  I
>> tried to do it with the facilities offered by Emacs but failed to set
>> _only_ the required target without other things like STRING.  The same
>> happened when I tried to copy an image to the clipboard.  I would be
>> happy to open a bug report or some such if you're interested.
>
> Isn't this the expected behavior?  The application that sets the
> clipboard data has no idea what the consumer might need or would want
> to do with the data.  It could past the image, or it could take the
> image's meta-data (STRING) and do something with it.  Or it could take
> the image's file name and copy the file somewhere.  Or something else.
> This is why it is customary to put all the relevant data types in the
> clipboard, so that the consumers could take whatever they need.

While what you say makes perfect sense, I seldom find this to be the
case.  But I think I worded my message too poorly.  As per the manual [1], I
can set use text-property to set an alternate TARGET as

    (gui-set-selection
     'CLIPBOARD
     (propertize "asd" 'x-special/gnome-copied-files
                 "copy\nfile:///home/viz/.mkshrc\nfile:///home/viz/.profile\0"))

If I do

    (x-get-clipboard)

I get

    #("asd" 0 3 (x-special/gnome-copied-files "copy
    file:///home/viz/.mkshrc
    file:///home/viz/.profile\0"))

(where I changed the actual NULL character to \0).  But 

    (gui-get-selection 'CLIPBOARD 'x-special/gnome-copied-files) ;; => nil

In fact, if I do

    (gui-get-selection 'CLIPBOARD 'TARGETS)

I get

    [TIMESTAMP MULTIPLE TEXT COMPOUND_TEXT STRING UTF8_STRING text/plain text/plain\;charset=utf-8 TARGETS LENGTH DELETE FILE_NAME CHARACTER_POSITION LINE_NUMBER COLUMN_NUMBER OWNER_OS HOST_NAME USER CLASS NAME ATOM INTEGER SAVE_TARGETS]

with the x-special/gnome-copied-files nowhere in sight.  If I evaluate
x-get-clipboard in a fresh emacs -Q, I obviously don't see the
text-property too.  I thought the inability of gui-get-selection to
return the expected was because there isn't a proper function for the
TARGET in selection-converter-alist but that should not matter since
yank-media does handle this type fine with just a gui-get-selection
call.  So the problem is with the inability to specify the TARGETS I
think.  If I do

    % printf '%s\0' "copy\nfile:///home/viz/.mkshrc\nfile:///home/viz/.profile" |xclip -t x-special/gnome-copied-files -selection clipboard

I get

    (gui-get-selection 'CLIPBOARD 'TARGETS) ;; => [TARGETS x-special/gnome-copied-files]

If you replace x-special/gnome-copied-files with an image, the same
argument holds.

Perhaps I simply do not understand the manual but I cannot find how to
set the TARGET properly.  It would be nice if the relevant info node
could have examples of gui-set-selection that does sets the clipboard to
have an image as the DATA, or something else.

I hope this is clear.  Sorry for my late reply.

1. (info "(elisp) Window System Selections")





^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#65892: 30.0.50; yank-media fails for clipboard selection that are wiped after being accessed
  2024-06-28  4:20             ` Visuwesh
@ 2024-06-28  8:59               ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-06-28 10:03                 ` Visuwesh
  0 siblings, 1 reply; 10+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-06-28  8:59 UTC (permalink / raw)
  To: Visuwesh; +Cc: Eli Zaretskii, 65892

Visuwesh <visuweshm@gmail.com> writes:

> While what you say makes perfect sense, I seldom find this to be the
> case.  But I think I worded my message too poorly.  As per the manual [1], I
> can set use text-property to set an alternate TARGET as
>
>     (gui-set-selection
>      'CLIPBOARD
>      (propertize "asd" 'x-special/gnome-copied-files
>                  "copy\nfile:///home/viz/.mkshrc\nfile:///home/viz/.profile\0"))
>
> If I do
>
>     (x-get-clipboard)
>
> I get
>
>     #("asd" 0 3 (x-special/gnome-copied-files "copy
>     file:///home/viz/.mkshrc
>     file:///home/viz/.profile\0"))
>
> (where I changed the actual NULL character to \0).  But 
>
>     (gui-get-selection 'CLIPBOARD 'x-special/gnome-copied-files) ;; => nil
>
> In fact, if I do
>
>     (gui-get-selection 'CLIPBOARD 'TARGETS)
>
> I get
>
>     [TIMESTAMP MULTIPLE TEXT COMPOUND_TEXT STRING UTF8_STRING text/plain text/plain\;charset=utf-8 TARGETS LENGTH DELETE FILE_NAME CHARACTER_POSITION LINE_NUMBER COLUMN_NUMBER OWNER_OS HOST_NAME USER CLASS NAME ATOM INTEGER SAVE_TARGETS]
>
> with the x-special/gnome-copied-files nowhere in sight.  If I evaluate
> x-get-clipboard in a fresh emacs -Q, I obviously don't see the
> text-property too.  I thought the inability of gui-get-selection to
> return the expected was because there isn't a proper function for the
> TARGET in selection-converter-alist but that should not matter since
> yank-media does handle this type fine with just a gui-get-selection
> call.  So the problem is with the inability to specify the TARGETS I
> think.  If I do
>
>     % printf '%s\0' "copy\nfile:///home/viz/.mkshrc\nfile:///home/viz/.profile" |xclip -t x-special/gnome-copied-files -selection clipboard
>
> I get
>
>     (gui-get-selection 'CLIPBOARD 'TARGETS) ;; => [TARGETS x-special/gnome-copied-files]
>
> If you replace x-special/gnome-copied-files with an image, the same
> argument holds.
>
> Perhaps I simply do not understand the manual but I cannot find how to
> set the TARGET properly.  It would be nice if the relevant info node
> could have examples of gui-set-selection that does sets the clipboard to
> have an image as the DATA, or something else.
>
> I hope this is clear.  Sorry for my late reply.
>
> 1. (info "(elisp) Window System Selections")

You misunderstand the purpose of permitting properties in selection data
strings, I think.  They are not designed to provide new data types, nor
do they in fact do so, but to enable specifying values specific to a
data type for which an existing selection converter is defined.

Undoubtedly Emacs can be extended with facilities that suit your
requirements, but the release is too close at hand for such new features
as these, I'm afraid.





^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#65892: 30.0.50; yank-media fails for clipboard selection that are wiped after being accessed
  2024-06-28  8:59               ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-06-28 10:03                 ` Visuwesh
  0 siblings, 0 replies; 10+ messages in thread
From: Visuwesh @ 2024-06-28 10:03 UTC (permalink / raw)
  To: Po Lu; +Cc: Eli Zaretskii, 65892

[வெள்ளி ஜூன் 28, 2024] Po Lu wrote:

> Visuwesh <visuweshm@gmail.com> writes:
>
>> While what you say makes perfect sense, I seldom find this to be the
>> case.  But I think I worded my message too poorly.  As per the manual [1], I
>> can set use text-property to set an alternate TARGET as
>>
>>     (gui-set-selection
>>      'CLIPBOARD
>>      (propertize "asd" 'x-special/gnome-copied-files
>>                  "copy\nfile:///home/viz/.mkshrc\nfile:///home/viz/.profile\0"))
>>
>> If I do
>>
>>     (x-get-clipboard)
>>
>> I get
>>
>>     #("asd" 0 3 (x-special/gnome-copied-files "copy
>>     file:///home/viz/.mkshrc
>>     file:///home/viz/.profile\0"))
>>
>> (where I changed the actual NULL character to \0).  But 
>>
>>     (gui-get-selection 'CLIPBOARD 'x-special/gnome-copied-files) ;; => nil
>>
>> In fact, if I do
>>
>>     (gui-get-selection 'CLIPBOARD 'TARGETS)
>>
>> I get
>>
>>     [TIMESTAMP MULTIPLE TEXT COMPOUND_TEXT STRING UTF8_STRING text/plain text/plain\;charset=utf-8 TARGETS LENGTH DELETE FILE_NAME CHARACTER_POSITION LINE_NUMBER COLUMN_NUMBER OWNER_OS HOST_NAME USER CLASS NAME ATOM INTEGER SAVE_TARGETS]
>>
>> with the x-special/gnome-copied-files nowhere in sight.  If I evaluate
>> x-get-clipboard in a fresh emacs -Q, I obviously don't see the
>> text-property too.  I thought the inability of gui-get-selection to
>> return the expected was because there isn't a proper function for the
>> TARGET in selection-converter-alist but that should not matter since
>> yank-media does handle this type fine with just a gui-get-selection
>> call.  So the problem is with the inability to specify the TARGETS I
>> think.  If I do
>>
>>     % printf '%s\0' "copy\nfile:///home/viz/.mkshrc\nfile:///home/viz/.profile" |xclip -t x-special/gnome-copied-files -selection clipboard
>>
>> I get
>>
>>     (gui-get-selection 'CLIPBOARD 'TARGETS) ;; => [TARGETS x-special/gnome-copied-files]
>>
>> If you replace x-special/gnome-copied-files with an image, the same
>> argument holds.
>>
>> Perhaps I simply do not understand the manual but I cannot find how to
>> set the TARGET properly.  It would be nice if the relevant info node
>> could have examples of gui-set-selection that does sets the clipboard to
>> have an image as the DATA, or something else.
>>
>> I hope this is clear.  Sorry for my late reply.
>>
>> 1. (info "(elisp) Window System Selections")
>
> You misunderstand the purpose of permitting properties in selection data
> strings, I think.

As I expected.

> They are not designed to provide new data types, nor
> do they in fact do so, but to enable specifying values specific to a
> data type for which an existing selection converter is defined.

Can the documentation please be expanded to make this point clear?
Given that it talks about text/uri-list, I misunderstood that Emacs can
set clipboard with any TARGET value.  Clearly this is not the case.
Including some more examples would also improve the documentation
significantly IMO.  As it is, it is very hard to understand the
facility.

> Undoubtedly Emacs can be extended with facilities that suit your
> requirements, but the release is too close at hand for such new features
> as these, I'm afraid.

I do not ask for this feature in this release in any case.  It was
merely a side-request/question since I have been left confused for
months now.





^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2024-06-28 10:03 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-12 16:54 bug#65892: 30.0.50; yank-media fails for clipboard selection that are wiped after being accessed Visuwesh
2024-06-24  3:53 ` Visuwesh
2024-06-24 12:13   ` Eli Zaretskii
2024-06-24 13:46     ` Visuwesh
2024-06-25  3:45       ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-06-25  4:36         ` Visuwesh
2024-06-25 12:59           ` Eli Zaretskii
2024-06-28  4:20             ` Visuwesh
2024-06-28  8:59               ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-06-28 10:03                 ` Visuwesh

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.