unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#43146: 27.1; D-Bus property handling incomplete
@ 2020-09-01  1:41 Hugh Daschbach
  2020-09-02 17:58 ` Michael Albinus
  0 siblings, 1 reply; 8+ messages in thread
From: Hugh Daschbach @ 2020-09-01  1:41 UTC (permalink / raw)
  To: 43146

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

When the same D-Bus property is registered on an interface with two
separate paths, only the last property is preserved.  Methods and
signals registered on the same interface on different paths are
preserved.

The attached script demonstrates the property issue.  It can be run as:

emacs -Q  --load  dbus-properties-test.el --eval "(main)"

The script registers a property on "/node0" then runs an asynchronous
dbus-send command to verify that the property is readable.

It then registers the same property on "/node1".

Subsequently, it attempts to read the property from both "/node0" and
"/node1".  The property is successfully returned from the "/node1"
property get request.  Nothing (boolean false) in returned from the
property get for "/node0".

Finally, it opens two windows, one displaying buffer "*node0*"
containing the command for the two get requests for "/node0".  The first
is successful, the second is not.

The other window displays buffer "*node1* which shows the successful get
property on "/node1".

In short, the second registered property survives, the first does not.


[-- Attachment #2: Property loss demonstration script --]
[-- Type: text/plain, Size: 3388 bytes --]

;;; dbus-dict-entry.el --- Test program for complex :dict-entry.  -*- lexical-binding: t; -*-

;; Copyright (C) 2020  Hugh Daschbach

;; Author: Hugh Daschbach <hugh@ccss.com>
;; Keywords: tools

;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with this program.  If not, see <https://www.gnu.org/licenses/>.

;;; Commentary:

;; This program demonstrates an error in handling D-Bus properties
;; interface.
;;
;; `dbus-property-handler' provides an org.freedesktop.DBus.Properties
;; interface to respond to requests for registered properties.  But,
;; unlike methods and signals, properties are not stored per interface
;; per object.  They are merely stored per interface.
;;
;; So the current implementation cannot support properties on the same
;; interface with a different object path.


;;; Code:

(require 'dbus)

(defun main ()
  (interactive)
  (setq dbus-debug t)
  (setq debug-on-error t)
  (dbus-register-property :system
                          "org.gnu.Emacs"
                          "/node0"
                          "org.bluez.GattService1"
                          "Device"
                          :read
                          "-node0-")
  (start-process "node0" "*node0*"
                 "dbus-send"
                 "--system"
                 "--print-reply"
                 (concat
                  "--dest="
                  (dbus-get-unique-name :system))
                 "/node0"
                 "org.freedesktop.DBus.Properties.Get"
                 "string:org.bluez.GattService1"
                 "string:Device")
  (sit-for 1)
  (dbus-register-property :system
                          "org.gnu.Emacs"
                          "/node1"
                          "org.bluez.GattService1"
                          "Device"
                          :read
                          "-node1-")
  (start-process "node0" "*node0*"
                 "dbus-send"
                 "--system"
                 "--print-reply"
                 (concat
                  "--dest="
                  (dbus-get-unique-name :system))
                 "/node0"
                 "org.freedesktop.DBus.Properties.Get"
                 "string:org.bluez.GattService1"
                 "string:Device")
  (start-process "node1" "*node1*"
                 "dbus-send"
                 "--system"
                 "--print-reply"
                 (concat
                  "--dest="
                  (dbus-get-unique-name :system))
                 "/node1"
                 "org.freedesktop.DBus.Properties.Get"
                 "string:org.bluez.GattService1"
                 "string:Device")

  (sit-for 1)
  (split-window-below)
  (switch-to-buffer "*node0*")
  (goto-char (point-min))
  (other-window 1)
  (switch-to-buffer "*node1*")
  (goto-char (point-min)))

(provide 'dbus-dict-entry)

;;; dbus-dict-entry.el ends here

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


Thanks,
Hugh




In GNU Emacs 27.1 (build 1, x86_64-pc-linux-gnu, X toolkit, Xaw3d scroll bars)
 of 2020-08-06 built on klaatu
Repository revision: 86d8d76aa36037184db0b2897c434cdaab1a9ae8
Repository branch: emacs-27
Windowing system distributor 'The X.Org Foundation', version 11.0.12008000
System Description: Artix Linux

Recent messages:
Indenting region...done
Mark set
Saving file /home/hugh/.config/emacs/dbus-properties-test.el...
Wrote /home/hugh/.config/emacs/dbus-properties-test.el
Quit

[mu4e] Indexing... processed 0, updated 0
[mu4e] Indexing completed; processed 0, updated 0, cleaned-up 0

Configured using:
 'configure --with-x-toolkit=lucid'

Configured features:
XAW3D XPM JPEG TIFF GIF PNG RSVG SOUND GPM DBUS GSETTINGS GLIB NOTIFY
INOTIFY ACL GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS LUCID X11 XDBE XIM MODULES THREADS LIBSYSTEMD JSON
PDUMPER LCMS2 GMP

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Emacs-Lisp

Minor modes in effect:
  recentf-mode: t
  semantic-minor-modes-format: ((:eval (if (or semantic-highlight-edits-mode semantic-show-unmatched-syntax-mode)  S)))
  pdf-occur-global-minor-mode: t
  global-magit-file-mode: t
  magit-file-mode: t
  magit-auto-revert-mode: t
  global-git-commit-mode: t
  async-bytecomp-package-mode: t
  global-log4slime-mode: t
  desktop-save-mode: t
  which-key-mode: t
  hungry-delete-mode: t
  paredit-mode: t
  winner-mode: t
  amx-mode: t
  ivy-mode: t
  shell-dirtrack-mode: t
  save-place-mode: t
  global-edit-server-edit-mode: t
  auto-insert-mode: t
  override-global-mode: t
  straight-use-package-mode: t
  straight-package-neutering-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t
  abbrev-mode: t

Load-path shadows:
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-repl hides ~/git/slime/contrib/slime-repl
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-presentations hides ~/git/slime/contrib/slime-presentations
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-xref-browser hides ~/git/slime/contrib/slime-xref-browser
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-typeout-frame hides ~/git/slime/contrib/slime-typeout-frame
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-tramp hides ~/git/slime/contrib/slime-tramp
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-trace-dialog hides ~/git/slime/contrib/slime-trace-dialog
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-sprof hides ~/git/slime/contrib/slime-sprof
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-snapshot hides ~/git/slime/contrib/slime-snapshot
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-scratch hides ~/git/slime/contrib/slime-scratch
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-scheme hides ~/git/slime/contrib/slime-scheme
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-sbcl-exts hides ~/git/slime/contrib/slime-sbcl-exts
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-references hides ~/git/slime/contrib/slime-references
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-quicklisp hides ~/git/slime/contrib/slime-quicklisp
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-presentation-streams hides ~/git/slime/contrib/slime-presentation-streams
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-parse hides ~/git/slime/contrib/slime-parse
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-package-fu hides ~/git/slime/contrib/slime-package-fu
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-mrepl hides ~/git/slime/contrib/slime-mrepl
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-media hides ~/git/slime/contrib/slime-media
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-mdot-fu hides ~/git/slime/contrib/slime-mdot-fu
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-macrostep hides ~/git/slime/contrib/slime-macrostep
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-listener-hooks hides ~/git/slime/contrib/slime-listener-hooks
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-indentation hides ~/git/slime/contrib/slime-indentation
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-hyperdoc hides ~/git/slime/contrib/slime-hyperdoc
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-highlight-edits hides ~/git/slime/contrib/slime-highlight-edits
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-fuzzy hides ~/git/slime/contrib/slime-fuzzy
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-fontifying-fu hides ~/git/slime/contrib/slime-fontifying-fu
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-fancy hides ~/git/slime/contrib/slime-fancy
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-fancy-trace hides ~/git/slime/contrib/slime-fancy-trace
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-fancy-inspector hides ~/git/slime/contrib/slime-fancy-inspector
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-enclosing-context hides ~/git/slime/contrib/slime-enclosing-context
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-editing-commands hides ~/git/slime/contrib/slime-editing-commands
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-compiler-notes-tree hides ~/git/slime/contrib/slime-compiler-notes-tree
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-clipboard hides ~/git/slime/contrib/slime-clipboard
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-cl-indent hides ~/git/slime/contrib/slime-cl-indent
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-c-p-c hides ~/git/slime/contrib/slime-c-p-c
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-buffer-streams hides ~/git/slime/contrib/slime-buffer-streams
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-banner hides ~/git/slime/contrib/slime-banner
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-autodoc hides ~/git/slime/contrib/slime-autodoc
/home/hugh/.config/emacs/straight/build/slime/contrib/slime-asdf hides ~/git/slime/contrib/slime-asdf
/home/hugh/.config/emacs/straight/build/slime/contrib/inferior-slime hides ~/git/slime/contrib/inferior-slime
/home/hugh/.config/emacs/straight/build/slime/contrib/bridge hides ~/git/slime/contrib/bridge
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox hides /home/hugh/.config/emacs/straight/build/org/ox
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-texinfo hides /home/hugh/.config/emacs/straight/build/org/ox-texinfo
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-publish hides /home/hugh/.config/emacs/straight/build/org/ox-publish
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-org hides /home/hugh/.config/emacs/straight/build/org/ox-org
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-odt hides /home/hugh/.config/emacs/straight/build/org/ox-odt
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-md hides /home/hugh/.config/emacs/straight/build/org/ox-md
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-man hides /home/hugh/.config/emacs/straight/build/org/ox-man
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-latex hides /home/hugh/.config/emacs/straight/build/org/ox-latex
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-icalendar hides /home/hugh/.config/emacs/straight/build/org/ox-icalendar
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-html hides /home/hugh/.config/emacs/straight/build/org/ox-html
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-beamer hides /home/hugh/.config/emacs/straight/build/org/ox-beamer
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-ascii hides /home/hugh/.config/emacs/straight/build/org/ox-ascii
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org hides /home/hugh/.config/emacs/straight/build/org/org
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-timer hides /home/hugh/.config/emacs/straight/build/org/org-timer
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-tempo hides /home/hugh/.config/emacs/straight/build/org/org-tempo
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-table hides /home/hugh/.config/emacs/straight/build/org/org-table
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-src hides /home/hugh/.config/emacs/straight/build/org/org-src
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-refile hides /home/hugh/.config/emacs/straight/build/org/org-refile
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-protocol hides /home/hugh/.config/emacs/straight/build/org/org-protocol
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-plot hides /home/hugh/.config/emacs/straight/build/org/org-plot
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-pcomplete hides /home/hugh/.config/emacs/straight/build/org/org-pcomplete
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-num hides /home/hugh/.config/emacs/straight/build/org/org-num
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-mouse hides /home/hugh/.config/emacs/straight/build/org/org-mouse
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-mobile hides /home/hugh/.config/emacs/straight/build/org/org-mobile
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-macs hides /home/hugh/.config/emacs/straight/build/org/org-macs
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-macro hides /home/hugh/.config/emacs/straight/build/org/org-macro
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-list hides /home/hugh/.config/emacs/straight/build/org/org-list
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-lint hides /home/hugh/.config/emacs/straight/build/org/org-lint
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-keys hides /home/hugh/.config/emacs/straight/build/org/org-keys
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-inlinetask hides /home/hugh/.config/emacs/straight/build/org/org-inlinetask
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-indent hides /home/hugh/.config/emacs/straight/build/org/org-indent
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-id hides /home/hugh/.config/emacs/straight/build/org/org-id
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-habit hides /home/hugh/.config/emacs/straight/build/org/org-habit
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-goto hides /home/hugh/.config/emacs/straight/build/org/org-goto
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-footnote hides /home/hugh/.config/emacs/straight/build/org/org-footnote
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-feed hides /home/hugh/.config/emacs/straight/build/org/org-feed
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-faces hides /home/hugh/.config/emacs/straight/build/org/org-faces
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-entities hides /home/hugh/.config/emacs/straight/build/org/org-entities
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-element hides /home/hugh/.config/emacs/straight/build/org/org-element
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-duration hides /home/hugh/.config/emacs/straight/build/org/org-duration
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-datetree hides /home/hugh/.config/emacs/straight/build/org/org-datetree
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-ctags hides /home/hugh/.config/emacs/straight/build/org/org-ctags
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-crypt hides /home/hugh/.config/emacs/straight/build/org/org-crypt
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-compat hides /home/hugh/.config/emacs/straight/build/org/org-compat
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-colview hides /home/hugh/.config/emacs/straight/build/org/org-colview
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-clock hides /home/hugh/.config/emacs/straight/build/org/org-clock
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-capture hides /home/hugh/.config/emacs/straight/build/org/org-capture
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-attach hides /home/hugh/.config/emacs/straight/build/org/org-attach
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-attach-git hides /home/hugh/.config/emacs/straight/build/org/org-attach-git
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-archive hides /home/hugh/.config/emacs/straight/build/org/org-archive
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-agenda hides /home/hugh/.config/emacs/straight/build/org/org-agenda
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol hides /home/hugh/.config/emacs/straight/build/org/ol
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-w3m hides /home/hugh/.config/emacs/straight/build/org/ol-w3m
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-rmail hides /home/hugh/.config/emacs/straight/build/org/ol-rmail
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-mhe hides /home/hugh/.config/emacs/straight/build/org/ol-mhe
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-irc hides /home/hugh/.config/emacs/straight/build/org/ol-irc
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-info hides /home/hugh/.config/emacs/straight/build/org/ol-info
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-gnus hides /home/hugh/.config/emacs/straight/build/org/ol-gnus
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-eww hides /home/hugh/.config/emacs/straight/build/org/ol-eww
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-eshell hides /home/hugh/.config/emacs/straight/build/org/ol-eshell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-docview hides /home/hugh/.config/emacs/straight/build/org/ol-docview
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-bibtex hides /home/hugh/.config/emacs/straight/build/org/ol-bibtex
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-bbdb hides /home/hugh/.config/emacs/straight/build/org/ol-bbdb
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob hides /home/hugh/.config/emacs/straight/build/org/ob
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-vala hides /home/hugh/.config/emacs/straight/build/org/ob-vala
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-tangle hides /home/hugh/.config/emacs/straight/build/org/ob-tangle
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-table hides /home/hugh/.config/emacs/straight/build/org/ob-table
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-stan hides /home/hugh/.config/emacs/straight/build/org/ob-stan
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sqlite hides /home/hugh/.config/emacs/straight/build/org/ob-sqlite
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sql hides /home/hugh/.config/emacs/straight/build/org/ob-sql
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-shen hides /home/hugh/.config/emacs/straight/build/org/ob-shen
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-shell hides /home/hugh/.config/emacs/straight/build/org/ob-shell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sed hides /home/hugh/.config/emacs/straight/build/org/ob-sed
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-screen hides /home/hugh/.config/emacs/straight/build/org/ob-screen
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-scheme hides /home/hugh/.config/emacs/straight/build/org/ob-scheme
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sass hides /home/hugh/.config/emacs/straight/build/org/ob-sass
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ruby hides /home/hugh/.config/emacs/straight/build/org/ob-ruby
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ref hides /home/hugh/.config/emacs/straight/build/org/ob-ref
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-python hides /home/hugh/.config/emacs/straight/build/org/ob-python
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-processing hides /home/hugh/.config/emacs/straight/build/org/ob-processing
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-plantuml hides /home/hugh/.config/emacs/straight/build/org/ob-plantuml
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-picolisp hides /home/hugh/.config/emacs/straight/build/org/ob-picolisp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-perl hides /home/hugh/.config/emacs/straight/build/org/ob-perl
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-org hides /home/hugh/.config/emacs/straight/build/org/ob-org
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-octave hides /home/hugh/.config/emacs/straight/build/org/ob-octave
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ocaml hides /home/hugh/.config/emacs/straight/build/org/ob-ocaml
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-mscgen hides /home/hugh/.config/emacs/straight/build/org/ob-mscgen
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-maxima hides /home/hugh/.config/emacs/straight/build/org/ob-maxima
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-matlab hides /home/hugh/.config/emacs/straight/build/org/ob-matlab
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-makefile hides /home/hugh/.config/emacs/straight/build/org/ob-makefile
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lua hides /home/hugh/.config/emacs/straight/build/org/ob-lua
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lob hides /home/hugh/.config/emacs/straight/build/org/ob-lob
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lisp hides /home/hugh/.config/emacs/straight/build/org/ob-lisp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lilypond hides /home/hugh/.config/emacs/straight/build/org/ob-lilypond
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ledger hides /home/hugh/.config/emacs/straight/build/org/ob-ledger
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-latex hides /home/hugh/.config/emacs/straight/build/org/ob-latex
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-js hides /home/hugh/.config/emacs/straight/build/org/ob-js
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-java hides /home/hugh/.config/emacs/straight/build/org/ob-java
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-io hides /home/hugh/.config/emacs/straight/build/org/ob-io
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-hledger hides /home/hugh/.config/emacs/straight/build/org/ob-hledger
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-haskell hides /home/hugh/.config/emacs/straight/build/org/ob-haskell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-groovy hides /home/hugh/.config/emacs/straight/build/org/ob-groovy
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-gnuplot hides /home/hugh/.config/emacs/straight/build/org/ob-gnuplot
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-fortran hides /home/hugh/.config/emacs/straight/build/org/ob-fortran
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-forth hides /home/hugh/.config/emacs/straight/build/org/ob-forth
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-exp hides /home/hugh/.config/emacs/straight/build/org/ob-exp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-eval hides /home/hugh/.config/emacs/straight/build/org/ob-eval
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-eshell hides /home/hugh/.config/emacs/straight/build/org/ob-eshell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-emacs-lisp hides /home/hugh/.config/emacs/straight/build/org/ob-emacs-lisp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ebnf hides /home/hugh/.config/emacs/straight/build/org/ob-ebnf
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-dot hides /home/hugh/.config/emacs/straight/build/org/ob-dot
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ditaa hides /home/hugh/.config/emacs/straight/build/org/ob-ditaa
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-css hides /home/hugh/.config/emacs/straight/build/org/ob-css
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-core hides /home/hugh/.config/emacs/straight/build/org/ob-core
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-coq hides /home/hugh/.config/emacs/straight/build/org/ob-coq
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-comint hides /home/hugh/.config/emacs/straight/build/org/ob-comint
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-clojure hides /home/hugh/.config/emacs/straight/build/org/ob-clojure
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-calc hides /home/hugh/.config/emacs/straight/build/org/ob-calc
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-awk hides /home/hugh/.config/emacs/straight/build/org/ob-awk
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-asymptote hides /home/hugh/.config/emacs/straight/build/org/ob-asymptote
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-abc hides /home/hugh/.config/emacs/straight/build/org/ob-abc
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-R hides /home/hugh/.config/emacs/straight/build/org/ob-R
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-J hides /home/hugh/.config/emacs/straight/build/org/ob-J
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-C hides /home/hugh/.config/emacs/straight/build/org/ob-C
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-loaddefs hides /home/hugh/.config/emacs/straight/build/org/org-loaddefs
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-install hides /home/hugh/.config/emacs/straight/build/org/org-install
/home/hugh/lisp/custom hides /usr/local/share/emacs/27.1/lisp/custom
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-texinfo hides /usr/local/share/emacs/27.1/lisp/org/ox-texinfo
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-publish hides /usr/local/share/emacs/27.1/lisp/org/ox-publish
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-org hides /usr/local/share/emacs/27.1/lisp/org/ox-org
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-odt hides /usr/local/share/emacs/27.1/lisp/org/ox-odt
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-md hides /usr/local/share/emacs/27.1/lisp/org/ox-md
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-man hides /usr/local/share/emacs/27.1/lisp/org/ox-man
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-latex hides /usr/local/share/emacs/27.1/lisp/org/ox-latex
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-icalendar hides /usr/local/share/emacs/27.1/lisp/org/ox-icalendar
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-html hides /usr/local/share/emacs/27.1/lisp/org/ox-html
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox hides /usr/local/share/emacs/27.1/lisp/org/ox
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-beamer hides /usr/local/share/emacs/27.1/lisp/org/ox-beamer
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-ascii hides /usr/local/share/emacs/27.1/lisp/org/ox-ascii
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-timer hides /usr/local/share/emacs/27.1/lisp/org/org-timer
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-tempo hides /usr/local/share/emacs/27.1/lisp/org/org-tempo
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-table hides /usr/local/share/emacs/27.1/lisp/org/org-table
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-src hides /usr/local/share/emacs/27.1/lisp/org/org-src
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-protocol hides /usr/local/share/emacs/27.1/lisp/org/org-protocol
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-plot hides /usr/local/share/emacs/27.1/lisp/org/org-plot
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-pcomplete hides /usr/local/share/emacs/27.1/lisp/org/org-pcomplete
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-num hides /usr/local/share/emacs/27.1/lisp/org/org-num
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-mouse hides /usr/local/share/emacs/27.1/lisp/org/org-mouse
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-mobile hides /usr/local/share/emacs/27.1/lisp/org/org-mobile
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-macs hides /usr/local/share/emacs/27.1/lisp/org/org-macs
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-macro hides /usr/local/share/emacs/27.1/lisp/org/org-macro
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-list hides /usr/local/share/emacs/27.1/lisp/org/org-list
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-lint hides /usr/local/share/emacs/27.1/lisp/org/org-lint
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-keys hides /usr/local/share/emacs/27.1/lisp/org/org-keys
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-inlinetask hides /usr/local/share/emacs/27.1/lisp/org/org-inlinetask
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-indent hides /usr/local/share/emacs/27.1/lisp/org/org-indent
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-id hides /usr/local/share/emacs/27.1/lisp/org/org-id
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-habit hides /usr/local/share/emacs/27.1/lisp/org/org-habit
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-goto hides /usr/local/share/emacs/27.1/lisp/org/org-goto
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-footnote hides /usr/local/share/emacs/27.1/lisp/org/org-footnote
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-feed hides /usr/local/share/emacs/27.1/lisp/org/org-feed
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-faces hides /usr/local/share/emacs/27.1/lisp/org/org-faces
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-entities hides /usr/local/share/emacs/27.1/lisp/org/org-entities
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-element hides /usr/local/share/emacs/27.1/lisp/org/org-element
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org hides /usr/local/share/emacs/27.1/lisp/org/org
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-duration hides /usr/local/share/emacs/27.1/lisp/org/org-duration
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-datetree hides /usr/local/share/emacs/27.1/lisp/org/org-datetree
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-ctags hides /usr/local/share/emacs/27.1/lisp/org/org-ctags
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-crypt hides /usr/local/share/emacs/27.1/lisp/org/org-crypt
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-compat hides /usr/local/share/emacs/27.1/lisp/org/org-compat
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-colview hides /usr/local/share/emacs/27.1/lisp/org/org-colview
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-clock hides /usr/local/share/emacs/27.1/lisp/org/org-clock
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-capture hides /usr/local/share/emacs/27.1/lisp/org/org-capture
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-attach-git hides /usr/local/share/emacs/27.1/lisp/org/org-attach-git
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-attach hides /usr/local/share/emacs/27.1/lisp/org/org-attach
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-archive hides /usr/local/share/emacs/27.1/lisp/org/org-archive
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-agenda hides /usr/local/share/emacs/27.1/lisp/org/org-agenda
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-w3m hides /usr/local/share/emacs/27.1/lisp/org/ol-w3m
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-rmail hides /usr/local/share/emacs/27.1/lisp/org/ol-rmail
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-mhe hides /usr/local/share/emacs/27.1/lisp/org/ol-mhe
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-irc hides /usr/local/share/emacs/27.1/lisp/org/ol-irc
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-info hides /usr/local/share/emacs/27.1/lisp/org/ol-info
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-gnus hides /usr/local/share/emacs/27.1/lisp/org/ol-gnus
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-eww hides /usr/local/share/emacs/27.1/lisp/org/ol-eww
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-eshell hides /usr/local/share/emacs/27.1/lisp/org/ol-eshell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol hides /usr/local/share/emacs/27.1/lisp/org/ol
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-docview hides /usr/local/share/emacs/27.1/lisp/org/ol-docview
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-bibtex hides /usr/local/share/emacs/27.1/lisp/org/ol-bibtex
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-bbdb hides /usr/local/share/emacs/27.1/lisp/org/ol-bbdb
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-vala hides /usr/local/share/emacs/27.1/lisp/org/ob-vala
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-tangle hides /usr/local/share/emacs/27.1/lisp/org/ob-tangle
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-table hides /usr/local/share/emacs/27.1/lisp/org/ob-table
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-stan hides /usr/local/share/emacs/27.1/lisp/org/ob-stan
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sqlite hides /usr/local/share/emacs/27.1/lisp/org/ob-sqlite
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sql hides /usr/local/share/emacs/27.1/lisp/org/ob-sql
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-shen hides /usr/local/share/emacs/27.1/lisp/org/ob-shen
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-shell hides /usr/local/share/emacs/27.1/lisp/org/ob-shell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sed hides /usr/local/share/emacs/27.1/lisp/org/ob-sed
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-screen hides /usr/local/share/emacs/27.1/lisp/org/ob-screen
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-scheme hides /usr/local/share/emacs/27.1/lisp/org/ob-scheme
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sass hides /usr/local/share/emacs/27.1/lisp/org/ob-sass
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ruby hides /usr/local/share/emacs/27.1/lisp/org/ob-ruby
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-R hides /usr/local/share/emacs/27.1/lisp/org/ob-R
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ref hides /usr/local/share/emacs/27.1/lisp/org/ob-ref
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-python hides /usr/local/share/emacs/27.1/lisp/org/ob-python
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-processing hides /usr/local/share/emacs/27.1/lisp/org/ob-processing
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-plantuml hides /usr/local/share/emacs/27.1/lisp/org/ob-plantuml
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-picolisp hides /usr/local/share/emacs/27.1/lisp/org/ob-picolisp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-perl hides /usr/local/share/emacs/27.1/lisp/org/ob-perl
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-org hides /usr/local/share/emacs/27.1/lisp/org/ob-org
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-octave hides /usr/local/share/emacs/27.1/lisp/org/ob-octave
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ocaml hides /usr/local/share/emacs/27.1/lisp/org/ob-ocaml
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-mscgen hides /usr/local/share/emacs/27.1/lisp/org/ob-mscgen
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-maxima hides /usr/local/share/emacs/27.1/lisp/org/ob-maxima
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-matlab hides /usr/local/share/emacs/27.1/lisp/org/ob-matlab
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-makefile hides /usr/local/share/emacs/27.1/lisp/org/ob-makefile
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lua hides /usr/local/share/emacs/27.1/lisp/org/ob-lua
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lob hides /usr/local/share/emacs/27.1/lisp/org/ob-lob
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lisp hides /usr/local/share/emacs/27.1/lisp/org/ob-lisp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lilypond hides /usr/local/share/emacs/27.1/lisp/org/ob-lilypond
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ledger hides /usr/local/share/emacs/27.1/lisp/org/ob-ledger
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-latex hides /usr/local/share/emacs/27.1/lisp/org/ob-latex
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-js hides /usr/local/share/emacs/27.1/lisp/org/ob-js
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-J hides /usr/local/share/emacs/27.1/lisp/org/ob-J
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-java hides /usr/local/share/emacs/27.1/lisp/org/ob-java
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-io hides /usr/local/share/emacs/27.1/lisp/org/ob-io
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-hledger hides /usr/local/share/emacs/27.1/lisp/org/ob-hledger
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-haskell hides /usr/local/share/emacs/27.1/lisp/org/ob-haskell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-groovy hides /usr/local/share/emacs/27.1/lisp/org/ob-groovy
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-gnuplot hides /usr/local/share/emacs/27.1/lisp/org/ob-gnuplot
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-fortran hides /usr/local/share/emacs/27.1/lisp/org/ob-fortran
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-forth hides /usr/local/share/emacs/27.1/lisp/org/ob-forth
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-exp hides /usr/local/share/emacs/27.1/lisp/org/ob-exp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-eval hides /usr/local/share/emacs/27.1/lisp/org/ob-eval
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-eshell hides /usr/local/share/emacs/27.1/lisp/org/ob-eshell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-emacs-lisp hides /usr/local/share/emacs/27.1/lisp/org/ob-emacs-lisp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob hides /usr/local/share/emacs/27.1/lisp/org/ob
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ebnf hides /usr/local/share/emacs/27.1/lisp/org/ob-ebnf
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-dot hides /usr/local/share/emacs/27.1/lisp/org/ob-dot
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ditaa hides /usr/local/share/emacs/27.1/lisp/org/ob-ditaa
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-css hides /usr/local/share/emacs/27.1/lisp/org/ob-css
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-core hides /usr/local/share/emacs/27.1/lisp/org/ob-core
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-coq hides /usr/local/share/emacs/27.1/lisp/org/ob-coq
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-comint hides /usr/local/share/emacs/27.1/lisp/org/ob-comint
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-clojure hides /usr/local/share/emacs/27.1/lisp/org/ob-clojure
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-C hides /usr/local/share/emacs/27.1/lisp/org/ob-C
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-calc hides /usr/local/share/emacs/27.1/lisp/org/ob-calc
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-awk hides /usr/local/share/emacs/27.1/lisp/org/ob-awk
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-asymptote hides /usr/local/share/emacs/27.1/lisp/org/ob-asymptote
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-abc hides /usr/local/share/emacs/27.1/lisp/org/ob-abc
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-loaddefs hides /usr/local/share/emacs/27.1/lisp/org/org-loaddefs
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-install hides /usr/local/share/emacs/27.1/lisp/org/org-install
/home/hugh/.config/emacs/straight/build/let-alist/let-alist hides /usr/local/share/emacs/27.1/lisp/emacs-lisp/let-alist

Features:
(shadow emacsbug adaptive-wrap adaptive-wrap-autoloads
visual-fill-column visual-fill-column-autoloads thai-util thai-word
make-mode cal-move gud rng-xsd xsd-regexp rng-cmpct rng-nxml rng-valid
nxml-mode nxml-outln nxml-rap sgml-mode xr-autoloads ert xr recentf
texinfo compare-w counsel xdg swiper conf-mode elfeed-link misc
org-protocol warnings mailalias glbt-keyboard gl-bluez-gatt gl-bluetooth
goto-addr pos-tip finder skeleton org-duration cal-china lunar solar
cal-dst cal-bahai cal-islam cal-hebrew holidays hol-loaddefs vc
vc-dispatcher align hmouse-tag glbt-keyboard gl-bluetooth company-tng
dash-functional dash-functional-autoloads dabbrev glbt-keyboard
emms-volume-pulse ...)

Memory information:
((conses 16 8797670 728611)
 (symbols 48 98368 385)
 (strings 32 595671 61963)
 (string-bytes 1 41679748)
 (vectors 16 191237)
 (vector-slots 8 5018325 833650)
 (floats 8 40724 6044)
 (intervals 56 982769 27126)
 (buffers 1000 378))

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

* bug#43146: 27.1; D-Bus property handling incomplete
  2020-09-01  1:41 bug#43146: 27.1; D-Bus property handling incomplete Hugh Daschbach
@ 2020-09-02 17:58 ` Michael Albinus
  2020-09-02 19:01   ` Hugh Daschbach
  0 siblings, 1 reply; 8+ messages in thread
From: Michael Albinus @ 2020-09-02 17:58 UTC (permalink / raw)
  To: Hugh Daschbach; +Cc: 43146

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

Hugh Daschbach <hugh@ccss.com> writes:

Hi Hugh,

> When the same D-Bus property is registered on an interface with two
> separate paths, only the last property is preserved.  Methods and
> signals registered on the same interface on different paths are
> preserved.

I could reproduce the bug locally. The following patch solves it for me,
could you pls check?

Best regards, Michael.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 2359 bytes --]

*** /tmp/ediffkDjiXo	2020-09-02 19:51:41.334910903 +0200
--- /home/albinus/src/emacs/lisp/net/dbus.el	2020-09-02 19:40:00.173649689 +0200
***************
*** 1484,1498 ****

    ;; Create a hash table entry.  We use nil for the unique name,
    ;; because the property might be accessed from anybody.
!   (let ((key (list :property bus interface property))
! 	(val
! 	 (list
  	  (list
  	   nil service path
  	   (cons
  	    (if emits-signal (list access :emits-signal) (list access))
! 	    value)))))
!     (puthash key val dbus-registered-objects-table)

      ;; Return the object.
      (list key (list service path))))
--- 1484,1502 ----

    ;; Create a hash table entry.  We use nil for the unique name,
    ;; because the property might be accessed from anybody.
!   (let* ((key (list :property bus interface property))
!          ;; Remove possible existing entry, because it must be overwritten.
!          (val (seq-remove
!                (lambda (item)
!                  (equal (butlast item) (list nil service path)))
!                (gethash key dbus-registered-objects-table)))
! 	 (entry
  	  (list
  	   nil service path
  	   (cons
  	    (if emits-signal (list access :emits-signal) (list access))
! 	    value))))
!     (puthash key (cons entry val) dbus-registered-objects-table)

      ;; Return the object.
      (list key (list service path))))
***************
*** 1509,1517 ****
      (cond
       ;; "Get" returns a variant.
       ((string-equal method "Get")
!       (let ((entry (gethash (list :property bus interface property)
! 			    dbus-registered-objects-table)))
! 	(when (string-equal path (nth 2 (car entry)))
  	  `((:variant ,(cdar (last (car entry))))))))

       ;; "Set" expects a variant.
--- 1513,1527 ----
      (cond
       ;; "Get" returns a variant.
       ((string-equal method "Get")
!       (let ((entry
!              ;; Remove entries not belonging to this case.
!              (seq-remove
!               (lambda (item)
!                 (not (string-equal path (nth 2 item))))
!               (gethash (list :property bus interface property)
! 		       dbus-registered-objects-table))))
!
!         (when (string-equal path (nth 2 (car entry)))
  	  `((:variant ,(cdar (last (car entry))))))))

       ;; "Set" expects a variant.

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

* bug#43146: 27.1; D-Bus property handling incomplete
  2020-09-02 17:58 ` Michael Albinus
@ 2020-09-02 19:01   ` Hugh Daschbach
  2020-09-02 22:01     ` Hugh Daschbach
  2020-09-03  6:50     ` Michael Albinus
  0 siblings, 2 replies; 8+ messages in thread
From: Hugh Daschbach @ 2020-09-02 19:01 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 43146


Michael Albinus writes:

> Hugh Daschbach <hugh@ccss.com> writes:
>
>> When the same D-Bus property is registered on an interface with 
>> two
>> separate paths, only the last property is preserved.  Methods 
>> and
>> signals registered on the same interface on different paths are
>> preserved.
>
> I could reproduce the bug locally. The following patch solves it 
> for me,
> could you pls check?

Michael, thank you for such a  quick fix.  I've tested this and it 
does
indeed fix my issue.

Looking at how you fix it, I wonder if the change to 
dbus-property-handler
should also apply to the "Set" and "GetAll" cond clauses.

Many thanks.
Hugh






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

* bug#43146: 27.1; D-Bus property handling incomplete
  2020-09-02 19:01   ` Hugh Daschbach
@ 2020-09-02 22:01     ` Hugh Daschbach
  2020-09-03 11:52       ` Michael Albinus
  2020-09-03  6:50     ` Michael Albinus
  1 sibling, 1 reply; 8+ messages in thread
From: Hugh Daschbach @ 2020-09-02 22:01 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 43146

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


Hugh Daschbach writes:

> Michael Albinus writes:
>
>> I could reproduce the bug locally. The following patch solves 
>> it 
>> for me,
>> could you pls check?
>
> Michael, thank you for such a  quick fix.  I've tested this and 
> it 
> does
> indeed fix my issue.
>
> Looking at how you fix it, I wonder if the change to 
> dbus-property-handler
> should also apply to the "Set" and "GetAll" cond clauses.
>
> Many thanks.
> Hugh

I've tweaked the test script to examine the "Set" and "GetAll" 
methods. The updated version is attached below.

Here's the sequence of operations:

/node0                             /node1
------                             ------
register prop, value "-node0-"
get prop, value is  "-node0-"
                                   register prop, value "-node1-"
get prop, value is  "-node0-"
                                   get prop, value is "-node1-"
                                   set prop, value "-replaced-"
get prop, no value returned
                                   get prop, value is "-replaced-"
getall, empty array returned

So I think the "Set" performed on /node1 corrupted the value of 
the property no /node0.  The last two operations on /node0 suggest 
the value of /node0's property is no longer available.

Thanks again,
Hugh



[-- Attachment #2: D-Bus properties set/getall test script. --]
[-- Type: text/plain, Size: 5071 bytes --]

;;; dbus-properties-test.el --- Test program for complex :dict-entry.  -*- lexical-binding: t; -*-

;; Copyright (C) 2020  Hugh Daschbach

;; Author: Hugh Daschbach <hugh@ccss.com>
;; Keywords: tools

;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with this program.  If not, see <https://www.gnu.org/licenses/>.

;;; Commentary:

;; This program demonstrates an error in handling D-Bus properties
;; interface.
;;
;; `dbus-property-handler' provides an org.freedesktop.DBus.Properties
;; interface to respond to requests for registered properties.  But,
;; unlike methods and signals, properties are not stored per interface
;; per object.  They are merely stored per interface.
;;
;; So the current implementation cannot support properties on the same
;; interface with a different object path.


;;; Code:

(require 'dbus)

(defun main ()
  (interactive)
  (setq dbus-debug t)
  (setq debug-on-error t)
  (dbus-register-property :system
                          "org.gnu.Emacs"
                          "/node0"
                          "org.bluez.GattService1"
                          "Device"
                          :readwrite
                          "-node0-")
  (start-process "node0-get" "*node0*"
                 "dbus-send"
                 "--system"
                 "--print-reply"
                 (concat
                  "--dest="
                  (dbus-get-unique-name :system))
                 "/node0"
                 "org.freedesktop.DBus.Properties.Get"
                 "string:org.bluez.GattService1"
                 "string:Device")
  (sit-for 1)
  (dbus-register-property :system
                          "org.gnu.Emacs"
                          "/node1"
                          "org.bluez.GattService1"
                          "Device"
                          :readwrite
                          "-node1-")
  (start-process "node0-get" "*node0*"
                 "dbus-send"
                 "--system"
                 "--print-reply"
                 (concat
                  "--dest="
                  (dbus-get-unique-name :system))
                 "/node0"
                 "org.freedesktop.DBus.Properties.Get"
                 "string:org.bluez.GattService1"
                 "string:Device")
  (start-process "node1-get" "*node1*"
                 "dbus-send"
                 "--system"
                 "--print-reply"
                 (concat
                  "--dest="
                  (dbus-get-unique-name :system))
                 "/node1"
                 "org.freedesktop.DBus.Properties.Get"
                 "string:org.bluez.GattService1"
                 "string:Device")
  (start-process "node1-set" "*node1*"
                 "dbus-send"
                 "--system"
                 "--print-reply"
                 (concat
                  "--dest="
                  (dbus-get-unique-name :system))
                 "/node1"
                 "org.freedesktop.DBus.Properties.Set"
                 "string:org.bluez.GattService1"
                 "string:Device"
                 "variant:string:-replaced-")
  (sit-for 1)
  (start-process "node0-get" "*node0*"
                 "dbus-send"
                 "--system"
                 "--print-reply"
                 (concat
                  "--dest="
                  (dbus-get-unique-name :system))
                 "/node0"
                 "org.freedesktop.DBus.Properties.Get"
                 "string:org.bluez.GattService1"
                 "string:Device")
  (start-process "node1-get" "*node1*"
                 "dbus-send"
                 "--system"
                 "--print-reply"
                 (concat
                  "--dest="
                  (dbus-get-unique-name :system))
                 "/node1"
                 "org.freedesktop.DBus.Properties.Get"
                 "string:org.bluez.GattService1"
                 "string:Device")
  (start-process "node0-get" "*node0*"
                 "dbus-send"
                 "--system"
                 "--print-reply"
                 (concat
                  "--dest="
                  (dbus-get-unique-name :system))
                 "/node0"
                 "org.freedesktop.DBus.Properties.GetAll"
                 "string:org.bluez.GattService1"
                 "string:Device")

  (sit-for 1)
  (split-window-below)
  (switch-to-buffer "*node0*")
  (goto-char (point-min))
  (other-window 1)
  (switch-to-buffer "*node1*")
  (goto-char (point-min)))

(provide 'dbus-properties-test)

;;; dbus-properties-test.el ends here

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

* bug#43146: 27.1; D-Bus property handling incomplete
  2020-09-02 19:01   ` Hugh Daschbach
  2020-09-02 22:01     ` Hugh Daschbach
@ 2020-09-03  6:50     ` Michael Albinus
  1 sibling, 0 replies; 8+ messages in thread
From: Michael Albinus @ 2020-09-03  6:50 UTC (permalink / raw)
  To: Hugh Daschbach; +Cc: 43146

Hugh Daschbach <hugh@ccss.com> writes:

Hi Hugh,

> Michael, thank you for such a  quick fix.  I've tested this and it
> does
> indeed fix my issue.
>
> Looking at how you fix it, I wonder if the change to
> dbus-property-handler
> should also apply to the "Set" and "GetAll" cond clauses.

I had exactly the same idea when I was in bed. Will do now.

> Many thanks.
> Hugh

Best regards, Michael.





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

* bug#43146: 27.1; D-Bus property handling incomplete
  2020-09-02 22:01     ` Hugh Daschbach
@ 2020-09-03 11:52       ` Michael Albinus
  2020-09-03 18:23         ` Hugh Daschbach
  0 siblings, 1 reply; 8+ messages in thread
From: Michael Albinus @ 2020-09-03 11:52 UTC (permalink / raw)
  To: Hugh Daschbach; +Cc: 43146

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

Hugh Daschbach <hugh@ccss.com> writes:

Hi Hugh,

> I've tweaked the test script to examine the "Set" and "GetAll"
> methods. The updated version is attached below.

Thanks for the test file.

I've appended another patch, could you pls apply this instead of the
first one? Locally, I've tested your script successfully.

> Thanks again,
> Hugh

Best regards, Michael.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 5663 bytes --]

*** /tmp/ediffWCMSQF	2020-09-03 13:49:33.193916784 +0200
--- /home/albinus/src/emacs-27/lisp/net/dbus.el	2020-09-03 13:36:44.960364842 +0200
***************
*** 1477,1482 ****
--- 1477,1502 ----
  	       (nreverse result))
  	(push (cons (car dict) (cl-caadr dict)) result)))))

+ (defun dbus-get-this-registered-property (bus _service path interface property)
+   "Return PROPERTY entry of `dbus-registered-objects-table'.
+ Filter out not matching PATH."
+   ;; Remove entries not belonging to this case.
+   (seq-remove
+    (lambda (item)
+      (not (string-equal path (nth 2 item))))
+    (gethash (list :property bus interface property)
+             dbus-registered-objects-table)))
+
+ (defun dbus-get-other-registered-property (bus _service path interface property)
+   "Return PROPERTY entry of `dbus-registered-objects-table'.
+ Filter out matching PATH."
+   ;; Remove matching entries.
+   (seq-remove
+    (lambda (item)
+      (string-equal path (nth 2 item)))
+    (gethash (list :property bus interface property)
+             dbus-registered-objects-table)))
+
  (defun dbus-register-property
    (bus service path interface property access value
     &optional emits-signal dont-register-service)
***************
*** 1543,1554 ****
    ;; because the property might be accessed from anybody.
    (let ((key (list :property bus interface property))
  	(val
! 	 (list
  	  (list
  	   nil service path
  	   (cons
  	    (if emits-signal (list access :emits-signal) (list access))
! 	    value)))))
      (puthash key val dbus-registered-objects-table)

      ;; Return the object.
--- 1563,1576 ----
    ;; because the property might be accessed from anybody.
    (let ((key (list :property bus interface property))
  	(val
!          (cons
  	  (list
  	   nil service path
  	   (cons
  	    (if emits-signal (list access :emits-signal) (list access))
! 	    value))
!           (dbus-get-other-registered-property
!            bus service path interface property))))
      (puthash key val dbus-registered-objects-table)

      ;; Return the object.
***************
*** 1566,1581 ****
      (cond
       ;; "Get" returns a variant.
       ((string-equal method "Get")
!       (let ((entry (gethash (list :property bus interface property)
! 			    dbus-registered-objects-table)))
  	(when (string-equal path (nth 2 (car entry)))
  	  `((:variant ,(cdar (last (car entry))))))))

       ;; "Set" expects a variant.
       ((string-equal method "Set")
        (let* ((value (caar (cddr args)))
! 	     (entry (gethash (list :property bus interface property)
! 			     dbus-registered-objects-table))
  	     ;; The value of the hash table is a list; in case of
  	     ;; properties it contains just one element (UNAME SERVICE
  	     ;; PATH OBJECT).  OBJECT is a cons cell of a list, which
--- 1588,1603 ----
      (cond
       ;; "Get" returns a variant.
       ((string-equal method "Get")
!       (let ((entry (dbus-get-this-registered-property
!                     bus service path interface property)))
  	(when (string-equal path (nth 2 (car entry)))
  	  `((:variant ,(cdar (last (car entry))))))))

       ;; "Set" expects a variant.
       ((string-equal method "Set")
        (let* ((value (caar (cddr args)))
! 	     (entry (dbus-get-this-registered-property
!                      bus service path interface property))
  	     ;; The value of the hash table is a list; in case of
  	     ;; properties it contains just one element (UNAME SERVICE
  	     ;; PATH OBJECT).  OBJECT is a cons cell of a list, which
***************
*** 1590,1597 ****
  	  (signal 'dbus-error
  		  (list "Property not writable at path" property path)))
  	(puthash (list :property bus interface property)
! 		 (list (append (butlast (car entry))
! 			       (list (cons (car object) value))))
  		 dbus-registered-objects-table)
  	;; Send the "PropertiesChanged" signal.
  	(when (member :emits-signal (car object))
--- 1612,1621 ----
  	  (signal 'dbus-error
  		  (list "Property not writable at path" property path)))
  	(puthash (list :property bus interface property)
! 		 (cons (append (butlast (car entry))
! 			       (list (cons (car object) value)))
!                        (dbus-get-other-registered-property
!                         bus service path interface property))
  		 dbus-registered-objects-table)
  	;; Send the "PropertiesChanged" signal.
  	(when (member :emits-signal (car object))
***************
*** 1607,1620 ****
        (let (result)
  	(maphash
  	 (lambda (key val)
! 	   (when (and (equal (butlast key) (list :property bus interface))
! 		      (string-equal path (nth 2 (car val)))
! 		      (not (functionp (car (last (car val))))))
! 	     (push
! 	      (list :dict-entry
! 		    (car (last key))
! 		    (list :variant (cdar (last (car val)))))
!               result)))
  	 dbus-registered-objects-table)
  	;; Return the result, or an empty array.
  	(list :array (or result '(:signature "{sv}"))))))))
--- 1631,1645 ----
        (let (result)
  	(maphash
  	 (lambda (key val)
!            (dolist (item val)
! 	     (when (and (equal (butlast key) (list :property bus interface))
! 		        (string-equal path (nth 2 item))
! 		        (not (functionp (car (last item)))))
! 	       (push
! 	        (list :dict-entry
! 		      (car (last key))
! 		      (list :variant (cdar (last item))))
!                 result))))
  	 dbus-registered-objects-table)
  	;; Return the result, or an empty array.
  	(list :array (or result '(:signature "{sv}"))))))))

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

* bug#43146: 27.1; D-Bus property handling incomplete
  2020-09-03 11:52       ` Michael Albinus
@ 2020-09-03 18:23         ` Hugh Daschbach
  2020-09-03 18:57           ` Michael Albinus
  0 siblings, 1 reply; 8+ messages in thread
From: Hugh Daschbach @ 2020-09-03 18:23 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 43146


Michael Albinus writes:

> Hugh Daschbach <hugh@ccss.com> writes:
>
> Hi Hugh,
>
>> I've tweaked the test script to examine the "Set" and "GetAll"
>> methods. The updated version is attached below.
>
> Thanks for the test file.
>
> I've appended another patch, could you pls apply this instead of 
> the
> first one? Locally, I've tested your script successfully.

That works!  Thanks.

I've tested this with code that originally surfaced this issue and 
no longer see a problem.

Please close the ticket at your convenience.

Thanks again.
Hugh





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

* bug#43146: 27.1; D-Bus property handling incomplete
  2020-09-03 18:23         ` Hugh Daschbach
@ 2020-09-03 18:57           ` Michael Albinus
  0 siblings, 0 replies; 8+ messages in thread
From: Michael Albinus @ 2020-09-03 18:57 UTC (permalink / raw)
  To: Hugh Daschbach; +Cc: 43146-done

Version: 27.2

Hugh Daschbach <hugh@ccss.com> writes:

Hi Hugh,

>> I've appended another patch, could you pls apply this instead of the
>> first one? Locally, I've tested your script successfully.
>
> That works!  Thanks.
>
> I've tested this with code that originally surfaced this issue and no
> longer see a problem.

Thanks for the feedback. I've pushed the patch to the emacvs-27 branch,
will appear with upcoming Emacs 27.2.

> Please close the ticket at your convenience.

Done. FYI, I use the opportunity to work on further dbus.el
enhancements, being on my todo for a long time. This includes the :write
access type of properties, and raising proper D-Bus error messages. Will
appear with Emacs 28.

> Thanks again.
> Hugh

Best regards, Michael.





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

end of thread, other threads:[~2020-09-03 18:57 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-01  1:41 bug#43146: 27.1; D-Bus property handling incomplete Hugh Daschbach
2020-09-02 17:58 ` Michael Albinus
2020-09-02 19:01   ` Hugh Daschbach
2020-09-02 22:01     ` Hugh Daschbach
2020-09-03 11:52       ` Michael Albinus
2020-09-03 18:23         ` Hugh Daschbach
2020-09-03 18:57           ` Michael Albinus
2020-09-03  6:50     ` Michael Albinus

Code repositories for project(s) associated with this public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).